660 likes | 915 Views
第 9 章 应用系统配置及接口技术. 教学目标. 掌握 A/D 转换器的工作方式 掌握单片机控制 A/D 转换器接口应用 掌握 D/A 转换器的工作方式 掌握单片机控制 D/A 转换器接口应用. 教学内容. 9.1 人机通道配置与接口技术 9.2 前向通道中的A/D转换器及接口技术 9.3 系统后向通道配置及接口技术 9.4 思考题与习题. 若输入是非电的模拟信号,还需要通过传感器转换成电信号并加以放大,把模拟量转换成数字量。该过程称为“量化”,也称为模/数转换。
E N D
教学目标 • 掌握A/D转换器的工作方式 • 掌握单片机控制A/D转换器接口应用 • 掌握D/A转换器的工作方式 • 掌握单片机控制D/A转换器接口应用
教学内容 • 9.1 人机通道配置与接口技术 • 9.2 前向通道中的A/D转换器及接口技术 • 9.3 系统后向通道配置及接口技术 • 9.4 思考题与习题
若输入是非电的模拟信号,还需要通过传感器转换成电信号并加以放大,把模拟量转换成数字量。该过程称为“量化”,也称为模/数转换。若输入是非电的模拟信号,还需要通过传感器转换成电信号并加以放大,把模拟量转换成数字量。该过程称为“量化”,也称为模/数转换。 • 实现模/数转换的设备称为模/数转换器(A/D),将数字量转换成模拟量的设备称为数/模转换器(D/A)。 • 图9-1所示为具有模拟量输入、模拟量输出以及键盘、显示器、打印机等配置的89C51应用系统框图。为节省I/O口线,89C51片外扩展应尽量采用串行外设接口芯片。
9.1 人机通道配置与接口技术 • 单片机应用系统通常都需要进行人机对话。这包括人对应用系统的状态干预与数据输入,还有应用系统向人显示运行状态与运行结果等。如键盘、 显示器就是用来完成人机对话活动的人机通道。
9.1.1 键盘接口及处理程序 • 键盘分编码键盘和非编码键盘。 • 键盘上闭合键的识别由专用的硬件译码器实现,并产生键编号或键值的称为编码键盘,如BCD码键盘、ASCII码键盘等;靠软件识别的称为非编码键盘。
键盘中每个按键都是一个常开开关电路,如图9-2所示。键盘中每个按键都是一个常开开关电路,如图9-2所示。 当按键K未被按下时,P1.0输入为高电平;当K闭合时,P1.0输入为低电平。 图9-2 按键电路
通常按键所用的开关为机械弹性开关,当机械触点断开、闭合时,电压信号波形如图9-3所示。通常按键所用的开关为机械弹性开关,当机械触点断开、闭合时,电压信号波形如图9-3所示。 由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。 因而在闭合及断开的瞬间均伴随有一连串的抖动,如图9-3所示。抖动时间的长短由按键的机械特性决定,一般为5~10 ms。这是一个很重要的时间参数,在很多场合都要用到。 图9-3 按键时的抖动
键抖动会引起一次按键被误读多次。为了确保CPU对键的一次闭合仅做一次处理,必须去除键抖动。在键闭合稳定时,读取键的状态,并且必须判别;在键释放稳定后,再作处理。按键的抖动,可用硬件或软件两种方法消除。键抖动会引起一次按键被误读多次。为了确保CPU对键的一次闭合仅做一次处理,必须去除键抖动。在键闭合稳定时,读取键的状态,并且必须判别;在键释放稳定后,再作处理。按键的抖动,可用硬件或软件两种方法消除。 如果按键较多,常用软件方法去抖动,即检测出键闭合后执行一个延时程序,产生5~10 ms的延时;让前沿抖动消失后,再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给5~10 ms的延时,待后沿抖动消失后,才能转入该键的处理程序。
1. 键盘结构 • 键盘可以分为独立连接式和行列式(矩阵式)两类,每一类按其译码方法又都可分为编码及非编码两种类型。这里只介绍非编码键盘。
1) 独立式非编码键盘接口及处理程序 • 独立式按键是指各按键相互独立地接通一条输入数据线,如图9-4所示。这是最简单的键盘结构,该电路为查询方式电路。 • 当任何一个键按下时,与之相连的输入数据线即被清0(低电平),而平时该线为1(高电平)。要判别是否有键按下,用单片机的位处理指令十分方便。 • 这种键盘结构的优点是电路简单;缺点是当键数较多时,要占用较多的I/O线。 图9-4 独立连接式非编码键盘
图9-4所示查询方式键盘的处理程序比较简单。程序中没有使用散转指令,并且省略了软件去抖动措施,只包括键查询、键功能程序转移。P0F~P7F为功能程序入口地址标号,其地址间隔应能容纳JMP指令字节;PROM0~PROM7分别为每个按键的功能程序。图9-4所示查询方式键盘的处理程序比较简单。程序中没有使用散转指令,并且省略了软件去抖动措施,只包括键查询、键功能程序转移。P0F~P7F为功能程序入口地址标号,其地址间隔应能容纳JMP指令字节;PROM0~PROM7分别为每个按键的功能程序。
程序清单(设I/O为P1口): START: MOV A,#0FFH;输入时先置P1口为全1 MOV P1,A MOV A,P1;键状态输入 PL1: JNB ACC.0,P0F;0号键按下转P0F标号地址 JNB ACC.1,P1F;1号键按下转P1F标号地址 JNB ACC.2,P2F;2号键按下转P2F标号地址 JNB ACC.3,P3F;3号键按下转P3F标号地址 JNB ACC.4,P4F;4号键按下转P4F标号地址 JNB ACC.5,P5F;5号键按下转P5F标号地址 JNB ACC.6,P6F;6号键按下转P6F标号地址 JNBA CC.7,P7F;7号键按下转P7F标号地址 LJMP START;无键按下返回
P0F: LJMP PROM0 ┊ ┊ P1F: LJMP PROM1 ;入口地址表 P7F: LJMP PROM7 PROM0:… ;0号键功能程序 LJMP START ;0号键执行完返回 PROM1:… LJMP START ┊ PROM7:… LJMP START 由程序可以看出,各按键由软件设置了优先级,优先级顺序依次为0~7。
2) 行列式键盘接口及工作原理 • 为了减少键盘与单片机接口时所占用I/O线的数目,在键数较多时,通常都将键盘排列成行列矩阵形式,如图9-6所示。 • 以图9-6所示的4×4键盘为例,说明行扫描法识别哪一个按键被按下的工作原理。
首先判别键盘中有无键按下,由单片机I/O口向键盘送(输出)全扫描字,然后读入(输入)列线状态来判断。方法是: 向行线(图中水平线)输出全扫描字00H,把全部行线置为低电平,然后将列线的电平状态读入累加器A中。如果有按键按下,总会有一根列线电平被拉至低电平,从而使列输入不全为1。 • 判断键盘中哪一个键被按下是通过将行线逐行置低电平后,检查列输入状态实现的。方法是: 依次给行线送低电平,然后查所有列线状态,称行扫描。如果全为1,则所按下的键不在此行;如果不全为1,则所按下的键必在此行,而且是在与零电平列线相交的交点上的那个键。
线反转法示例程序 : SMKEY:MOV P1,#0FH ;置P1口高4位为“0”、低4位为输入状态 MOV A,P1 ;读P1口 ANL A,#0FH ;屏蔽高4位 CJNE A,#0FH,HKEY ;有键按下,转HKEY SJMP SMKEY ;无键按下转回 HKEY: LCALL DELAY10 ;延时10ms,去抖 MOV A,P1 ANL A,#0FH ; MOV B,A ;行线状态在B的低4位 CJNE A,#0FH,WKEY ;确认有键按下,转判哪一键按下 SJMP SMKEY ; 是抖动转回 WKEY:MOV P1,#0F0H ;置P1口高4位为输入、低4位为“0” MOV A,P1 ; ANL A,#0F0H ;屏蔽低4位 ORL A,B ;列线状态在高4位,与行线状态合成于B中 … … ;键处理
2. 中断扫描方式 • 为了提高CPU的效率,可以采用中断扫描工作方式,即只有在键盘有键按下时才产生中断申请;CPU响应中断,进入中断服务程序进行键盘扫描,并做相应处理。中断扫描工作方式的键盘接口如图所示。
程序如下: ORG 0000H LJMP BEGIM ;转主程序 ORG 0003H LJMP WZD0 ;转外中断0程序 ORG 0013H LJMP WZD1 ;转外中断1程序 BEGIM: ORG 0100H MOV SP,60H ;设置堆栈 MOV R1,#00H ;R1存放键值 SETB IT1 ;设INT0、INT1为边沿触发 SETB IT0 SETB EA ;开中断 SETB EX0 SETB EX1 ┇ 键值处理程序(略) 其它主程序(略
WZD0: PUSH PSW ;保护现场 PUSH A CLR EX0 ;关中断INT0 JNB P3.2,WZD01 ;再次确认是INT0中断吗 SETB EX0 ;不是,则恢复现场退出中断 POP A POP PSW RETI WZD01: MOV A,#01H ;置S1键的键值为1 MOV P1,#0FEH ;扫描P1.0 CALL QDDYS1 ;去抖动 JNB P3.2,KEYR1 ;是S1键则转移 INC A ;不是S1键,键值加1 MOV P1,#0FDH ;扫描P1.1,以下同P1.0类似 CALL ODDYS1 ;以下同P1.0类似(略) JNB P3.2,KEYR1 INC A MOV P1,#0FBH CALL QDDYS1 JNB P3.2,KEYR1 INC A MOV P1,#0F7H
CALL QDDYS1 JNB P3.2,KEYR1 INC A MOV P1,#0EFH CALL QDDYS1 JNB P3.2,KEYR1 INC A MOV P1,#0DFH CALL QDDYS1 JNB P3.2,KEYR1 INC A MOV P1,#0BFH CALL QDDYS1 JNB P3.2,KEYR1 INC A MOV P1,#7FH CALL QDDYS1 JNB P3.2,KEYR1 LJMP KEYR2 ODDYS1:RET KEYR1: MOV R1,A ;将键值存入R1中 KEYR2: CLR IE0 ;清中断标志(因扫描中可能使IE0置位) SETB EX0 ;开中断INT0 POP A ;恢复现场 POP PSW RETI ;中断返回 WZD1: 外中断1程序与中断0相似(略)
9.1.2 LED显示器接口及显示程序 单片机应用系统中使用的显示器主要有: • 发光二极管显示器,简称LED(Light Emitting Diode); • 液晶显示器,简称LCD(Liquid Crystal Display); • CRT显示器
1. LED显示器结构原理 • 单片机中通常使用7段LED有共阴极和共阳极两种,如图9-11所示。 • 发光二极管的阳极连在一起的(公共端K0)称为共阳极显示器 • 阴极连在一起的(公共端K0)称为共阴极显示器。 • 一位显示器由8个发光二极管组成,其中,7个发光二极管构成字型“8”的各个笔划(段)a~g,另一个小数点为dp发光二极管。 • 当在某段发光二极管上施加一定的正向电压时,该段笔划即亮;不加电压则暗。为了保护各段LED不被损坏,须外加限流电阻。
以共阴极LED为例,如图9-11(a)所示,各LED公共阴极K0接地。若向各控制端a、b、…、g、dp顺次送入11100001信号,则该显示器显示“7.”字型。以共阴极LED为例,如图9-11(a)所示,各LED公共阴极K0接地。若向各控制端a、b、…、g、dp顺次送入11100001信号,则该显示器显示“7.”字型。 • 共阴极与共阳极7段LED显示数字0~F、“-”符号及“灭”的编码(a段为最低位,dp点为最高位)如表9-1所列。 图9-11 LED 7段显示器
2. LED显示器接口及显示方式 • LED显示器有静态显示和动态显示两种方式。
1) LED静态显示方式 • 静态显示就是当显示器显示某个字符时,相应的段(发光二极管)恒定地导通或截止,直到显示另一个字符为止。 • LED显示器工作于静态显示方式时,各位的共阴极(公共端K0)接地;若为共阳极(公共端K0),则接+5v电源。每位的段选线(a~dp)分别与一个8位锁存器的输出口相连,显示器中的各位相互独立,而且各位的显示字符一经确定,相应锁存的输出将维持不变。 • 因此,静态显示器的亮度较高。这种显示方式编程容易,管理也较简单,但占用I/O口线资源较多。在显示位数较多的情况下,一般都采用动态显示方式。
2) LED动态显示方式 • 在多位LED显示时,将所有位的段选线并联在一起,由一个8位I/O口控制。而共阴(或共阳)极公共端K分别由相应的I/O线控制,实现各位的分时选通。图9-12所示为6位共阴极LED动态显示接口电路。 • 图9-12 6位LED动态显示接口电路图9-13 6位动态扫描显示状态 图9-12 6位LED动态显示接口电路
例如,要求显示“E0-20”时,I/O口1和I/O口2轮流送入段选码、位选码及显示状态如图9-13所示。段选码、位选码每送入一次后延时1 ms,因人眼的视觉暂留时间为0.1 s(100 ms),所以每位显示的间隔不必超过20 ms,并保持延时一段时间,以造成视觉暂留效果,给人看上去每个数码管总在亮。这种方式称为软件扫描显示。 图9-13 6位动态扫描显示状态
3. LED显示器与89C51接口及显示子程序 • 图9-14图中,P0口输出段选码,P1口输出位选码,位选码占用输出口的线数决定于显示器位数,比如6位就要占6条。 • 75452(或7406)是反相驱动器(30 V高电压,OC门),这是因为89C51 P1口正逻辑输出的位控与共阴极LED要求的低电平点亮正好相反,即当P1口位控线输出高电平时,点亮一位LED。 • 7407是同相OC门,作段选码驱动器。 • 逐位轮流点亮各个LED,每一位保持1 ms,在10~20 ms之内再一次点亮,重复不止。这样,利用人的视觉暂留,好像6位LED同时点亮一样。 • 扫描显示子程序流程如图9-15所示。
DIS显示子程序清单如下: DIS: MOV R0,#7EH;显示缓冲区末地址→R0 MOV R2,#01H;位控字,先点亮最低位(右边) MOV A,R2 MOV DPTR,#TAB;字型表头地址→DPTR LP0: MOV P1,A MOV A,@R0;取显示数据 MOVC A,@A+DPTR;取出字形码 MOV P0,A;送出显示 ACALL D1MS;调延时子程序 DEC R0;数据缓冲区地址减1 MOV A,R2 JB ACC.5,LP1;扫描到最左面的显示器了吗? RL A;没有到,左移1位 MOV R2,A AJMP LP0 LP1: RET TAB: DB 3FH,06H,5BH,4FH,66H,6DH DB 7DH,07H,7FH,6FH,77H,7CH DB 39H,5EH,79H,71H,40H,00H D1MS: MOV R7,#02H;延时1 ms子程序 DL: MOV R6,#0FFH DL1: DJNZ R6,DL1 DJNZ R7,DL RET
DIR:MOV A,#10000000B ;设置8255的工作方式,A、B口为输出 MOV DPTR,#0FFFFH ;8255的命令口地址送DPTR MOVX @DPTR,A MOV R0,#50H ;50H-57H为显示缓冲区 MOV R3,#7FH ;第1位的位选码 MOV A,R3 SCAN:MOV DPTR,#0FFFDH ;指向B口 MOVX @DPTR,A ;位选码送B口 MOV A,@R0 ;取显示数据 MOV DPTR,#TAB ;取字形码表首址 MOVC A,@A+DPTR ;取字形码 MOV DPTR,#0FFFCH ;指向A口 MOVX @DPTR,A ;字形码送A口 ACALL DL1ms ;调延时1ms子程序 INC R0 ;指向下一显示数据单元 MOV A,R3 JNB ACC.0,ED ;8位显示完,退出 RR A ;指向下一位 MOV R3,A AJMP SCAN ;继续显示下一位 ED: RET TAB: DB 3FH,06H,5BH,4FH,66H ; 共阴0~F的字型码表 DB 6DH,7DH,07H,7FH,6FH DL1ms:MOV R7,#01H ;延时1ms子程序 DL0:MOV R6,#0FFH DL1:DJNZ R6,DLI; DJNZ R7,DLO RET
9.2 前向通道中的A/D转换器及接口技术 • 模/数(A/D)转换电路的种类有:计数比较型、逐次逼近型、双积分型等等。 • 逐次逼近型A/D转换器,在精度、速度和价格上都适中,是最常用的A/D转换器件。 • 双积分A/D转换器,具有精度高、抗干扰性好、价格低廉等优点,但转换速度低。 • 串行输出的A/D芯片由于节省单片机的I/O口线,越来越多地被采用。如具有SPI三线接口的TLC1549、TLC1543、TLC2543、MAX187等,具有2线I2C接口的MAX127、PCF8591(4路8位A/D,还含1路8位D/A)等。
9.2.1 逐次逼近型并行输出A/D转换器及接口 • ADC0809 A/D转换器芯片 • 图9-27所示为ADC0809的引脚图及内部逻辑结构图。 • 它由8路模拟开关、8位A/D转换器、三态输出锁存器以及地址锁存译码器等组成。 图9-27 ADC0809结构
引脚功能说明如下: • IN0~IN7:8个输入通道的模拟输入端。 • D0~D7:8位数字量输出端。 • START:启动信号,加上正脉冲后,A/D转换开始进行。 • ALE:地址锁存信号。由低至高电平时,把三位地址信号送入通道号地址锁存器,并经译码器得到地址输出,以选择相应的模拟输入通道。 • EOC:转换结束信号,是芯片的输出信号。转换开始后,EOC信号变低;转换结束时,EOC返回高电平。这个信号可以作为A/D转换器的状态信号来查询,也可以直接用作中断请求信号。 • OE:输出允许控制端(开数字量输出三态门)。 • CLK:时钟信号。最高允许值为640 kHz。 • VREF+和VREF-:A/D转换器的参考电压。 • VCC:电源电压。由于是CMOS芯片,允许的电压范围较宽,可以是+5~+15V。 • 8位模拟开关地址输入通道的关系见表96。
表9-6 8位模拟开关功能表 ADC0809的时序图见图9-28 图9-28 ADC0809的时序图
2. ADC0809与89C51接口 • ADC0809与89C51连接可采用查询方式,也可采用中断方式。图9-29为中断方式连接电路图。由于ADC0809片内有三态输出锁存器,因此可直接与89C51接口。 图9-29 ADC0809与89C51的连接
3. 8路巡回检测系统 【例9-3】某粮库或某冷冻厂需对8点(8个冷冻室或8个粮仓)进行温度巡回检测。要求设计一个单片机巡回检测系统,使其能对各冷冻室或各粮仓的温度巡回检测并加以处理。设被测温度范围为-30~+50℃,温度检测精度要求不大于±1℃。 将读数依次存放在片外数据存储器A0H~A7H单元。其主程序和中断服务程序如下: 主程序: MAIN: MOV R0,#0A0H;数据暂存区首址 MOV R2,#08H;8路计数初值 SETB IT1;脉冲触发方式 SETB EA;开中断 SETB EX1 MOV DPTR,#7FF8H;指向0809首地址 MOVX @DPTR,A;启动A/D转换 HERE:SJMP HERE;等待中断
中断服务程序: MOVX A,@DPTR;读数 MOVX @R0,A;存数 INC DPTR;更新通道 INC R0;更新暂存单元 DJNZ R2,DONE RETI DONE:MOVX @DPTR,A RETI
9.2.2 3 位双积分A/D转换器及接口技术 • 适用于单片机接口的有3 位双积分A/D转换器 MC14433(精度相当于11位二进制数)和4 位双积 分A/D转换器ICL7135(精度相当于14位二进制数)。
1. MC14433芯片介绍 • MC14433主要特性参数如下: • 转换精度具有±1/1 999的分辨率或读数的±0.05%±1个字(相当于11位二进制数); • 电压量程分1.999 V和199.9 mV两档; • 转换速度为3~10次/秒,相应的时钟频率变化范围为50~150 kHz; • 输入阻抗大于100 MΩ; • 基准电压取2 V或200 mV(分别对应量程为1.999 V或199.9 mV); • 具有过量程和欠量程输出标志; • 片内具有自动极性转换和自动调零功能; • 转换结束输出经过多路调制的BCD码; • 工作电压范围为±4.5~±8 V或9~16 V; • 当电源为±5 V时,典型功耗为8 mW。
MC14433为24脚双列直插式封装,其引脚如图9-30所示。引脚功能介绍如下:MC14433为24脚双列直插式封装,其引脚如图9-30所示。引脚功能介绍如下: • VAG(1脚) :模拟地。 • VREF(2脚):基准电压输入端。 • VX(3脚):被测电压输入端。 • R1、R1/C1和C1(4~6脚):外接积分阻容元件,4脚和6脚为输入线,5脚为积分波形输出端。若时钟为66 kHz,R1为470 kΩ(2 V)或27 kΩ(200 mV)时,一次转换的时间约为250 ms。 • C01和C02(7和8脚):外接失调补偿电容。通常取0.1μF。 • DU(9脚):定时输出控制端。若输入一个正脉冲,则使转换结果送至结果寄存器。 图9-30 MC14433的引脚图
EOC(14脚):一次转换结束标志输出。每一次A/D转换结束时便输出一个正脉冲,其宽度为时钟周期的1/2。若把9脚和14脚相连接,则每次转换结束都送到输出锁存器。在实际电路中常把它们相连。EOC(14脚):一次转换结束标志输出。每一次A/D转换结束时便输出一个正脉冲,其宽度为时钟周期的1/2。若把9脚和14脚相连接,则每次转换结束都送到输出锁存器。在实际电路中常把它们相连。 • CLKI和CLKO(10和11脚):时钟信号输入、输出端。通常外接一个300 KΩ左右的电阻。 • OR(15脚):过量程标志。当|Vx|>VR时,输出低电平。 • DS4~DS1(16~19脚):个、十、百、千位选通特征位输出信号,宽度为18个时钟周期。当DS1=1时,Q3~Q0输出为千位数;DS2=1时,Q3~Q0输出为百位数……。 • Q3~Q0(23~20脚):经A/D转换后的BCD码结果输出端。 • VEE(12脚):负电源,为电路最低电平端。 • VSS(13脚):输出低电平基准,为数字地或称系统地。 • VDD(24脚):正电源。若VSS=VAG,则输出幅度为VAG ~ VDD ;若VSS =VEE,则输出幅度为VEE~ VDD 。 • 图931为MC14433的转换输出时序。
DS1=1时,Q3Q2Q1Q0输出过量程、欠量程、千位和极性标志的编码如表9-7所列。DS1=1时,Q3Q2Q1Q0输出过量程、欠量程、千位和极性标志的编码如表9-7所列。 • 由表9-7可知,Q3在Q0=0时,表示千位数的内容: Q3=0,千位为1;Q3=1,千位为0。Q3在Q0=1时,表示过、欠量程: Q3=0,表示过量程;Q3=1表示欠量程。当量程选为1.999 V时,过量程表示被测信号大于1.999 V;欠量程表示被测信号小于0.179 V。Q2表示被测信号的极性: Q2=1,为正极性;Q2=0,为负极性。 表9-7 DS1选通时Q0~Q3表示的输出结果