微机原理与接口技术 实验讲稿( ppt)
DESCRIPTION
微机原理与接口技术 实验讲稿( PPT). 电子科技大学自动化工程学院 (习友宝 副教授) 2005年6月. 实验项目. 实验箱简介 基于 EPP 接口的 LED 显示 8255并行接口原理及编程 8253计数器原理及分频实验 8253计数器在测频中的应用 双积分式 A/D 转换器7109 的原理及编程 逐次比较式 A/D 转换器0809的原理及编程 D/A 转换器0832的原理实验 DAC0832 在程控信号源中的应用 LED 点阵显示 基本并行输入/输出口在键盘接口中的应用 8250串行通信 电子称实验. 实验箱简介. 实验箱的组成原理 - PowerPoint PPT PresentationTRANSCRIPT
实验项目 实验箱简介 基于 EPP 接口的 LED 显示 8255 并行接口原理及编程 8253 计数器原理及分频实验 8253 计数器在测频中的应用 双积分式 A/D 转换器 7109 的原理及编程 逐次比较式 A/D 转换器 0809 的原理及编程 D/A 转换器 0832 的原理实验 DAC0832 在程控信号源中的应用 LED 点阵显示 基本并行输入 / 输出口在键盘接口中的应用 8250 串行通信 电子称实验
实验箱简介实验箱的组成原理 ▼ 实验主板的原理 实验主板是由并行 I/O 、定时器 / 计数器、A/D 转换器、 D/A 转换器及 LED 显示器等
接口部件构成,采用了总线结构,各功能部件均通过内部总线进行连接,如下图所示。
▼ 实验主板的布局
电源
EPP接口
LED 数字显示
A /D转换器( 7109)应用
8255并行口 应用
D/ A转换器( 0832)应用实验
外接扩展板 接口
A/ D转换器 ( 0809)应用
8253计数器 应用实验
EPP 接口原理 ▼EPP 信号特性,其引脚定义如下图
引脚 SPP信号 EPP信号 方向 EPP功能描述1 STOBE nWr i t e 输出 读写信号,低写高读
2~9 Dat a0~7 Dat a0~7 双向 双向数据/地址线10 ACK I nt er r upt 输入 中断请求线,上升沿触发
11 BUSY nWai t 输入握手信号,低表示开始一个周期,高表示结束一个周期
12 PE 用户自定义 输入 按不同外设自定义13 SELECT 用户自定义 输入 按不同外设自定义14 AUTO LF nDat aSTB 输出 数据选通信号,低表示正在进行数据读写操作15 ERROR 用户自定义 输入 按不同外设自定义16 I NTI nReset 输出 外设复位信号,低有效17 SLCT I N nAddr STB 输出 地址选通信号,低表示正在进行地址读写操作
18~25 GND GND GND 信号地
▼ EPP 端口寄存器 端口地址如表下图所示。表中 BASE为并口基地址,地 址 端 口 名 称 方 向
BASE+0 数据端口 ( SPP) 写
BASE+1 状态端口 ( SPP/ EPP) 读
BASE+2 控制端口 ( SPP/ EPP) 写
BASE+3 地址端口 ( EPP) 读 /写
BASE+4 数据端口 ( EPP) 读 /写
BASE+5 未定义 ( 16/ 32bi t Tr ansf er ) -
BASE+6 未定义 ( 32bi t Tr ansf er ) -
BASE+7 未定义 ( 32bi t Tr ansf er ) -
状态寄存器和控制寄存器各位具体定义如下图所示。
中断使能位1有效
× × DI R I RQEN ASTRB I NI T DSTRB WRI TE
方向位1=输入0=输出 地址选通位
0有效
初始化位1有效
数据选通位0有效
读 /写状态位1=读0=写
控制寄存器(BASE+2)
D7 D6 D5 D4 D3 D2 D1 D0
WAI T I NTR USER1 USER2 USER3 × × TMOUT状态寄存器( BASE+1)
Wai t状态位1有效
中断请求状态位1有效
用户自定义保留( EPP1. 7)超时标志位( EPP1. 9)
1=超时; 0=未超时
▼ EPP 接口初始化 在使用 EPP 之前应将并口置于正向传输
模式(输出),即将控制寄存器的方向位( Bit5 )置 0 。可编写 EPP 初始化函数 epp_init() 如下:
void epp_init(void) {
outportb(0x37a,0x04);
}
▼ EPP时序 数据 / 地址写周期时序
nW rite
nW ait
Va lidD ata
nD ataS TB
D ata
IS A (IO W )
nW rite
nW ait
Va lidD ata
nA ddS TB
D ata
IS A (IO W )
数据 / 地址读周期时序
nD ataS TB
nW rite
nW ait
D ata ValidD ata
IS A (IO R )
nA ddS TB
nW rite
nW ait
D ata ValidD ata
IS A (IO R )
▼ EPP 端口读写 计算机要同外设实验箱通信,就要通过
EPP 接口来读写数据,因此,首先应向EPP 地址端口( BASE+3 )写入欲访问的外设地址,然后从 EPP 数据端口(BASE+4) 读写数据,每次读写 1 个字节
EPP 端口写函数 epp_write_data()
void epp_write_data(unsigned char paddr,unsigned char data)
{ outportb(0x37b,paddr); epp_check_clear(); outportb(0x37c,data); epp_check_clear();
}
EPP 端口读函数 epp_read_data()
void epp_read_data(unsigned char paddr,unsigned char *data)
{ outportb(0x37b, paddr); epp_check_clear(); *data = inportb(0x37c); epp_check_clear(); }
EPP 接口与本实验平台的连接 , 如下ABC
E1E2
Y0Y1Y2Y3Y4Y5Y6Y7
D1...D8
CLK
Q1Q2Q3Q4Q5Q6Q7Q8
A0..A7
EDI R
B0...B7
ABC
E1E2
Y0Y1Y2Y3Y4Y5Y6Y7
nWai t信号产生电路
nDat aSTB
nAddr STB
nWr i t e
nWai t
AD0 . . .AD7
WR
RD
1Y01Y11Y21Y31Y41Y5 1Y61Y7
2Y02Y12Y22Y3 2Y4 2Y52Y62Y7
DB0. . . DB7
EPP
接
口
74LS245
74LS273
D0. . . . . D7
A0A1
A5A6A7
A2
n R ead
DB0. . . DB7
扩展接口扩展接口的原理及管脚定义如下图所示。
A0
EDI R
B0B1B2B3B4B5B6B7
ED0ED1ED2ED3ED4ED5 ED6ED7
D0
RD
1Y61Y7
A0A1A21Y71Y6RDWRnDat aSTB AI N+
扩展接口
151617
1234567891011121314
1819202122232425262728293031323334
AGNDAI 7AI 6AI 5AI 4AI 3AI 2F0FX+12V- 12VAGNDVCCGNDI NTERRUPT
GND74LS245
A7
. . . . . . . . .
.
.
.
.
D7
键盘、点阵实验扩展板 ,原理框图如下:ED0 . . .ED7
扩
展
接
口
ABC
E1E2
Y0
Y7E3
74LS138
ABC
E1E2
Y0
Y7E3
74LS138
D1
D8
CLRCLK
Q1Q2Q3Q4
Q8
74LS273
.
.
.
.
.
.
.
VCC
Q1~Q3
Q1~Q3
Q4
VCC
ED0~ ED7
ABC
E1E2E3
Y0Y1Y2Y3Y4Y5Y6Y7
Y0
Y1
Y2
Y3
Y7
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
D1
D8
CLK
Q1Q2Q3Q4Q5Q6Q7Q8
74LS273
2Y4...
2Y1
1Y4...
1Y1
2A4...
2A1
1A4...
1A1
2G1G
74LS244
.
.
.
.
.
.
键盘矩阵的行
键盘矩阵的列
ED0~ ED2
ED0~ ED7
CLRVCC
A0A1A2
nDat aSTB
VCC
1Y71Y6RDWR
GND
2803
VCC
Q1
Q8
D1
D8
Q1~Q8D1
D8
CLRCLK
Q1
Q8
74LS273
.
.
.
.
.
.
VCC
GND
2803
VCC
Q1
Q8
D1
D8
Q1~Q8D1
D8
CLRCLK
Q1
Q8
74LS273
.
.
.
.
.
.
VCC
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
VCC
VCC
ED0~ ED7
.
.
.
.
.
ED0~ ED7
Q4
74LS138
16*16点阵前八行
16*16点阵后八行
16*16点阵左边八列
16*16点阵右边八列
串口实验扩展板 ,原理框图如下:ED0 . . .
ED7
扩
展
接
口
D0...
D7
CS0
CS1
CS2
I NTR
XTAL1 晶振源
CTS
RTS
T2i n
T1i n
R2out
R1out
T2out
T1out
R2i n
R1i n
DTR
SOUT
DSR
SI N
BAUDOUT
RCLK
A0
A1
A2
1A
1EN
1Y
VCC
输出
电路OUT2
OUT1
1Y7A0A1A2
DI STR
DOSTR
RD
WR
RLSD
DOSTRDI STR
ADS
MR复位
电路1Y6
I nt er r upt
实验箱
配备的
串口
通讯线
DTR
TXD
DSR
RXD
ED0 ~ ED7
TC232
8250
头文件 在本实验指导书的附录里,列举了部分
实验的参考源程序,以便同学们在学习的过程中参考。为了使程序更简化、直观,将常用的地址端口和函数定义成头文件的形式,其头文件有:
① paddr.h 对实验板内地址进行了宏定义。 ② eppinit.h EPP 接口初始化。 ③ epprw.h EPP 端口的读 / 写。 ④ displed.h LED 数字显示函数。
实验原理 ▼ LED 显示器原理 7段 LED 显示器的结构和 8 位字节数的
对应关系如下图:
a
b
cd
e
f g
h
h g f e d c b a
D 7 . . . . . . . . . . . . . . . D 0
1=亮; 0=灭(共阴极)1=灭; 0=亮(共阳极)
(每一位相同)
▼ LED 显示实验电路 实验箱主板上带有的四位 LED 显示器采
用四片 CD4511( BCD -七段锁存译码
器)来驱动 。其原理图如下:
D4~D72Y32Y02Y1 2Y1 2Y0
D4~D7D0~D3 D0~D3 D0~D3
74LS273
D0~D7
CD4511 CD4511 CD4511 CD4511
▼ 4位 LED 显示的端口操作为: D 7 D 6 D 5 D 4 D 3 D 2 D 1 D 0
2Y1
第四位小数点亮;1=亮;0=灭
第一位小数点亮;1=亮;0=灭第二位小数点亮;1=亮;0=灭
第三位小数点;1=亮;0=灭
D 7 D 6 D 5 D 4 D 3 D 2 D 1 D 0
2Y0
D 7 D 6 D 5 D 4 D 3 D 2 D 1 D 0
2Y3
第一位 第二位
第三位 第四位
8 4 2 1
本实验共用到的端口地址及其功能介绍00H( 2Y0):输出口,用作后两位显示译码驱动器 45
11 的锁存使能信号。01H( 2Y1):输出口 , 用作前两位显示译码驱动器 45
11 的锁存使能信号。03H ( 2Y3 ):输 出 口 , 用 作 4 位 小 数 点 锁 存 器
74LS273 的 控制 CLK 信号。
编程与调试 ▼ 程序说明 该程序设计功能为: ① 先从最高位开始依次显示 1 , 2 , 3 , 4 ,
显示时只有一位显示,其它位熄灭。 ② 从高到低轮流点亮小数点。 ③ 依次 显 示 0000 , 1111 , 2222 , 333
3 , ......一直到 9999 。
▼ 编程步骤 ① 调用自定义头文件 #include "paddr.h"
#include "epprw.h"
#include "displed.h"
#include "eppinit.h "
② EPP 端口初始化 epp_init();
③ LED 的数字显示 在 LED 上显示某个数,只要在对应的字节上写入这个数即可,例如:要在第二位 LED 上显示 1 ,第一位 LED 上显示 5 ,只要先向 EPP 地址端口写入这
两位的地址 0x00( D_LED ) ,再向 EPP 数据端口写入相应的数据。 epp_write_data(D_LED, 0x15);
如果想要熄灭某个 LED ,只要在相应的位上写入 10 到 15 的任意一个数。程序
中利用此方法循环点亮 LED。
实验任务 1 .编写出 8255 的初始化程序。 2 .编写出循环控制发光二极管的显示程序,并运行通过 3 .编写出交通灯控制模拟程序。 4 .理清 8255 的一些与实验板上其他芯片相连接的 I/O 端口电路。 5 .掌握对 8255PC 口的位操作。
实验原理 ▼ 8255工作原理 8255 有 8条数据引脚 D0~D7 ,它们全部是双向、三态,用来与数据总线相连接;另外,还有 6条输入控制引脚,分别是: ① RESET: 复位输入信号,高电平有效。当 RESET 有效时,将梭鱼哦内部寄存器,包括控 制 寄 存 器清零,而且把 A 、 B 、 C 三个都设 为 输 入 方 式 , 对 应 的 PA7 ~
PA0、 PB7~PB0、 PC7~ PC0 引脚均为高阻态。 ② CS :芯片选中信号,输入低电平有效。只有当它为低电平时 ,8255才被 CPU选中。 ③ A0和 A1 :芯片内部寄存器的选中信号。当有效时, 8255被选中,再由 A0、 A1的编码决定选中通道 A、 B、 C ,还是控制寄存器。 ④ RD :读信号。输入低电平有效。当它为低电平时,由 CPU 读出 8255 的数据或者状态信息。 ⑤ WR :写信号。输入低电平有效当它为低电平时,由 CPU 将数据或命令写到 8255 。CS、 A0、 A1、WR 、五根引脚的电平与 8255 操作的关系,详见下表
8255 通道选择和基本操作表
A 1 A 0 RD WR CS 操 作
0
0
1
0
1
0
0
0
0
1
1
1
0
0
0
A 口 数据总线
B 口 数据总线
C 口 数据总线
输入
0
0
1
1
0
1
0
1
1
1
1
1
0
0
0
0
0
0
0
0
数据总线 A 口
数据总线 B 口
数据总线 C 口
数据总线 控制寄存器
输出
×
1
×
×
1
×
×
0
1
×
1
1
1
0
0
端口输出为 “ 高阻 ”
非法
端口输出为 “ 高阻 ”
禁止
▼ 8255 控制字 ① 8255 方式选择控制字
1 D6 D5 D4 D3 D2 D1 D0
方式选择控制字的标志位
A组方式选择00-方式 0
01-方式 1
1X-方式 2 通道 A: 00-输入 11-输出
PC3~ PC0 : 1-输入0-输出
通道B: 1-输入0-输出
B组方式选择: 0-方式 01-方式 1
PC7 ~ PC4 : 1-输入0-输出
方式 0――基本输入 / 输出方式 1――选通输入 / 输出方式 2――双向数据传送
② 8255按位置位 /复位的控制字 通道 C 的每一位都可以通过向控制寄存器写入置位 /复位控制字,而使它相应位置位(即输出为 1 )或复位(即输出为 0 )。通道 C
置位、
复位控制字的具体格式下图所示。 0 D6 D5 D4 D3 D2 D1 D0
按位置位 /复位标志
1=置 1
0=复位未用
C口01
2
3
4
5
6
7
D1
01
0
1
0
1
0
1
D2
00
1
1
0
0
1
1
D3
00
0
0
1
1
1
1
▼ 实验电路图 PA0
PA7
PB0
PB7
PC0PC1PC2PC3PC4PC5PC6PC7
D0D1D2D3D4D5D6D7
RD
WR
A0A1RESET
CS
VCC
VC C
7109( STATUS)
8253( CLK0)7109( RUN/ HOLD)
0809( EOC)8253( OUT1)
RD
WR
A0
A1
1Y1
VCC
D0. . . D7
▼ 本实验用到的端口地址:23H( 1Y1):输出口, 8255 的控制端口20H( 1Y1):输出口, 8255 端口 A 的地址21H( 1Y1):输入口, 8255B端口 B的地址22H( 1Y1):输入 /输出口, 8255端口 C的地址
编程与调试(一)交通灯实验1 .程序说明 通过对 8255的 A 口读 / 写命令,来循环点亮与 A 口相 连接的红、黄、绿三个发光二级管。在点亮的过程中, 同时在 LED 上显示时间,从 60秒开始倒计时, 60秒到6
秒红灯亮, 5秒到 1秒黄灯亮,然后再从从 60秒开始倒 计时, 60秒到 6秒绿灯亮, 5秒到 1秒黄灯亮。依次循环。
2 .编程思路
初始化8255
EPP初始化
开始
结束
Y
N
点亮红色指示灯(E5 55秒)
点亮绿色指示灯(E5 55秒)
点亮黄色指示灯( E5 5秒)
点亮黄色指示灯( E5 5秒)
循环是否结束?
3 .编程步骤 ① 调用自定义头文件(同上实验一)。 ② EPP 端口初始化(同上实验一)。 ③ 初始化 8255 。 在本实验中设计为方式 0、 A 口输出、 B口输入,故向控制寄存器写入的数据为 0x82 。在交通灯的实验中,我们就用到 A 口的输出。 8255的片选由 1Y1 来控制,其控制寄存器的地址为 0x23( CW_8255)。 epp_write_data(CW_8255,0x82); ④ 向 8255的 A 口写数据。 由指示灯的硬件电路可知,与其相连的端口输出为低电平,指示灯亮;输出为高电平,指示灯灭。 在本实验中我们要依次点亮红色、黄色、绿色、黄色。 epp_write_data(PA_8255, 0xfe); /* 点亮红色指示灯 */ delay(10000); /*延时 */ epp_write_data(PA_8255, 0xfd); /* 点亮黄色指示灯 */ delay(10000); epp_write_data(PA_8255, 0xfb); /* 点亮绿色指示灯 */ delay(10000); epp_write_data(PA_8255, 0xfd); /*点亮黄色指示灯 */
⑤ 点亮实验板上的 LED。 在点亮指示灯的同时,要在 LED 上显示点亮时间,这个数字显示程序可直接调用上面介绍过的 LED 数字显示程序。 epp_write_data(PA_8255, 0xfe); /* 点亮红色指示灯 */ for( i=60;i>5;i-- ) /* 点亮时间 55秒 */ { displed(i,0); /* 调用 LED 数字显示函数 */ for( j=0;j<100;j++ )
delay(1000); if(kbhit()) exit(0);
}
4 .源程序清单 参考指导书附录 I-2 。
(二) A、 B并行口实验1 .程序说明 该程序为通过操作与 8255的 B口相连的开关键,来控制与 8255的 A
口相连的发光二极管的亮和灭。2 .编程思路
启动 8255
读B口输入量
EPP初始化
开始
数据处理
结果输出到 A口
结束
是否退出?
Y
N
3 .编程步骤① 调用自定义头文件(同上)。② EPP 端口初始化(同上)。③ 初始化 8255 (同上)。④ 读取 8255的 B端口的数据 与 8255的 B端口相连接的是 8 个开关控制器,通过操作这些开关
可以使与其相连的 B端口呈现高电平“ 1”或者低电平“ 0”。
epp_read_data(PB_8255, &data); ⑤ 向 A 端口写数据 epp_write_data(PA_8255, data)
4 .源程序清单 参考实验指导书附录 I-3。
实验原理 ▼ 8253 的引脚 8253 有 3 个独立的 16位减计器通道,每一个通道有三条引线: CLK、 GATE和 OUT。 ① CLK: 输入时钟, 8253规定,加在 CLK 引脚的输入时钟周期不能小于 380ns。 ② GATE :门控信号输入引脚。这是控制计数器工作的一个外部信号。当 GATE 引脚为低时,通常都是禁止计数器工作的;只有
GATE为高时,才允许计数器工作。 ③ OUT :输出引脚。当计数到“ 0”时, OUT 引脚上必然有输
出,输出信号波形取决于工作方式。
8253 内部端口的选择及每个通道的读 / 写操作的选择如下表所示
RD WR A1 A0 寄存器选择和操作
1 0 0 0 写入计数器 0
1 0 0 1 写入计数器 1
1 0 1 0 写入计数器 2
1 0 1 1 写入控制寄存器
0 1 0 0 读计数器 0
0 1 0 1 读计数器 1
0 1 1 0 读计数器 2
0 1 1 1 无操作( 3态)
▼ 8253 的端口控制子
D7 D6 D5 D4 D3 D2 D1 D0
00 选择计数器 001 选择计数器 110 选择计数器 211 非法选择
00 计数器锁存命令01 只读 /写最高有效字节 (高 8位)10 只读 /写最低有效字节 (低 8位)11 先写最低有效字节 再写最高有效字节
000 方式 0001 方式 1x10 方式 2x11 方式 3100 方式 4101 方式 5
0 二进制1 BCD
▼ 8253 的工作方式和输出波形 方
式功能 输出波形
0 计完最后一个数中断 写入计数值 N后,经过 N+1 个 CLK脉冲输出变高
1 硬件再触发单拍脉冲 单拍脉冲的宽度为 N个 CLK脉冲
2 速率发生器 每 N个 CLK脉冲,输出一个宽度为 CLK周期的脉冲
3 方波速率发生器 写入N后,输出1/ 2N个CLK高电平 , 1/ 2N个CLK低电平 ( N为偶数 )
( N+1) / 2个CLK高电平 , ( N- 1) / 2N个CLK低电平 ( N为奇数 ){
4 软件触发选通 写入 N后,过 N+1 个 CLK,输出一个宽度为 1个 CLK的脉冲
5 硬件触发选通 门控触发后,过 N+1个 CLK,输出一个宽度为 1个 CLK的脉冲
▼ 实验电路组成原理框图
OUT0GATE0CLK0
OUT1GATE1CLK1
OUT2GATE2CLK2
CSRDWR
A0
A1
11
10
9
13
1415
1617
18
2M H Z
f x
212223
20
19
D SD
CD
CLK
Q
Q
Vcc
D0. . . . D7
1Y5RDWR
A0A1
Vcc
PC3
AO2
FX
自激振荡
(自D/ A输出 )
(外部输入TTL)
(实验主板振荡电路)
指示灯电路
D0
D7
Vcc
Vcc
Vcc
▼ 本实验共用到六个端口地址:23H( 1Y1 ): 输出口, 8255 的控制端口22H( 1Y1 ): 输出端口( PC3),发出计数器 0 的闸门信
号( 0 为关, 1 为开)A0H( 1Y5 ): 输入 / 输出端口, 8253 计数器 0 的读
写口A1H( 1Y5 ): 输入 / 输出端口, 8253 计数器 1 的读
写口A3H( 1Y5 ): 输出端口, 8253 的控制寄存器的端口
编程与调试1. 程序说明 对 8253 的计数器 0 和 1 写入初值,使计数器 1 输出一
定频率的方波,从而使得与计数器 1 输出端相连接的指示灯
循环亮和灭。
2.编程思路 开始
EPP初始化
8255初始化
8253初始化
8255的 PC3口置 1
结束
3.编程步骤① 调用自定义头文件(同上实验一)。② EPP 端口初始化(同上实验一)。③ 初始化 8255 。 8255 的控制字应该定义 C 口的低位为输出口,工作方式为方式 0 。 epp_write_data(CW_8255,0x8a); ④ PC3 口置“ 0”,阻止脉冲输入。 初始化 8253 前,要阻止脉冲输入,就要向 PC3 口置 0 , 8255的 C
口的各个端口可以直接置位和复位。 epp_write_data(CW_8255,0x06);⑤ 初始化 8253 。 8253 的计数器 0 、计数器 1 ,工作方式分别为方式 2 和方式 3 ,都
是先写低字节再写高字节和 BCD 码计数。向计数器 0 置入初值是 1000 ,向计数器 1 置入的初值也是 1000 。
/*8253 的 0 口初始化,写 1000 进去 */epp_write_data(CW_8253,0x35); epp_write_data(CT0_8253,0x00);epp_write_data(CT0_8253,0x10);
/ *8253 的 1 口初始化,设置时间为 1s*/epp_write_data(CW_8253,0x77); epp_write_data(CT1_8253,0x00);epp_write_data(CT1_8253,0x10); ⑥ PC3 置“ 1”,允许脉冲输入。epp_write_data(CW_8255,0X07);
4. 源程序清单 参考实验指导书附录 I-4 。
思考和练习题 1 .向计数器 0 和计数器 1 写入不通的值,指示灯 会出现什么现象?2 .计数器 0 和 1 采用不同的工作方式,指示灯有 什么现象。3 . 8253 的初始化要在一个脉冲的作用下才能完 成,这对实验中计数器输出信号的频率有没 有影响?
实验四 8253 计数器在测频中的应用 实验目的 1 .了解频率测量原理。 2.掌握 8253 的应用编程。 实验任务 1.进一步理解 8253 的硬件电路原理。 2. 根据测频原理,编写出 8253 的测频程序,并运行通
过。
实验原理 ▼ 频率测量原理 所谓“频率”,就是周期性信号在单位时间变化的次
数。若在一定时间间隔T内,计得这个周期信号得重复变化
次数为 N,则其频率可表达为: f= N/T 。电子计数器就是严
格按照该定义进行测频得。其原理方框图和工作时间波形下图所示。
脉冲形成电路
闸门 电子计数器
门控电路
时基信号发生器
1 2 5
4
3
Fx
时基 T
1
2
3
4
5
▼ 8253 的工作原理。
▼自激振荡电路
R2 R1 Rw
C
f
图中将滑动变阻器 Rw左边的阻值设为 Rx,令 R=Rx+ R1 。当 R=R2时 ,
当 R<<R2
时, 本实验主板上设计的是第二种情况,通过调节滑动变阻器 Rw 可获得不同频率的信号源。
▼ 电路原理
OUT0GATE0CLK0
OUT1GATE1CLK1
OUT2GATE2CLK2
CSRDWR
A0
A1
11
10
9
13
1415
1617
18
2M H Z
f x
212223
20
19
D SD
CD
CLK
Q
Q
Vcc
D0. . . . D7
1Y5RDWR
A0A1
Vcc
PC3
AO2
FX
自激振荡
(自D/ A输出 )
(外部输入TTL)
(实验主板振荡电路)
指示灯电路
D0
D7
Vcc
Vcc
Vcc
① 输入单元:输入的待测信号 fx 有以下三种来源: a. AO2 是自 D/A0832 (程控信号源)输出的信号,详见实验六。 b. FX 是外界直接输入的信号。 c. 实验主板上自带的振荡电路源。 ② 计数部分 : 被测频率信号由 8253 的计数器 2 计数
③ 时基信号产生与变换单元④ 逻辑控制单元开门信号由 8255的 PC3 控制。计数器 0 的输出( OUT0 )和计数
器 1 的时钟( CLK1 )直接相连,计数器 1的 OUT1 通过反相器,控制计数器 2的 CLK2 的信号输入,完成硬件方面的控制。实验波形如下图 4 所示(计数器 0 、 1 、 2 的工作方式依次为方式 2 、0 、 2 ,闸门信号全部为高)
PC 3
C LK0
O U T0(C LK1)
O U T1
C LK2
▼闸门时间 在本实验中初始化 8253 时,设定计数器 0 、 1 、 2 的工作方式分别
为 0方式 2 、 0 、 2 ,向计数器 0 、 1 、 2 中置入的数据一次为为
N0、 N1、 N2。定义计数器 0 的时钟输入频率为 F 。闸门( PC3 )打开后,信号 F
进入计数器 0 ,计数器 0工作在方式 2经 N0 分频后输出的波形信号频率 f0 为:
( 1)
计数器 0 输出的频率为 f0 的信号作为计数器 1 时钟信号( CLK1),计数
器 1工作在方式 0 ,经 N1 分频后输出的波形信号频率 f1 为: 由式( 1 )、( 2 )得:
( 2 )
( 3 )
计数器 1 输出的频率为 f1 的信号作为被测信号 fx 的门控信号,则信号
f1 的周期即为闸门时间 T ,由式( 3 )得: ( 4 )
本实验共用到六个端口地址: 23H( 1Y1):输出端口, 8255 的控制端口 22H( 1Y1):输出端口( PC3),发出计数器 0 的闸门信号( 0 为关, 1为开) 输入端口( PC6),读取计数器 2 的闸门信号( 0 为开, 1 为关) A3H( 1Y5):输出端口, 8253 计数器的控制寄存器的端口 A0H( 1Y5):输入 / 输出端口, 8253 计数器 0 的读写口 A1H( 1Y5):输入 / 输出端口, 8253 计数器 1 的读写口 A2H( 1Y5):输入 / 输出端口 ,8253 计数器 2 的读写口
编程步骤1. 程序说明 本程序是利用 8253 计数器,实现对未知频率信号的测频。实验过程中,可以通过探测点 TP9、 TP10、 TP11 分别查看计数器 0 、
1 、 2 的输出情况,通过测试点 TP12 、 TP13 测量经过 74LS74 输出的
1Mhz、5KHz 的波形信号。2. 编程思路
开始
初始化EPP、 8255、 8253初始化
8255的 PC3口置 1
读取门控( PC6)输出值gat e
gat e&40H=0?
读取计数器 2的值
将计数值转化为频率值
结束
Y
4.编程步骤① 调用自定义头文件(同上实验一)。② EPP 端口初始化(同上实验一)。③ 初始化 8255 。epp_write_data(CW_8255,0x8a); /*8255 写控制字 */ ④ PC3 置 0 ,阻值脉冲输入(同实验三)。⑤ 初始化 8253 。/*8253 的 0 口初始化,写 1000 进去 */epp_weite_data(CW_8253,0x35); epp_weite_data(CT0_8253,0x00);epp_weite_data(CT0_8253,0x01);/*8253 的 1 口初始化,设置时间为 1s*/epp_weite_data(CW_8253,0x71); epp_weite_data(CT1_8253,0x00);epp_weite_data(CT1_8253,0x10);/*8253 的 2 口初始化,写 ff 进去 */ epp_weite_data(CW_8253,0xb4); epp_weite_data(CT2_8253,0xff);epp_weite_data(CT2_8253,0xff);
⑥ PC3 置 1 ,允许脉冲输入(同实验三)⑦ 读取计数器 1 的输出量( PC6)。do{ epp_read_data(PC_8255,&gate); /*读 PC6 的值 */ gate=gate&0xf0; gate=gate&0x40; }⑧ 读取计数器 2 寄存器内的值。 epp_weite_data(CW_8253,0x80); /* 锁存计数器通道 2*/epp_weite_data(CW_8253,0xb0); /* 先低字节后高字节 */epp_read_data(CT2_8255,&word.byte[0]);/* 读计数器 2 的低 8 位 */epp_read_data(CT2_8255,&word.byte[1]);/* 读计数器 2 的高 8 位 */
⑨ 在 LED上显示测得的频率。 freq=n/t; /* 将读数转化为频率值 */
displed(freq,0x00); /* 在实验主板上显示测频结果 */
4. 源程序清单 参考实验指导书附录 I-5。 ▼思考和练习题1 .为什么计数器 1 要工作在方式 0 能否工作在其余的工
作 方式下?2 .图中计数器 1 和计数器 0级联,计数器 1 是对计数器
0 的 溢出计数,其目的是什么?3 .不通的闸门时间对测频结果是否有影响?如何影响?4 . 8253 的初始化要在一个脉冲的作用下才能完成,这对 用软件打开闸门的测频结果有什么影响?应该怎样降 低这种影响?
实验五 双积分式 A/D 转换器 7109 的原理及应用
实验目的1.熟悉双积分式 A/D 转换器 7109 的工作原理和外围接
口设计。 2. 深化理解双积分 A/D 转换器及数字电压表的工作原理。
3.了解双积分式 A/D 转换器 7109 的简单应用程序。4.掌握利用 A/D 转换器进行电压测量的基本方法。
工作原理 ▼ 其主要端口端定义如下:( 1) B1~ B12: 12bit 的数据输出端( 2)OR :溢出判别,输出高电平表示过量程;反之,数据有效。( 3) POL :极性判别,输出高电平表示测量值为正值;反之,负值。( 4)MODE :方式选择, 当输入低电平信号时,转换器处于直接输出工作方式。此时可在片选和字节使能的控制下直接读取数据;当输入高电平时,转换器将在信号信号握手方式的每一转换周期的结尾输出数据(本实验选用直接输出工作方式)。( 5) REF :外部参考电压输入(本实验用其典型值: 2.048V)。( 6) INL,INH: 输入电压端口(有效范围是参考电压的 2倍)。( 7)OO,OI: 外部时钟输入(本实验用其典型值: 3.579MHz)。( 8) RUN/ :运行 /保持输入 , 当输入高电平时 , 每经 8192 时钟脉冲完成
一次转换;当输入低电平时,完成正在进行的转换,并停在自动调零阶段( 9) STATUS :状态输出,输出高电平,表明芯片处于积分和反向积分阶
段;输出为低电平,表明反向积分结束,数据被锁存,模拟部分处于自动返回零态阶段。
( 10) CE/ :片选,当其为低电平时,数据正常输出;当其为高电平时,所
有数据输出端( B1~ B12、 POL、 OR )均处于高阻状态。( 11) LBEN :低字节使能,输出低电平时,数据线输出低位字节 B1~
B8。( 12) HBEN :高字节使能,输出低电平时,数据线输出当高位字节 B9~ B12
以及 POL、 OR 的状态值。
▼ A/D 转换时序( ICL7109直接接口方式)
数据有效
RUN/ HOLD
STATUS
高位字节
低位字节
HBEN
LBEN
CE/ LOAD
数据有效
▼ 测量放大电路
+
-
-
+
+
- × 1 × 10
R 47 R 49
R 51
R 52
R 50R 46
V O
V i
选择电阻以确定放大倍数
× 100× 200
× 300
R 54
R 69
R 70
R 71
如图选择不通电阻其增益分别为:① 引脚“ ×1” 脚断开,增益选择为 1倍。② 引脚“ ×1” 和“ ×10”相连,增益为 10倍;③ 引脚“ ×1” 和“ ×100”相连,增益为 100倍;④ 引脚“ ×1” 和“ ×200”相连,增益为 200倍;⑤ 引脚“×1”和“×300”相连,增益为 300倍;
▼ A/D 转换器 7109 实验原理图
REF
I NH
I NL
MODE
STATUS
CE/ LOAD
ORPOL
B9
B12
B1
B8D0
D7
1Y1( PC2)
1Y1( PC4)
RD
1Y4
1Y3
I CL 7109
.
.
.
.
.
.
.
.
...
测量放大电路
V+
V-
OI
OO
+5V
- 5V
2.048V基准电压
0~ 4. 096V
× 2 运放
26
2
20
18
19
40
28
35
34
21
22
23
36
3. 579MHz
RUN/ HOLD
LBEN
HBEN
跳线选择被测电压
AI N+
D0. . . . D7
D0. . . . D5
▼ 数据及控制信号接口
POL OR B11 B10 B9 B8
A/ D转换结果的高 4位数据
2Y5=01H
1=测量结果为正
0=测量结果为负1=溢出
0=结果有效
D7 D6 D5 D4 D3 D2 D1 D0
B7 B6 B5 B4 B3 B2 B1 B0
A/ D转换结果的低 8位数据
2Y6=02H
1=正在转换; 0=转换结束
2Y4=00H IN 0
2Y3=03H O U T2 O U T1 O U T0
1=启动 7109
0=停止7109 00=0通道(板载可调电压)01=1通道(固定 2. 048V电压)10=2通道(外接电压)11=3通道(地)
本实验共用到五个端口:80H( 1Y4):输出口, 7109低位字节输出口。60H( 1Y3):输出口, 7109高位字节输出口。 22H( 1Y1):输入 / 输出端口 ,D2 控制 7109起停( R/H), D4 位读取 7109 的状态( STATUS )信号( 1 正 在转换; 0 转换完毕)。23H( 1Y1):输出口, 8255 的控制端口
校准测量原理 参见实验指导书。
编程与调试1.程序说明 本程序是利用实验主板上的 7109A/D 测量输入电压,输入电压有
4种选择,测量前必须将输入电压端口的跳线选择到需要测量的那个端口。增益也有五种选择(╳ 1 ,╳ 10 ,╳ 100 ,╳ 200 ,╳ 30
0 ),可根据实验需要选择某一档,并将其跳线连接好。实验测得的电压值同时在 PC 机的 CRT 和实验主板内的 LED 上显示出来。 实验过程中,可以通过测试点 TP2查看 7109 的工作状态,通过探
测点 TP3查看 7109 芯片的启动状态。
2.编程思路 开始
结束
N
初始化 EPP接口
启动A/ D转换
转换结束 ?
Y
停止 A/ D转换
读取高位字节并暂存
读取低位字节并暂存
提取高位字节的OR, POL
溢出否 ?
N
Y
输入为负 ?
N
Y
屏蔽高四位
送显示器和 LED
置溢出标志
屏蔽高四位
置负数符号
硬件选择增益和输入端
初始化 8255
3.编程步骤 1 .调用自定义头文件(同上实验一)。2. EPP 接口初始化(同上实验一)。3 .初始化 8255 (同上实验二)。epp_write_data(CW_8255, 0x8a); /* 初始化 8255*/4. PC2 置“ 1”。8255 的端口 PC2 与芯片 7109 的启动端口 ()直接相连,将 PC2 置“ 1”,则启动芯片 7109让它开始工作。
epp_write_data(CW_8255,0x05);/*PC2 置 1 ,启动芯片 7109 的转换 */ 5 .读 PC4 的状态。 do{ epp_read_data(PC_8255,&state);/* 读取转化状态量,端口 PC4 口 */ state=state&0x10;
}while(state==1 ); /*判断 status值:为 1正在转换;为 0转换完 */
6. PC2 置“ 0”。epp_write_data(CW_8255,0x04); /*PC2 置 0, R/=停止转换 */ 7 .读取 7109 转换完毕的数字量,并将其转化成电压值。 epp_read_data(H_7109,&high); /* 读出高位字节 */ epp_read_data(L_7109,&low); /* 读出低位字节 */ v=(high&0x0f)*256+low; 8 .判断极性和溢出if(high&0x10) /*判断溢出位,若溢出则发出警告提示 */printf("WARNING:the input volt is over!\n");if(!(high&0x20)) /*判断符号位 , 显示屏输出 */
printf("- %.3f\n",v);9 .电压值显示在实验主板内的 LED 上。
源程序清单 参考实验指导书附录 I-6。
思考和练习题1. 双斜积分式 A/D 转换器 7109 芯片包括哪几个工作过程?2. 7109 的输入参考电压对 A/D 转换结果有何影响?如 A/D 转换结果
偏大,应如何调节参考电压?3. 记录 10组对 2.048V 的标准电压由 7109A/D 转换结果。如测量
结果 偏大,可能是什么原因造成的?4. 若输入电压的范围是 0~±204.8mV ,则参考电压应调节在多大?
此时电压测量的分辨率是多大?5.根据校准原理,试用校准方法测量( AIN+)输入的被测电压,并
显示结果。
实验六 逐次比较式 A/D 转换器 0809 的原理及编程
实验目的1.熟悉逐次逼近式 A/D 转换器芯片的工作原理。 2.了解 A/D 转换芯片 0809 的接口设计方法。 3.掌握 A/D 转换器 0809 简单的应用编程。
实验任务 1.分析本实验板的电路原理。 2.编写出逐次逼近式 A/D 转换器芯片 0809 的转换与显示的控制 程序,测量通道 0-7 的输入的信号。
实验原理 ▼ 0809工作原理 ADC0809 是 8 路输入的 8 位逐次逼近 A/D 转换器,其转换时间为 16个外部时钟周期。
其主要端口端定义如下:① IN7~ IN0 :八个模拟量输入端。② D7~D0 :数字量输出端。③ ENABLE :输出允许信号。当此信号被选中时,允许从 A/D 转换器的锁存器
中读取数字量。高电平有效。④ START :启动 A/D 转换,当 START 为高电平时, A/D 转换开始。⑤ ALE :地址锁存允许,高电平有效。当 ALE 为高电平时,允许 C、 B、 A
所示的通道被选中,并把该通道的模拟量接入 A/D 转换器。⑥ EOC :转换结束信号。当 A/D 转换结束后,发出一个正脉冲,表示 A/D 转换完毕。此信号可用作 A/D 转换是否完成的检测信号。
⑦ ADDA、 ADDB、 ADDC :通道号选择端, C 为最高位, A 为最低位。 ⑧ CLOCK :外部时钟(本实验采用 500KHz 的时钟频率)。 ⑨ Vref(+ ), Vref(- ) :参考电压端,用来提供D/A 转换器权电阻的标准
电平(本实验采用典型值: Vref(+ )=+ 5V, Vref(- )=0V)。
▼ 被测电压与 A/D 转换结果关系
式中 :
Vin —— 0809A/D 转换器输入电压。 NADC —— 0809A/D 转换结果的 8bit 数字量; Vr —— 0809A/D 转换器外部参考输入电压, Vr= 5.00V;
▼ 数据及控制信号接口
1Y1=22H PC5
D7 D6 D5 D4 D3 D2 D1 D0
0809地址与通道的对应关系
× × × × × × × ×1Y2=40H~ 5FH
40H: 0通道; 43H: 3通道; 46H: 6通道;41H: 1通道; 44H: 4通道; 47H: 7通道;42H: 2通道; 45H: 5通道;
0=转换结束1=正在转换;
▼ A/D转换器 0809实验电路图
ADC0809
AO1AI 2
AI 6AI 7
AI 3AI 4AI 5
D0. . . D7
25
24
23
ADDAADDBADDC
EOC7
A0A1A2
1Y1( PC5)
D0
D7:
10
12
11
16
13
500kHz
Vr 5V( 5. 00V)
VCC
I N2I N1I N0
I N3I N4I N5I N6I N7
CLOCK
VREF( - )
VCC
VREF( +)
GND
ALE
START
ENEBLE9
6
221Y2
RD
WR
测量放大电路
2. 048V基准电压
0~ 4. 096V
× 2 运放
跳线选择被测电压
AI N+
本实验共用到三个端口:40H~ 47H( 1Y2):输入 /输出端口, 0809的地址,控制
字任意。 23H( 1Y1):输出端口, 8255的控制端口。 22H( 1Y1):输入端口,查询 0809转换状态信号
“( 0”正 “在转换; 1”转换完毕)。
编程与调试 (一) 0通道测量电压 1 .程序说明 输入电压有 4种选择,测量前,在实验主板上必须将跳线选择到需要测量的那个端口。增益也有五种选择(╳ 1 ,╳ 10 ,╳ 100 ,╳200 ,╳ 300 ),可根据实验需要选择一档,并在实验板上将其跳线连好。实验测得的电压值显示在 PC 机的 CRT 和实验主板的 LED 上。
2 .编程思路
启动ADC0809
读取 EOC状态值
读取ADC0809输出值
开始
结束
EOC=1?N
Y
送CRT、 LED显示
EPP接口、 8255初始化
3 .编程步骤① 调用自定义头文件。② EPP 端口初始化。③ 初始化 8255 。epp_write_data(CW_8255, 0x8a); ④ 启动芯片 0809 。epp_write_data(AD_0809,0x00); /*启动 0809 进行转换 */
⑤ 读取转换状态量 void eoc(void) { unsigned char status; do /* 读 8255的 pc5 的值,为 1 时转换完毕 */ { epp_read_data(PC_8255,&status); status=status&0x20; }while( status==0 ); /* 状态为 0 时,继续读取状态转换量 */}
⑥ 读取 A/D 转换完毕的数字量,放入 firstdata 中。epp_read_data(AD_0809,&firstdata); /* 读转换完毕的数字量 */firstdata=firstdata&0xff; ⑦ 将读取的数据转换成电压值 V。
v=(double) firstdata*5/255; ⑧ 在 LED上的显示被测电压值。
4 .源程序清单 参考实验指导书附录 I-7 。
(二)测量 1~ 7 通道电压 测量 1~ 7 通道电压的编程思路和测量 0 通道的输入电压一样,
所不通的只是要根据信号的输入通道来确定其输入端口的地址,通道不同其端口地址也不同。下面就仅介绍如何获取通道地址,其余部分参见上面的 0 通道测量电压实验。
程序的开始要输入当前实验所采用的输入通道( cha),如: printf("Please input the channel which you will measure(int 1--7) :"); scanf("%d",&cha);/* 输入值是被测信号输入的那个通道 */
芯片 0809 的基地址为: 0x40( AD_0809),选择通道后,该通道的地址就为: 0x40+ cha( AD_0809+ cha)。即程序中对端口地址的读写就不再是 0x40 ,而是 0x40+ cha。
参考程序实验指导书附录 I-8。
思考和练习题 1 .用 AD0809 采集交流正弦波形,调节信号频率从100Hz增加,观察显示波形的变化。当多高频率时,显
示波形异常,解释此现象? 2. 利用实验五介绍的校准方法,思考如何进行校准测量? 3.编写 0 通道的有校准测量的实验程序,电压输入端选择 0~ 4.096V ,调节其输入电压值,比较有无校准的测
量结果 ,参考源程序见实验指导书附录 I-9 )。
实验七 D/A 转换器 0832 的原理实验 实验目的 1.了解典型 D/A转换器 DAC0832的工作原理。 2.掌握芯片 0832的接口设计方法。 实验任务 1.找出本实验中芯片 0832 的地址。 12.编写实验程序,向 0832 输入不通的数字电压以获得其相应的模拟电压输出,并运行通过。3.记录实验中电压的输出值。
实验原理 ▼ DAC0832工作原理 主要引脚定义如下: ① DI0-DI7: 8 条数据输入线。 ② ILE、 CS、WR1 :三条为输入锁存器的选通线,其中 ILE 为
输入锁存器允许信号输入线(高电平有效),为片选信号输入线(低电平有效),为写信号输入线(低电平有效)。只有当三条线同时有效时,输入数据锁存器才被选通。 ③ XFER和WR2:二条为 DAC 锁存器选通线,其中 XFER 为传送
控制信号输入线(低电平有效), WR2 为写信号输入线(低电平有效),
只有当二条线同时有效时, DAC 锁存器才被选通。
▼ D/A 电流输出表达式
式中, Io1 —— DAC0832 输出电流;( Io1+ Io2=常数); NDAC —— DAC0832 数字输入量; Vr —— DAC0832 外部参考输入电压; R —— DAC0832 内部固定电阻,恒为 5KΩ。
▼ DAC0832数 /模电压转换实验电路
XFER
CS
DI 7....DI 0
WR1WR2
Vr ef
Rf b
I out 1
I out 2
I LE
2Y5
VCC
AO1
Vr 5V
AO2
D7. . . . . D0
ADC0832( I C35)
芯片 0832 的数字电压输入端口( DI7~ DI0 )与实验主板上的八位双向数据总线( D7~ D0 )相连;与地址线 2Y5相连,则其地址为 05H;参考电压有以下两种选择: ① AO1 来自实验主板上的信号源(参见实验八)。 ② Vr5V 来自实验主板上的参考电压源,实验电路原理如下图。
▼ 输出电压值的计算 DAC0832直接得到的转换输出信号是模拟电流,为得到电压输出,
实验电路加了一个运算放大器,得到单极性的电压输出。其中,R=5kΩ;Rfb=15kΩ是固定的内部电阻。则, D/A转换后的输出电压
在本实验中参考电压 Vref选择实验主板上的参考电压源 Vr5V ,其理论值为 5V ,则 D/A 转换后的输出电压就为:
本实验只用到一个端口地址: 05H( 2Y5):输出口, DAC0832( IC35 )的地址。
编程与调试 (1)程序说明 向实验主板上的 DAC0832( IC35 )写入不同的数字
( 0~256),在其输出端测量其相应的电压值,因实验主板上测试点 AO2 与其输出端口直接相连,只要测量测试点
AO2,就可获取经 DAC0832 的转换电压。程序中在 PC 机的
CRT 上还将显示对应的理论电压值,以便实验者参考。
(3)编程步骤 1 .调用自定义头文件(同实验一)。2. EPP 接口初始化(同实验一)。3 .启动芯片 DAC0832( 实验主板上的 IC35)。 epp_write_data(DA2_0832,0x00); /*启动 0832(IC35) 芯片 *
/ 4 .向 0832 写入数据。 DAC0832 是 8 位的 D/A 转换器,故写入的数据应该在 0~ 256
之间。 epp_write_data(DA2_0832,number); 5 .在 PC 机的 CRT 上显示转换电压。 volt=(float)(number*5.00/256);/* 电压转换 */ printf("\n%.2f",volt); /*输出模拟电压值 */
思考和练习题 1.为什么测得的电压值和理论值有区别? 2.数字输入“ 0”时,其输出电压为什么不为 0?3.测量电压时,万用表的负极分别和实验主板上的模拟地和数字地相连接,其测得的结果是不是一样?如不一样,为什么?4.测得的电压值与输入数字 0时获得的电压值的差值与其
相应的理论电压有什么关系?
(4) 源程序清单 参考程序见实验指导书附录 I-10
实验八 DAC0832 在程控信号源中的应用 实验目的1.了解数字式信号波形合成的原理和方法。2.掌握程控信号源的工作原理及实现方法。
实验任务1. 根据本实验的电路原理图确定各端口的地址。 2.通过 EPP 接口控制相应端口,使之产生不同波形、不同频率和幅度的信号。
如图( a )所示的一个八位二进制的加法计数器对时钟计数过程中,计数值 N按 0 、 1 、 2 、 3…255 、 0 、 1 、2 、 3…规律递增变化,得到一串 8 位二进制码的数据流,把它送入 DAC 的输入端,则 DAC 的输出 Uo(t) 呈梯形的增长,获得如图 (b) 所示的波形。若每步跳为 0.01V ,则 Uo(t) 从 0~ 2.55V 的范围变化。
若采用一个可逆计数器对时钟信号交替地作加、减计数时, N的变化为 0、 1、 2、 3…255、 254、 253…3、2、 1、 0、 1、 2…,则 Uo将获得一个三角波的输出电压。
时钟脉冲f 0 Uo( t )计数器
D/ A
转换器 Uo( t )
f o
( a) ( b)
本实验如果采用所示的方案,在计数器和 DAC之间接入一个 ROM,先在 ROM中写入某一函数的幅值数据,根
据加法(或减法)计数器提供的地址码,取出相应地址单元的内容,送至DAC输入端,则可获得任意波形的输出。如三角波、矩形波、正弦波、辛克波( sinx/x)、钟形波等。
地址输入线
数据输入线
D/ A转换器计数器
时钟脉冲f 0
ROM( 256*16)
波形 0( 256)
波形 1( 256)
波形 15( 256)
Uo( t )
▼ DAC0832工作原理▼ 程控信号源实验电路
D7. . . . . D0D0
D7
CLRCLK
ABCD
U/ DCETCEPCLK
Q0 Q1 Q2 Q3 TC
LOAD
ABCD
U/ DCETCEPCLK
Q0 Q1 Q2 Q3 TC
LOAD
ABCD
U/ DCETCEPCLK
Q0 Q1 Q2 Q3 TC
LOAD
VCC2Y4
Q7
Q4
Q3
Q0
1MHz
VCC
VCC
VCC
A11
A8
A7
A0
D7
D0
XFER
CS
DI 7....DI 0
WR1WR2
Vr ef
Rf b
I out 1
I out 2
I LE VCC
Vr 5V( 5V)
AO1
ADC0832( I C33)
EPROM
74LS169
74LS16974LS169
74LS2730832( I C35)的输出端
▼程控的实现 在 8KB 的 EPROM 中固化有 16种波形数据,由高 4 位地址 A8~ A11选择;每一种波形的一个周期由 256个数据代码构成,由低 8 位地址 A0~ A7寻址。 EPROM高 4 位地址 A8~ A11 来自锁存器 74LS273 的高 4位Q5~Q8 ,通过对 74LS273 的
编程可实现波形的程控。 选择好波形后,该波形的 256个数据点的 8 位地址 A7~ A0 由一个 8 位地址计数器(二进制计数器)循环计数产生。实验主板上采用了两个 4 位二进制计数器 74LS169级联实现。通过改变地址计数器的输入时钟频率便可控制波形数据从 EPROM 中读出的速率,从而改变输出频率。固定的 2MHz 频率通过一74LS169 向地址计数器提供输入时钟。计数器 74LS169 采用减计数的工作方式,4 位预置初值位 A、 B、C、 D与 74LS273 的低 4位Q1~Q4相连,通过对
74LS273 的编程可实现频率的程控。 DAC0832(IC33) 的数据写入控制端 WR1 与 74LS169 的动态进位输出 TC相连,同时 TC又作为波形数据点地址计数器的时钟,这使得每个地址状态对应一个信号周期,从而实现地址计数器、波形 EPROM及DAC0832( IC33 )的同步工作。将 AO1 作为 DAC0832( IC35 )的参考电压(参见实验七的图 7-1 ), DAC0832( IC35 )就构成一个 8 位程控衰减器。通过控制写入 DAC0832( IC35 )的 8 位数字量,可实现对电压幅度的程控。
▼ 输出信号及其 对应的控制数据
D 8 D 7 D 6 D 5 D 4 D 3 D 2 D 12Y4=04H
波 形 设 置0000 正 弦 波0001 方 波0010 锯齿波 ( 1)0011 锯齿波 ( 1)0100 梯 形 波0101 三 角 波0110 台阶波 ( 1)0111 台阶波 ( 1)1000 台阶三角波1001 全波整形波1010 钟 形 波1011 辛 克 波1100 对 数 波1101 M 波1110 调 幅 波1111 窄脉冲波
分频比设置0000 禁止0001 20010 30011 40100 50101 60110 70111 81000 91001 101010 111011 121100 131101 141110 151111 16
程控信号源波形和频率设置
D 7 D 6 D 5 D 4 D 3 D 2 D 1 D 0
D I7 D I6 D I5 D I4 D I3 D I2 D I1 D I02Y5=05H
程控信号源幅度设置(0-255)
本实验共用到二个端口地址 04H( 2Y4):输出口,锁存器 273 地址,对程控信号
源波 形、频率控制。05H( 2Y5):输出口,第二片 DAC0832( IC35 )地
址, 程控信号源幅度控制。
编程与调试 (一)程序说明 程控信号源可输出 16 种波形(正弦波、方波。锯齿波( 1 )、锯齿波( 2 )、梯形波、三角波、台阶波
( 1 )、台阶波( 2 )、台阶三角波、全波整流波、钟形波、辛克
波、对数波、M波、调幅波、窄脉冲波),幅度范围位0~ 5V。
本实验中,可在 AO1和 AO2 口测量获得的波形。
(三)编程步骤 1 .调用自定义头文件(同实验一)。2. EPP端口初始化(同实验一)。 3 .选择波形和分频数。 例如要选择 1倍分频的方波 ,则高四位分别为 0001 ,低
四位分别为 0001: epp_write_data(AD1_0832,0x11); 4 .电压幅度的控制。
(四)源程序清单 参考程序见实验指导书附录 I-10。
思考和练习题 1.若分频器的输入数据增大,则产生的波形频率是增大还是减小? 2.若 DAC0832(IC35)的输入数据增大,产生的信号幅
度是增大还是减小? 3.本实验主板产生的信号频率范围如何?有多少个点频信号输出,其频率值分别为多少? 4.本实验主板产生的信号幅度范围如何?有多少个幅度值输出,每跳步的幅度间值相同吗?
实验九 LED 点阵显示技术 实验目的 1.了解 LED 点阵显示的原理及接口驱动方法。 2.熟悉动态扫描显示方式在显示技术中的应用。 3.掌握并行接口与点阵显示的硬件接口和软件编程。
实验任务 1.编写使点阵块全亮和全灭的点阵显示驱动程序段。 2.编写简单的点阵显示程序,在 LED点阵板显示汉字。 3.编写在 LED点阵显示上显示任意字符的点阵显示程序。
实验原理 ▼ LED 点阵简介 LED 点阵式显示器不仅可以显示数字,也可显示所有西文字母和符号,与由单个发光二极管连成的显示器相比,具有焊点少、连线少,所有亮点在同平面、亮度均匀、外形美观等优点,可以代替数码管、符号管和米字管。如果将多块组合,可以构成大屏幕显示屏,用于汉字、图形、图表等等的显示,因此被广泛用于机场、车站、码头、银行及许多公共场所的指示、说明、广告等场合。
▼ 8×8的 LED点阵显示器结构 1 2 3 4 5 6 7 8
13 3 4 10 6 11 15 16
1
2
3
4
5
6
7
8
9
14
8
12
1
7
2
5
管脚
行
列
管脚
8×8的 LED 点阵显示器,是由 64个 LED组成 , 内部电路如图 9-1所示。共阳极的 8 × 8的 LED 点阵显示器的典型连接方式是:每一行的阳极连在一起,由行扫描码锁存器和驱动器的一位控制,总共 8 行阳极连线由8 位分别控制;每一列的 8 个阴极连在一起,由字形行码锁存器和驱动器的一位控制,总共 8 列阴极连线由 8 位分别控制。
▼ 点阵字符的字型码
00H
01H
02H
03H04H
05H06H
07H
08H09H
0A H
0B H
0C H
0D H
0E H
0FH
00H
3FH
00H00H
00H
01H
01H
FFH
01H
01H01H
01H
01H
01H
05H
02H
10H
F8H
10H20H
40H
80H
04H
FE H
00H00H
00H
00H
00H
00H
00H
00H
行选通码 前八列数据 后八列数据
在写点阵显示的驱动之前,应知道各显示字符的字形码。上图是四块 8 × 8的 LED 点阵拼成的一个 16 × 16点阵( 16列 16行)作为1 位字符显示的点阵码图。(本实验采用相同的显示方式显示一个字符)。
▼点阵字符的驱动 点阵式 LED 显示器采用逐行扫描式工作。要使点阵
显示出一个的字符的编程方法是:首先向字形行扫描码锁存器输入行码,选通第一行;接着,向行码锁存器写入该行的字型码。然后,按相同的方式选通第二行,写第二行的字型码……由此类推,直到写完所有行的字型码,完成一个字符的显示。
如果要使多个点阵循环显示多个字符,只要把显示的各个字符按顺序安排在显示缓冲区,然后根据显示的字符去查表,再按一定的时序向各个字形行码锁存器和行扫描器输入相应的字形行码和行扫描码,便可达到目的。
▼ 字库原理
led 点阵显示的原理和过程都很简单,只是输入每个字符的显示点阵码很繁琐。多字符的显示采用的方法是读字库,查出显示字的点阵码,再显示到显示屏上。
国标对汉字库(区位码字库)的结构作了统一的规定:将汉字库分为若干个区,每个区有 94 个汉字。每一个汉字在字库中有一个固定的区和位,即每一个汉字有一个区位码。知道了区位码也就相当于知道了汉字在字库中的位置。由于汉字的内码与区位码有一定的关系,所以,只要通过内码就可以得到区位码,从而也就得到了汉字的字模。
由于计算机对西文字符采用一个字节表示,汉字用二个字节(GBK 内码)表示。为了保证中西文兼容,因此规定每个字节只用七位,若两个字节的最高位均为 1 ,则该字符为汉字。即计算机中的数字和一些特殊符号按 ASCⅡ 编码方式,汉字和一些符号是GBK 内码编码方式来表示。而点阵显示字库是按区位编码方式排列。因此,读字库之前,要完成 ASCⅡ 编码与区位编码的转换和GBK 内码编码与区位编码之间的转换。
▼ UCDOS 16点字库文件( HZK16j) 本实验是读 UCDOS 16 点字库文件( HZK16j)。字库中的汉字按
共阳极 16×16点阵模式存储,即每个汉字由 16×16=256个点组成,占用 16×2=32 个连续的字节单元。字节的每一位( bit )表示一个点的属性: 1表示亮点, 0表示暗点。字符点阵是按照汉字区位码排列的,连续的两个字节表示该汉字字模的一行。
▼ GBK 内码与相应区位码的转换 汉字的内码从一些图形字符开始,起始编码为 A1A1H;汉字内码第一位为区码,每区为 94 个汉字,第二位为位码。汉字点阵数据在字库中的偏移量为: ((区码 -A1H)*94 + ( 位码 -A1H)*32L由此可编辑偏移量的源代码为 inter_code.ed[1]=character[count]; point_quwei=inter_code.ed; /*寻找字符在汉字库中的位 */ wei=((point_quwei & 0xff00) >>8 )- 0xa1; /*寻找字符在汉字库中的区 */ qu=(point_quwei & 0x00ff) - 0xa1; rec=(qu*94+wei)*32L;
▼ ASCⅡ 码与相应区位码的转换 ASCⅡ 码的所有符号全在区位码的第三区,位码的偏移量为
0x21H。ASCⅡ 码在字库中的偏移量为: (区码 *94 + ( 位码 -21H))*32L
由此可编辑偏移量的源代码为: inter_code.ed[0]=character[count]; point_quwei=inter_code.ed; /*寻找字符咱汉字库中的位 */
wei= ((point_quwei & 0x00ff)-0x21; qu=0x03-0x01; /*寻找字符在汉字库中的区 */
rec=(qu*94+wei)*32L;
▼ LED 点阵式显示器实验电路
行扫描码锁存器
D 0
D 0
D 7
D 7
00H
0FH
E D 0...E D 3
C 2H
C 3H
C 1H
锁存器
锁存器
锁存器
驱动器
驱动器
驱动器
E D 0...E D 7
.
.
.
.
.
.
编程与调试 (一)简单的汉字显示 1 .程序说明 该程序为根据每个字符的点阵码( 16×16),直接在 LED 点阵
上显示汉字“电子科大”。2.编程思路
根据字符的点阵码点亮 LED
循环是否结束
开始
结束
N
初始化 EPP口
Y
3 .编程步骤① 根据需要选择自定义头文件(同实验一)。② EPP端口初始化(同实验一)。③ 选择点亮行。 要点亮某行的 LED ,先要向行地址端口写入行数,例如要点亮第一行: epp_write_out(ROW_DOT,0x00);④ 写入每列的点阵码。 要点亮某行的 LED ,向行地址写入数据后,先向左边列写数据再向右边列写数据。例如我们要点亮第一行的第一、三、五、七、九、十一、十三、十五列: epp_write_out(ROW_DOT,0x00); /*选择第几行 */ epp_write_out(L_DOT,0xaa); /* 向左边列写入数据 */ epp_write_out(H_DOT,0xaa); /* 向右边列写入数据 */
(二)在点阵上显示任意字符 1 .程序说明 点阵不仅可以显示汉字,任意字符它都可以显示。可以根据字库的存储原理,在字库中查找要显示字符的点阵码,再将这些点阵码写到的实验板子上,就可以在
LED点阵上显示任意想要的字符。
2.编程思路 开始
结束
N
初始化 EPP接口
根据字符种类获取字符的区位码
循环结束 ?
Y
根据区位码读取字符的点阵码
向实验板写入点阵码点亮 LED点阵
关闭文件
打开文件
读取将要显示的字符
Y
N
3 .编程步骤 ① 根据需要选择自定义头文件(同实验一)。② EPP 端口初始化(同实验一)。③ 输入字符显示速度。printf("Please input the speed within range of 50 and
1000 \n"); scanf("%d",&speed);④ 打开文件。 例如:当文件 Hzk16j.dot和 hz.txt都存放在 F盘 win98 文件中
的dot 子文件中,则:fpk=fopen("F:\\win98\\dot\\Hzk16j.dot","rb")fpt=fopen("F:\\win98\\dot\\hz.txt","r");⑤ 读取将要显示的字符。 word=fgetc(fpt);
⑥ 获取字符的区位码。如果的字符是为数字或者特殊符号: inter_code.ed[1]=word[count1]; point_quwei=(unsigned short *)inter_code.ed; wei=((*point_quwei) & 0x00ff) - 0x21; qu =0x03 - 0x01; rec=qu*94+wei; addr_dot=rec*32L;如果字符是为汉字: inter_code.ed[1]=word[count1]; point_quwei=(unsigned short *)inter_code.ed; wei=(((*point_quwei) & 0xff00) >> 8) - 0xa1; qu=((*point_quwei) & 0x00ff)-0xa1; rec=qu*94+wei; addr_dot=rec*32L;
⑦ 根据区位码读取字符的点阵码。/* 将指针指向字库中将要显示的字符的点阵码的位置 */fseek (fpk, addr_dot, 0);/* 读取所要显示的字符的点阵码,并储存在数组 font 中 */fread (font, 2, 32, fpk);
⑧ 向实验板写入点阵码,点亮 LED点阵。
4.源程序清单 参考程序详见实验指导书附录 I-13 。
思考题和练习 1.写出以下两个图形的点阵码。
2 .编写一个程序,在点阵面板上显示以上两个图形。3 .思考:相邻两行的扫描时间间隔对显示效果的影响(特 别注意延长相邻两行的扫描时间间隔后的显示效果)。4 .编写显示字符(非汉字)的程序段。5 .编写一个程序,在点阵面板上连续显示多个字符。
实验十 基本并行输入 / 输出在键盘接口中的应用
实验目的 1.掌握矩阵键盘的接口驱动原理。 2.掌握基本并行 I/O 和键盘的硬件接口方法。3.熟悉矩阵键盘的应用编程。
实验任务 1.写出键盘扫描的选通码。 2.编写出矩阵键盘识键、判键的程序段。
矩阵式键盘 简介 键盘是由若干按键组合而成的,常采用矩阵式连接,称为矩阵式键盘,即每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。当需要的键数比较多时,采用矩阵连接可以减少 I/O 口的占有。
矩阵式键盘的编程 矩阵式键盘连接可分为编码式和非编码式两种。本键盘共 24键,采用非编码式连接。其应用编程可分为三部分:判键、识键和键处理。 ▼判键 判键即指判断是否有键按下。 确定矩阵式键盘上何键被按下采用一种“行扫描法”。行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法。 首先在程序启动时,把 74LS273输出口(地址为 1Y6= C0H,作为
行扫描输出)初始化到高电平(注意:列线状态由 74LS244输入口(地址为 1 Y6= C7H)输入,常态下通过拉高电阻为高电平)。这样,所有的行输出都是高电平,列输入也都是高电平,代表无键按下。如果行线输出有低电平,一旦有键按下,则列线输入就会被拉低,这样,通过读入列线的状态就可得知是否有键按下。
▼识键 识键即指在判断有键按下时,识别该键是哪个键。这可根据 3 行扫描输出线哪列为低, 8 列输入线哪一列为低,即由该按下键的行
列位置,组合成代表的该键值。 具体编程方法:依次将行线置为低电平,即在置某行线为低电平时,其它线为高电平。在确定某位行线置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键,进而确定该键的键值。 下面给出一个具体的例子: 输入值为 0xFE 、 输出值为 0xBF ,则此键值为第一行第二列的交
叉点的键值;若输入值为 0xFD ,则此键值为第二行第八列的交叉点
的键值。
▼键处理 键处理即在识别到某键按下(由键值表示)后,作出不同的处理。在应用上,一般将键盘分为功能键和数字键(也可两者复用),功能键一般采用散转的办法,让程序执行不同的操作。 实际上,键盘处理是很复杂的,它往往占到一个应用程序的大部份代码,可见其重要性,这种复杂并不来自于设备的本身,而是来自于操作者的习惯等等问题,因此,在编写键盘处理程序之前,最好先把它从逻辑上理清,然后用适当的算法表示出来,最后再编写代码。 本键盘共 24个键,定义了功能键 F1、 F2、 F3、 F4;
U1、 U2、 U3、U4、和 4个方向键配合功能键使用,数字键定义了 0~9和小数点,以
“及 回车 /确认( CR ”) 共十二个。为了方便,使用者可以自己定义每个键的功能和相应的处理。
矩阵式键盘实验电路 矩阵式键盘连接如下图:
C O H
C 7H
锁存器
接收器
B0
F1
U 1
<
F2
U 2
>
F3
U 3
F4
U 4
1
4
7
2
5
8
3
6
9
。
0
C R
B1
B0B1B2B3B4B5B6B7
D 0-D 7
B2
FEH
FDH
FBH
7FH BFH DFH EFH F7H FBH FDH FEH
输出位码
输入键码
F1 F2 F2 F3 1 2 3 .
U1 U2 U3
U4
4 5 6 0
< > 7 8 9 CR
键盘对应标志符
键盘控制字
第一列 第二列 第三列 第四列 第五列 第六列 第七列 第八列Y7=C7H
0=本列有键按下1=本列无键按下 (每一位都相同定义 )
输入列码(读)
D7 D6 D5 D4 D3 D2 D1 D0
第三行 第二行 第一行Y0=C0H
0=扫描本行1=不扫描本行 (每一位都相同定义 )
输出行扫描码(写)
本实验用到的端口地址(地址跳线都选1Y6):
C0H( Y0):输出口,通过 74LS273 输出锁存器,控制
扫描键盘的行线。 C7H( Y7):输人口,通过 74LS244总线接收器,读取
扫描键盘的列线。
编程与调试 (一)程序说明 本实验是键盘和点阵综合实验。包含了矩阵式(非编码)键盘编程的三个部分:判键、识键和键处理,其中键处理(在点阵上显示其相应的内容)在此程序中只是为了说明编程思路。例如按下 F1 键,实验主板上的 LED开始显示数字 1 , 2 , 3……9999;在数字显示
的过程中按下 F2 键, LED停止显示;按下数字键主板上的 LED 显示相
应的数字,按下 CR 键程序退出。 用户在自己编写程序的时候,可以自己定义键盘中按键的功能并加以控制相应的操作。
(三)编程步骤 1 .根据需要选择自定义头文件。 2. EPP 端口初始化。 3 .编写显示函数 display()。 当有 F1 键按下,则实验主板上的 LED 要循环显示 0 , 1 , 2……9999 ,
显示过程中还要判断是否有 F2 键按下。为方便起见,将这一部分功能写成函数( displed())的形式,当有 F1 键按下的时候,直接调用这个函数。函数内容详见本实验的参考程序。
4 .判断是哪一行有键按下。 根据键盘的行扫描原理,先将第一行置“ 0”,再读取 74LS244 的数据端;如果全部为高就将第二行置“ 0”,再读 74LS244 的数据端;如果全部为高就将第三行置“ 0”,再读取 74LS244 的数据端,依次类推,通过输出的行码和读入的列码中“ 0”的位置确定按下的键。while(keyz==0xff){
flage=1; keyz=epp_key(0xfe); /*判断是否是第一行的按键按下 */ if(keyz==0xff) { flage=2; keyz=epp_key(0xfd); /*判断是否是第二行的按键按下 */ if(keyz==0xff) { flage=3; keyz=epp_key(0xfb); /*判断是否是第三行的按键按下 */ } }
}
5 .判断是哪个键按下,并执行相应的操作。 在判断是哪一行有键按下时,再读 74LS244 的数据端,哪位显示低电平“ 0”,其对应的那列就有按键按下。知道了哪一行哪一列
有键按下,就能确定是哪个键按下,例如当第一行的第一列显示低电平时,就说明有 F1 键按下。 判断有 F1 键按下的语句: if(flage==1 && keyz!=0xff) /*第一行有键按下 */ {
if(keyz==0x7f ) /*判断是否为第一行第一列有键按下 */ {
printf("Keyname: \x46\x31\n"); display(); /* 调用显示函数 */ return;
} }
在显示函数( display() )中,要查询是否有 F2 键按下,如有则实验主板上 LED全部熄灭。判断是否有 F2 键按下的语句为: epp_write_data(OUT_KEY,0xfe); /* 键盘第一行置“ 0”*/ epp_read_data(IN_KEY,&keyz2); /* 读取键盘列的状态 */ if( keyz2==0xbf && falge==1 ) /*判断是否有 F2 键按下 */ { epp_write_data(G_LED,0xaa); /* 如有 F2 键按下, led熄灭 * epp_write_data(D_LED,0xaa); } 当有数字键按下时,在主板的 LED 上直接显示相应的数字,此时直接调用头文件( displed.h )中的 LED 显示函数( displed())。例如当有“ 5”键按
下时: if(flage==2 && keyz!=0xff) /*第二行有键按下 */ { if(keyz==0xfb) /*判断是否为第二行第六列有键按下 */
{ printf("Keyname: \x35\n");
displed(5); } }
(四)源程序清单 参考程序见实验指导书附录 I-14 。
思考和练习题 1 .去掉去抖延时时间,对按键的实际效果有何影响? 2 .写出 F1――F4 的键值表。 3 .你对本实验的体会,有何收获。 4 .自己编写用按键控制的程序实验,例如当有键盘相应时在点阵上显示相应的字符,参考程序可见实验指导书附录 I-15。
实验任务 1.熟悉 8250内部寄存器的设置,编写初始化程序,分析它们对串行通信的管理机能和工作过程。 2 .在分析实验电路的基础上,编写 PC 机和实验平台上的 8250 的串行通信实验程序,并在实验主板上运行成功。 3.编写 PC机间通过实验板串行通信程序。
串行通信协议 基本的通信方式分为并行通信和串行通信两种,串行通信又分为同步和异步两种方式,本实验采用的是 RS-232C异步串行通信方
式。为发送和接收一个信息字符所需的一切数据和控制信息都应该在单根数据线上传送,每次传一位,这就需要一个格式协议。
逻辑位 1
逻辑位 0
起始位 数据位 奇偶位 停止位
异步通信的格式如图所示。每幀信息由四部分组成:1 .起始位,规定为低电平“ 0”。2 . 5~ 8 位数据位,它紧跟在起始位后面,是要传送的有效信息。规定 从低位至高位依次传送。3 . 0~ 1 位奇偶校验位。4 . 1 位、 1.5 位或 2 位停止位,规定为高电平。
接口信号 实际上 RS-232-C 的 25条引线中有许多是很少使用的,在计算
机与终端通信中一般只使用 3-9条信号线。 RS-232-C最常用的 9条
引线的信号内容见下表所示。 引脚序号 信号名称 符号 流向 功能
2 发送数据 T X D D T E ? D C E D T E 发送串行数据
3 接收数据 R X D D T E ? D C E D T E 接收串行数据
4 请求发送 RT S D T E ? D C E D T E 请求 D C E 将线路切换到发送方式
5 允许发送 C T S D T E ? D C E D C E 告诉 D T E 线路已接通可以发送数据
6 数据设备准备好 D S R D T E ? D C E D C E 准备好
7 信号地 GND 信号公共地
8 载波检测 D C D D T E ? D C E 表示 D C E 接收到远程载波
2 0 数据终端准备好 D T R D T E ? D C E D T E 准备好
2 2 振铃指示 R I D T E ? D C E 表示 D C E 与线路接通 ,出现振铃
接口的电气特性 在 RS-232-C中任何一条信号线的电压均为负逻辑关
“系。即:逻辑 1”为 -5~ -15V; “逻辑 0” 为 +5 ~+15V 。
噪声容限为 2V。即要求接收器能识别低至 +3V 的信号作为
“逻辑 0”,高到 -3V “的信号作为逻辑 1” 。
接口适配器 常 PC 机均配有两个串行接口,分别为 COM1和 COM2 ,通过一
个 25芯和一个 9 芯的 D 型连接器连接(也有些微机采用两个 9芯 D 型连
接器)。 9芯 D 型连接器外型结构示意图及其信号定义如图所示。
D C D
R XD
TXD
D TR
G N D
D SR
RTS
C TS
R I
1
2
3
4
5
6
7
8
9
引脚序号
1
2
3
4
5
6
7
8
9
信号名称
载波检测
接收数据
发送数据
数据终端准备好
信号地
数据设备准备好
请求发送
允许发送
振铃指示
符号
DCD
RXT
TXD
DTR
GND
DSR
RTS
CTS
RI
本实验平台配备了一个 5 芯连接器(另一头为 9芯 D 型,可与PC 机
连接),连接图如下图所示。
实验
板RS232插座
微机RS232插座
R XD
TXD
D SR
D TR
G N D
R XD
TXD
D SR
D TR
G N D
主
RS-232 电平转换接口芯片的应用 RS- 232 接口采用的是负逻辑,其逻辑电平与 TTL 的电平不同,因此,必须进行电平转换。常用的 MAX232 即为单电源工作(内含电源变换)的双通道 RS- 232C 驱动 / 接收器。
8250 的引脚 M RD 0D 1D 2D 3D 4D 5D 6D 7
AD SD ISTR
D ISTRD O STR
D O STR
D D ISA0A1A2C S0C S1C S2
17169
1534312430
1011333238373639
XTAL2XTAL1R C LK
BAU D O U TO U T1O U T2
C SO U TIN TR PT
SINSO U T
D TRRTS
R LSDD SRC TS
R I
实验电路
MRD0D 1
D7DI STRDOSTRA0A1A2CS0CS1CS2
XTAL1
OUT1
OUT2I NTRPT
RTSCTS
SOUT
DTR
SI N
DSR
T1i n
T2i N
R1out
R2out
T1out
T2out
R1i n
R2i n
TC232TXT
DTR
RXD
DSR
VCC
I NT
nRESETDB0DB1
DB7RDWRA0A1A2
VCC
A8250
8250
1. 8432MHz晶振
实验主板上 8250的各寄存器地址如下:E0H : 8250 的片选端 选通地址E3H :线路控制寄存器地址E5H :线路状态寄存器地址E0H : DLAB=0; 接受发送缓冲寄存器地址E1H : DLAB=0; 中断允许寄存器地址E2H :中断识别寄存器地址E4H :调制解调器控制寄存器地址E6H :调制解调器状态寄存器地址E0H : DLAB=1;除数寄存器低字节地址E1H : DLAB=1;除数寄存器高字节地3f8H:PC机上 COM1的地址
编程与调试 (一)实验板上自发自收串口通讯1 .程序说明 实验前将串口实验板子上的 RXD和 TXD 直接相连。
程序中从键盘输入一个数字,经过实验板上的 8250自发自收,在 PC 机的 CRT 上又将这个数字显示出来
2 .编程思路
读线路状态寄存器
EPP接口、 8250初始化
Y
N
发送数据
置 DTR= 1
开始
发送保持器空?
读线路状态寄存器
读线路状态寄存器
接收数据就绪?N
读取数据并显示
结束
Y
读MSR,检测DSR=1?N
Y
3 .编程步骤 ① 调用自定义头文件。② 初始化 EPP 端口。③ 8250 初始化epp_write_data(LCR,0x80); /*允许访问除数寄存器 */epp_write_data(DLL,0x0c); /* 向除数寄存器的低字节写 0x0c*/epp_write_data(DLH,0x00); /* 向除数寄存器的高字节写 0x00*/epp_write_data(LCR,0x0f); /* 设定串行通讯的数据格式 */epp_write_data(IER,0x00); /*屏蔽多有中断 */
④ 发送数据 do{ epp_resd_data(MSR,&msr); /*判断数据中断是否准备就绪 */ msr=msr&0x20;}while(msr==0);do{ delay(20000); /* 为了保证字符被接受,加适当的延时 */ epp_resd_data(LSR,lsr);/* 读通信线状态寄存器的值 */ lsr=lsr&0x20; }while(lsr==0); epp_resd_data(TBR,n); /*检测若发送寄存器空,则发送 */
⑤ 接受数据 /* 设置调制解调控制寄存器,令 DTR=1,表示准备好接收数据 */epp_write_data(MCR,0x03); Do{ epp_resd_data(LSR,&lsr); /* 读通信线状态寄存器的值 */ lsr=lsr&0x01;}while(lsr==0);epp_resd_data(RBR,&re_chr); /* 读接收缓冲器的值 */⑥ 将读取值显示在 PC 机 的 CRT 上printf("%5d",re_chr);
4. 源程序清单参考程序详见实验指导书附录 I-16 。
(二) PC 机串口通讯 1 .程序说明 用实验箱自带的串口通讯线将实验板与另外 PC 机的串口( COM1 )相连接,实现 PC 机间的通讯。实验前选择发
送或者接收数据。选择发送数据,就在本 PC 机上输入数据,在另外的 PC 机上显示已经所发送的数据;选择接收数据,则在本机接收对方发送过来的数据,并将其显示在本 PC 机的 CRT 上。 在两台不通的 PC机之间通讯时,要将传送方和接受方的数据格式设为相同。
2 .编程思路 EPP接口、 8250初始化
置 DTR= 1
开始
读线路状态寄存器
接收数据就绪?N
读取数据并显示
结束
Y
选择接受或发送
读线路状态寄存器
Y
N
发送数据
发送保持器空?
读线路状态寄存器
读MSR,检测DSR=1?N
Y
发送 接受
结束
3 .编程步骤 ① 头文件的调用, EPP 端口的初始化都同上(自发自收串口通讯实验)。② 8250 的初始化。 初始化的理论同上,所不同的是,因是在不同 PC 机之间通过串口( COM1)
和实验板的通讯,其端口地址都应在原来的地址基础上加上 PC 机的串口 COM1的地址 base(0x3f8)。epp_write_data(base+LCR,0x80); /*允许访问除数寄存器 */epp_write_data(base+DLL,0x0c); /* 向除数寄存器的低字节写 0x0c*/epp_write_data(base+DLH,0x00); /* 向除数寄存器的高字节写入 0x00*/epp_write_data(base+LCR,0x0f); /* 设定串行通讯的数据格式 */epp_write_data(base+IER,0x00); /*屏蔽多有中断 */③ 选择发送还是接受。printf(\nPlease enter s or r to choose send or receive!);select=getch();④ 择 s 执行发送函数,选择 r 执行接收函数。
4 .源程序清单 参考程序详见实验指导书附录 I-17 。
思考题 1 .在 8250 的收发数实验中,如果不设置调制解调器寄存器,会出现 什么现象?为什么?2 .在 8250 的收发数实验中,当发生接收数据错误时,应如何处理? 试编写一段数据出错处理子程序。3. 要采用中断方式应怎样编程?4. 为了保证 PC 机发送到实验板上的数据完整的被接收,应怎样操作?5 .考虑在实验板内或 PC 机间如何发送多个数据或者连续的数据,程序 应该怎么写?
实验十二 电子称重实验 实验目的 1 .了解传感器的原理。2 .熟悉利用实验主板的做实验。3.进一步理解 A/D7109的工作原理。 实验任务1 .根据传感器的原理,分析如何由测得电压计算砝码 重量。2 .利用实验主板上的 A/D 转换器 7109 ,编写出测量砝
码 重量的实验程序。
实验原理 金属的电阻应变效应 当金属丝在外力作用下发生机械变形时,其电阻值将发生变化,这种现象称为金属的电阻应变效应设有一根长度为 l 、截面积为
S、
电阻率为 ρ的金属丝,在未受力时,原始电阻为:
当金属电阻丝受到轴向拉力 F作用时,其长度 L伸长,横截面积 S相应减小,电阻率因晶格变化等因素的影响也要改变,故引起电阻值R的变化。
应变片测量原理 各种电阻应变片的结构大体相同,用应变片测量受力应变时,将应变片粘贴于被测对象表面上。在外力作用下,被测对象表面产生微小机械变形时,应变片敏感栅也随同变形,其电阻值发生相应变化。 应变片应用很广泛,是由于有如下优点: ① 测量应变的灵敏度和精确度高,性能稳定、可靠,可测 1~ 2με,误差小于 1%。 ② 应变片尺寸小、重量轻、结构简单、使用方便、响应速度快。测量时对被测件的工作状态和应力分布影响较小。既可用于静态测量,又可用于动态测量。 ③ 测量范围大。既可测量弹性变形,也可测量塑性变形。变形范围可从 1%~ 2%至 20%。 ④ 适应性强。可在高温、超低温、高压、水下、强磁场以及核辐射等恶劣环境下使用。⑤ 便于多点测量、远距离测量和遥测。
测量电路原理
REF
I NH
I NL
MODE
STATUS
CE/ LOAD
ORPOL
B9
B12
B1
B8D0
D7
1Y1( PC2)
1Y1( PC4)
RD
1Y4
1Y3
I CL 7109
.
.
.
.
.
.
.
.
...
测量放大电路
V+
V-
OI
OO
+5V
- 5V
2.048V基准电压
0~ 4. 096V
× 2 运放
26
2
20
18
19
40
28
35
34
21
22
23
36
3. 579MHz
RUN/ HOLD
LBEN
HBEN
跳线选择被测电压
AI N+
D0. . . . D7
D0. . . . D5
电压与力的关系 本实验所用的压力传感器,加在它上的砝码质量和输出电压成正比例线性关系。在传感器两端加 +12V 电压,加入砝码质量M为 5千克时,其输出电压 V0值为
12mv。其比例系数 k 为:
根据此比例系数,在传感器上加上不同质量M的砝码,就有不同的电压输出 V :
编程与调试 1.程序说明 实验前将电子秤的红色端接到电源正极(+ 12V)、黑色端接到电源负极( AGND)、蓝色端接到输出正端(实验主板上的 AIN+
端)、白色接到输出负端(实验主板上的 AGND)。选择增益倍数为×30
0(根据需要可两外选择)。向传感器上加砝码,程序运行后在 PC 机的 CRT 和实验主板的 LED 上将砝码的质量显示出来。
2.编程思路 开始
结束
N
初始化 EPP接口
启动A/ D转换
转换结束 ?
Y
停止 A/ D转换
读取高位字节并暂存
读取低位字节并暂存
提取高位字节的OR, POL
溢出否 ?
N
Y
输入为负 ?
N
Y
屏蔽高四位
送显示器和 LED
置溢出标志
屏蔽高四位
置负数符号
硬件选择增益和输入端
初始化 8255
3 .编程步骤 1 .调用自定义头文件(同上实验一)。2. EPP 接口初始化(同上实验一)。3 .初始化 8255 (同上实验二)。epp_write_data(CW_8255, 0x8a); /* 初始化 8255*/4. PC2 置“ 1”。8255 的端口 PC2 与芯片 7109 的启动端口 ()直接相连,将 PC2 置“ 1”,则启动芯片 7109让它开始工作。
epp_write_data(CW_8255,0x05);/*PC2 置 1 ,启动芯片 7109 的转换 */ 5 .读 PC4 的状态。 do{ epp_read_data(PC_8255,&state);/* 读取转化状态量,端口 PC4 口 */ state=state&0x10; }while(state==1 ); /*判断 status值:为 1正在转换;为 0转换完 */
6. PC2 置“ 0”。 epp_write_data(CW_8255,0x04); /*PC2 置 0, R/=停止转
换 */ 7 .读取 7109 转换完毕的数字量,并将其转化成电压值。 epp_read_data(H_7109,&high); /* 读出高位字节 */ epp_read_data(L_7109,&low); /* 读出低位字节 */ v=(high&0x0f)*256+low; 8 .判断极性和溢出 if(high&0x10) /*判断溢出位,若溢出则发出警告提示 */ printf("WARNING:the input volt is over!\n"); if(!(high&0x20)) /*判断符号位 , 显示屏输出 */
printf("- %.3f\n",v);9 .砝码质量的计算和显示。 M=2.4*1000*v; /* 由电压得到砝码质量 */ printf(“%.1f”,M); /*在 CRT 上显示砝码质量 */ d=(int)M; displed(d,0); /*在实验主板的 LED上显示砝码质量 */
思考和练习题 1.向传感器上加砝码的时候,为什么要轻拿轻放?2.测量传感器在没有添加砝码时,电压值是否为 0?如不是,请思考 为什么?3. 当传感器的初始电压不为 0V 时,在程序中要怎么设计消除这种误差?4. 加入传感器两端的电压不是 +12V, 是 +5V 时,对输出电压有没有影响? 思考加 +5V 时输出电压值和砝码质量怎么换算?
4. 源程序清单 参考程序见实验指导书附录 I-18。