微型计算机技术 教 学 指 导(七) 太原广播电视大学 郭建勇
第7章 微机的基本接口技术 重点内容:微机的基本接口技术:行列式的小键盘和LED数据显示器与微机的接口方式。 D/A、A/D芯片的基本工作原理和简单运用。 要求掌握芯片的基本结构特征,掌握它们在不同应用场合的使用方法,以及软件编程时的基本步骤。从而进一步了解微机与外设的基本接口方法,以便构成用户自行设计的系统。 7.1 小型键盘的接口技术与识别按键的软件方法 键盘有两种类型:非编码式键盘和编码式键盘。 非编码式键盘用软件来识别并产生代码。 编码键盘是用硬件来识别,检测按键,并产生相应的代码。
7.7.1 键盘矩阵及接口电路 1.采用行扫描法实现的键盘接口电路 4×4键盘矩阵的基本结构,矩阵中有4行4列,共16个键。 每个键所对应的行与列的交叉点是唯一的。如果某键被按下,该键所对应的行线接为低电平,所对应的列线也接为低电平。
2.采用反转法实现的键盘接口电路 并行口8255A实现的键盘接口电路,图中A端口地址接在行线上,B端口地址接在列线上,由于8255A是可编程的并行口,两个端口A和B, 可通过软件设置为A口为 输出,B口为输入,也可 设置为B口为输入, A口为输出。 输出、输入互相交换时 显得是十分方便,这样 可用反转法的软件来实 现键闭合时的快速识别。
软件实现,用延时程序消除抖动:先延时20ms避开键发生的抖动。 7.1.2 扫描方式及程序实现 在扫描键盘过程中,应注意如下两个问题: (1)消抖动: 硬件实现,复杂麻烦。 软件实现,用延时程序消除抖动:先延时20ms避开键发生的抖动。 (2)防止按一次键而有多个对应键值输入的情况:按一次键,只做一次键处理,消除了一次按键有多次键值输入的错误情况。 1.行扫描法及程序实现 方法是:初始状态时所有的行线和列线都为高电平; 然后逐行输出低电平;再读列线,看那列输出为0,行列交叉点即为按下的按键。
实际应用中: 第一步是先检查出是否有键按下。 第二步是要确定按下的是哪个键。 用软件实现的步骤是: ① 确定是否有键按下。 ② 去抖动。 ③ 对被按下的键进行译码。 ④对任何一个键均作一次处理。 所有行线L都送0 读列线R值 有键按下? 设置行扫描初值 行扫描初值送BL 输出行扫描初值 有键按下? 取行扫描值 组合键的扫描码 BL=行扫描码+列扫描码 BL左移一位 为扫描下一行作准备 所有行扫完? 转作其他
MOV AL,00 MOV DX,Portl OUT DX,AL MOV DX,PORTR IN AL,DX CMP AL,FFH JZ DISP CALL Delay MOV CL, FEH MOV DX, Portl A1: MOV AL, CL MOV BL, CL OUT DX, AL ROL CL, 1 所有的行线都输出低电平 读取列值 是否有为零的列线 没有键按下,转显示程序 有键按下,调延时程序,消除抖动 第0行的扫描值11111110B送CL 输出当前的扫描值, 令当前的扫描行为0。 循环移位,指向下一行
IN AL,DX CMP AL,FFH JZ A1 MOV CL,4 SHL BL,CL OR BL,AL DISP: 读列值 判断那列键按下 有,在BL中组合扫描码
2.行反转法及程序实现 反转法识别:行线和列线分别接在PA和PB 2个并行口上,首先让行线上的PA口工作在输出方式,列线上的PB口工作在输入方式,通过编程使PA口输出低电平,然后读取PB口的列线值,如果某一列线上的值为0,则判定改列有某一键按下。为了确定是哪一行要对PA和PB进行反转,即对PA口重新进行初始化工作在输入方式,列线上的PB口工作在输出方式,并将刚读取的列线值从列线所接的PB口输出,再读取行线所接的PA口,取得行线上的输入值,在闭合键所在的行线上的值必定为0。这样,当一个键被按下时,必定可读得一对唯一的行值和列值。根据这一对行值和列值就可判断是哪一行哪一列的键被按下。
7.2 多位七段LED数据显示器的电路结构及接口技术 7.2.1 七段LED数码显示器的结构 +5vcom A B C D E F G dp A B C D E F G dp a f b g c e d dp Com 地 a 管脚图 b 共阴极 c 共阳极
1.在共阴极接法中,点亮字段应接高电平,为1;例如:显示2应点亮 译码原理:将二进制代码转换成段选择码 1.在共阴极接法中,点亮字段应接高电平,为1;例如:显示2应点亮 a,b,d,e,g段,则其段选择码为01011011(顺序为dp,gfedcba)5BH. 2.在共阳极接法中,点亮字段应接低电平,为0:例如:显示2应点亮 a,b,d,e,g段,则其段选择码为10100100(顺序为dp,gfedcba)A4H. D0 74L 374 D1 abcd MC 14495 D2 D3 D4 D5 D6 LE D7 LE com 软件译码法 BCD 七段译码
7.2.2 LED显示器的静态显示接口 用一个8D驱动器,驱动一个LED显示器,每次送入显示的状态码,并且一直保持到下一次送入新的显示码为止,称为LED静态显示的接口电路。 如果要构成多位LED显示器,则要多个8D驱动器,造成硬件的浪费。 7.2.3 LED显示器的多位动态显示接口 动态驱动显示接口的硬件特点:将多位LED的段选择线并联接在一起,即8位中的所有同名段a接在一起,所有h段接在一起……,只用一个8位的锁存器控制段码a,b,c,d,e,f,g就够了。另外用一个锁存器来控制位选择码。这样只需要2个8位的I/O端口。 扫描的显示方式:即在每一瞬间只能使某一位显示相应的字符,保持延时一段时间,然后再选中下一位,利用发光显示器的余辉及人眼的视觉暂留特点,给人一种显示器同时被点燃的效果。
七段共阴极LED显示器的多位动态显示接口
LED动态显示程序 行地址口:PORTL ,列地址口:PORTR BUFFERDATA: DB 8 DUP(?) TABLE :3FH,06H 79H,71H LED :MOV DI ,OFFSET BUFFERDATA MOV CL ,011111111B DISP :MOV BL ,[DI+0] PUSH BL POP AX MOV BX ,OFFSET TABLE XLAT MOV DX ,PORTL OUT DX ,AL MOV AL ,CL
MOV DX ,PORTR OUT DX ,AL PUSH CX MOV CX ,30H DELAY:LOOP DELAY POP CX CMP CL ,111111110B JZ EXIT INC DI SHR CL ,1 JMP DISP EXIT :RET 延迟程序,循环次数30 显示扫描到最右边的 第8位吗?到了转结束 不到,位移码 加1循环
7.3 D/A转换的工作原理 D/A转换器的基本功能,是将数字量转换成对应的模拟量输出。 7.3.1 D/A转换器的工作原理 为了将数字量转换为模拟量,需要将每位代码按照其“权”值转换为相应的模拟量(仅指模拟电压),然后再把对应于各位代码的模拟量加起来,所得模拟量的总和,就是与被转换数字量相对应的模拟量。 D/A转换器的具体电路有多种形式,其中解码网络是普通采用的形式,解码网络的主要形式有2种,二进制权电阻网络和T型电阻网络。
) ( ) 1.二进制权电阻网络 图中:VOUT=-(I0D0+I1D1+I2D2)R1 D0VREL D1VREL D2VREL 22R 21R 20R D0 D1 D2 4 2 1 ) =– ( + + ( =– ) + +
2.T型电阻网络 VREFRFB I 2R 2j ∑ VOUT=-IRFB =- Dj
3.D/A转换器的主要技术参数 (1)分辨率:DAC所能分辨的最小输出电压与最大输出电压的比值称为分辨率。 VLSB 1 VOM 2N – 1 例如:8位DAC的分辨率为l/(28-1)=1/255=0.392%, 12位的D/A的分辨率是1/(212-1)=l/4095=0.0244%。 (2)转换误差。DAC的转换误差可分为静态误差和动态误差。 静态误差: ①失调误差(零点误差)。 ②增益误差(满值误差)。 ③线性误差。DAC的线性误差分为积分线性误差和微分线性误差。 ④温度系数误差。 ⑤电源波动误差。 (3)建立时间。 分辨率 = =
4.D/A转换器的典型输出连接方式 (1)电流输出电路
单极性的电压输出适用于对控制量的输出要求是单方向的场合,在整个控制过程中,不要求改变控制量的极性。 (2)电压输出电路。 ①单极性电压输出电路。 单极性的电压输出适用于对控制量的输出要求是单方向的场合,在整个控制过程中,不要求改变控制量的极性。 单极性电压输出的连接又分为同相输出和反相输出2种。 D/A 同相输出 D/A 反相输出
在某些微机应用场合,需要双极性的电压输出。例如,希望输出电压的范围在-5~+5V或-12~ +12V。 ②双极性电压输出电路。 在某些微机应用场合,需要双极性的电压输出。例如,希望输出电压的范围在-5~+5V或-12~ +12V。 VOUT
7.3.2 D/A转换器的芯片结构与接口方式 1.8位D/A转换器芯片DAC0832 DAC0832内采用一个T型电阻网络,用来实现D/A转换,属于电流型芯片,需外接运算放大器才能得到模拟电压的输出。 (1)芯片的技术特性。DAC0832采用双列直插式20条引脚的封装,主要特性如下: ①单一的电源电压(十5V),功耗20mW。 ②输入/输出电平与TTL兼容。 ③分辨率8位。 ④电流稳定时间l㎲。 ⑤可采用双缓冲、单缓冲或直通输入方式。 ⑥可直接与一般通用的微处理机相连。 ⑦只需在满量程下调整其线性度。
(2)芯片结构及引脚功能 DAC0832的内部功能框图
主要由三部分组成: 一部分是信号控制逻辑;另一部分是D/A转换器,输出的方式为电流输出形式;第三部分是由两个8位的数据锁存器构成双缓冲形式,第一级锁存器称为输入寄存器,它的锁存信号是ILE,第二级锁存器也称为DAC寄存器。它的锁存信号XFER。有了两级锁存器,芯片可工作在双锁存器的工作方式,即在输出模拟信号的同时,送入下一个数据,这样可有效地提高转换速度。 另外,有了两级锁存器以后,可以在多个DAC同时工作时,利用第二级锁存信号来实现多个DAC的同时输出。
2.D/A转换器的接口方式 对于芯片内部有输入寄存器的D/A芯片,在CPU与D/A芯片之间可以不加锁存器,直接和CPU的数据总线连接。如 DAC0832,AD574等,对于D/A芯片内不带锁存器的芯片,在CPU和D/A芯片之间需要加锁存器。 (1)不带数据输入寄存器的DAC与CPU的接口。
在许多应用场合,还要求DAC具有更高的精度和灵敏度。就需要8位以上的DAC。 稳定时间:执行二次输出指令,才能得到真正所需要的模拟量。 “毛刺”的现象:由于CPU分2次执行输出指令,会带来模拟电压出现“毛刺”的现象。 为了解决这种问题,通常采用2级的数据缓冲结构和CPU总线相连。 译码器产生3个时钟,其中CKH和CKL分别作为第一级锁存器高8位和低8位的打入时钟;CK作为第二级锁存器的打人时钟,高8位和低8位数据一块打人到锁存器中。有了这种电路,CPU先执行2条输出指令,把(8十n)位的数据送到第一级数据锁存器中,然后通过第三条输出指令同时选中两片74LS273,实现一次把(8十n)位的数据从第一级锁存器送到第二级数据锁存器中,从而使D/A转换器得到一个完整的转换数据。
D/A通过两级数据缓冲与微机连接
低8位的数据送入 第一级数据锁存器 高8位数据送人 第一级数据锁存器 实现的程序段如下: MOV AL ,DATAL MOV DX ,PORTL OUT PORTL,AL MOV AL ,DATAH MOV DX ,PORTH; OUT PORTH,AL OUT PORT ,AL 低8位的数据送入 第一级数据锁存器 高8位数据送人 第一级数据锁存器 全部送人第二级数据锁存器
(2)带有数据锁存器的DAC与CPU的接口
转换数据输出程序 MOV AI ,NUM ;被转换的数据送AL MOV DX ,PORTO ;输入寄存器偶地址送DX OUT DX ,AL ;第一次被转换的数据送到输入寄存器 INC DX OUT DX,AI, ;第二次被转换的数据送到DAC寄存器
输出三角波的程序段如下: MOV DX,PortDAC S0:MOV CX,0FFH MOV AL,0 S1:OUT DX,AL INC AL LOOP S1 MOV CX,0FFH S2:DEC Al OUT DX,AL LOOP S2 JMP S0 255 255 0 0 0 AL初始值为0,不断循环加1 DAC0832输出三角波的上升 沿。 AL初始值为0FF,不断循环 减1,DAC0832输出三角波的 下降沿。
输出锯齿波的程序段如下: MOV DX,PortDAC J0:MOV CX,0FFH MOV AL,0 J1:OUT DX,AL INC AL LOOP J1 JMP J0 AL初始值为0 不断加1,加到 255后,再输出 0,循环产生锯 齿波。 255 255 255
7.4 A/D转换的工作原理 A/D转换器是把模拟量转换成数字量,(ADC)输出的器件。 (1)采样:对连续变化的模拟量要按一定的规律和周期取出其中的某一瞬时值,就是采样,也称为取样或抽样。 为了使输出信号能更好地反映输入信号的变化,采样频率一般要高于或至少等于输入信号最高频率的2倍。 (2)量化与编码:量化的过程是把在时间上连续变化的模拟量通过量化装置转变为数值上离散的阶跃量的过程。 7.4.1A/D转换器的基本方法和原理 实现A/D转换的方法很多,这里介绍三种:计数法、双积分法和逐次逼近法。
1.计数式A/D转换法 工作原理:Vin端接转换的模拟输入电压,当Vin>Vout,比较器输出高电平,计数器由0开始计数,使输出电压Vout不断上升,当VOUT ≥VIN,停止计数,此时的数字输出量D7~D0就是与模拟电压等效的数字量。 计数式A/D转换的特点是简单、速度比较慢。
2.双积分式A/D转换法 双积分式A/D转换 器属于间接电压/数字 转换器,它把输入电压 转换为与其平均值成正 比的时间间隔,同时把 这个时间间隔再转变为 数字,是一种间接的 A/D转换技术。 双积分式A/D转换器的特点是,转换精度高,抗干扰能力强。但转换速度较慢,通常每秒钟的转换频率小于10Hz。这种方式主要用于数字式测试仪表,温度测量等方面。
3.逐次逼近式A/D转换法 逐次逼近式A/D转换时,也用D/A转换器的输出电压Vout和输入电压Vin通过比较器进行比较。不同之处是用一个逐次逼近寄存器来存放转换过来的数字量。
工作原理: (1)在第一个时钟脉冲时,使逐次逼近寄存器的最高位D7为1,即10000000B,经D/A转换VOUT为满量程电压的一半。 当VOUT≤VIN,保留D7的1;若VOUT>VIN,复位,D7为0; (2)第二个时钟脉冲,令D6为1,此时为11000000B或为 01000000B,当VOUT≤VIN,保留D6的1;若VOUT>VIN,复位,D6为0; ………… 重复上述过程,直到最低位D0比较完为止。经过n次比较后,逐次逼近寄存器的数据经过A/D转换后,变成与输入模拟量相对应的数字量。 逐次逼近A/D转换是把输入的模拟电压Vin作为一个关键字,用对分搜索的办法来逼近它。搜索一次比前一次区间缩小1/2,对于8位A/D转换,只要搜索8次就可以找到逼近的Vin。因此,这种A/D转换的速度是很快的。
实现上述转换的程序段如下: Start: XOR AX ,AX ;累加器清0 MOV BL ,80H ;置初值 MOV CX ,08H ;置循环次数 AIN: ADD AL ,BL ;计算试探值 MOV BH ,AL ;保留试探值 OUT PortA,AL ;PortA是锁存器端口地址 IN AL,Ports ;Ports是输入端口的地址,读取状态值 AND AL,01 ;只取状态值,而对其它位屏蔽 JZ ENDl ;如D。为o,则说明试探值大小,因此保 ;留此位转ENDl。 MOV AL,BL NOT AL ;求反 AND AL ,BH ;使这次的试探位为0 ’ MOV BH ,AL ;保存试探值 ENDl: MOV DL ,1 ;右移,得到下一个试探值 · MOV AL ,BH LOOP AIN ;继续试探和测试
4.A/D转换器的主要技术参数 ①分辨率。ADC的分辨率通常以输出二进制或(十进制)数的位数表示,它说明ADC对输入信号的分辨能力。 量化误差:是指在ADC中由于整量化所产生的固有误差。量化误差在土1/2LSB之间。 ③转换时间和转换速率。转换时间是描述ADC转换速度的动态参数。是指完成一次A/D转换所需的时间,即由发出启动转换命令信号到转换结束信号开始有效的时间间隔。 转换时间的倒数称为转换速率。指的是A/D转换器的转换速度,用每秒多少次来表示。 ④漏码:模拟量输入连续增加(或减小)时,数字量输出不是连续增加(或减小),而是越过某一个数字,就是漏码。
7.4.2 A/D转换器的芯片结构与接口方式 1.8位A/D转换器芯片ADC0809
特点是:高阻抗斩波稳定比较器,带有树形模拟开关的256R电压分压器和一个逐次逼近寄存器,8个通道的多路开关可直接存取8个单端模拟信号中的一个。 ②逐次逼近寄存器SAR。 ③比较器:斩波稳定比较器的基本方法是把直流输入转变为交流输入信号,这个信号通过高增益交流放大器放大,然后再恢复直流电平。这种技术可以限制放大器元件的漂移 ④多路开关。芯片内有一个8通道的单端模拟信号多路开关,由地址译码可以选择一个特定的输入通道。
2. A/D转换器的接口方式 (1)应注意的问题 ①A/D转换器输出和CPU的接口方式。 对A/D转换器的数字输出应考虑的关键是:转换结果的输出应该具有三态驱动能力才能送到数据总线上。 ②A/D转换器的分辨率和微机数据总线的位数。 10位以上的A/D转换器和8位数据总线连接时,数据寄存器要增加读写控制逻辑。 ③A/D转换的时间和CPU的时间配合问题。 A/D转换的启动方式 转换后信号的处理:中断方式、查询方式、CPU等待方式、固定延迟程序方式。 ④A/D的控制和状态信号。 启动信号(Start);转换结束信号(EOC);输出允许信号(OE)。
⑤输入模拟电压的连接。A/D转换芯片的输入模拟电压往往即可以单端输入也可以差动输入。 ⑥接地问题。正确的连接应该是把数字地和模拟地分开来连接,将所有芯片的数字地连在一起,所有芯片的模拟地连在一起,然后将模拟地和数字地分别仅连接到一个接地点,再接到所对应的模拟电路的电源或数字电路的电源上。
(2) ADC0809与微机的接口方式
由于ADC0809芯片内不带时钟,因此它的时钟端CLK需要外接时钟信号,要求时钟频率的范围应在10—1280kHz。芯片带有输出三态锁存器,8位输出数据的引脚可直接与微机的系统总线相连,经转换后的8位数字量可直接送到微机中。芯片的通道选择地址ADDC,ADDB,ADDA分别与数据总线的D2、Dl、Do相连接,用软件来选择要转换的模拟量是8路中的哪一路。 如果不接中断,转换通道3的模拟量为数字量的程序段如下: MOV AL,03H ;送入通道3 MOV DX,PortADC OUT PortADC,AL ;发启动信号 CALL DELAY ;软件延时,等待转换结束 IN AL,PortADC ;一个数据转换结束,读人CPU中
如果转换结束信号xOC接中断信号,8路模拟量输入,对它们进行采样,采收100组数据,采集后的数据送人内存单元 BUFFER中,用中断方式实现的程序段如下: LEA DI,BUFFER MOV CX,64H IN0: PUSH CX MOV AL,0 ;转换从IN。开始,并启动 MOV CX,8 MOV DX,PortADC ;PortADC是ADC0809的端口地址 Input:STI ;开中断 OUT DX,AL ;送转换地址 INC AL HLT ;暂停,等中断 CTI ;关中断
LOOP Input ;中断返回,开始采集下一通道 POP CX LOOP IN0 中断服务子程序; PUSH AX IN AL,DX ;送输出允许并读取数据 STOSB POP AX IRET