1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第9章,机械工业出版社同名教材,配套电子教案,单片机原理与控制技术 第2版,第9章 常用外围设备接口电路,本章要点:,LED,数码管及编码方式,静态显示方式及其典型应用电路,动态显示方式及其典型应用电路,虚拟,I,2,C,总线串行显示电路,键盘去抖动和连接、控制方式,独立式按键及其接口电路,矩阵式键盘及其接口电路,并行,A/D ADC0809,及其接口电路,串行,A/D ADC0832,及其接口电路,I,2,C,串行,A/D,典型应用电路,DAC0832,及其接口电路,I,2,C,串行,D/A,典型应用电路
2、开关量驱动输出接口电路,9-1 LED数码管显示接口,一、,LED数码管,LED数码管分类:,按其内部结构可分为,共阴型,和,共阳型,;,按其外形尺寸有多种形式,使用较多的是,0.5,和,0.8,;,按显示颜色也有多种形式,主要有,红色,和,绿色,;,正向压降一般为,1.52V,,额定电流为,10mA,,最大电流为,40mA,。,按亮度强弱可分为,超亮,、,高亮,和,普亮,。,二、,LED数码管编码方式,表9-1 共阴和共阳LED数码管几种八段编码表,显示,数字,共阴顺序小数点暗,共阴逆序小数点暗,共阳顺序,小数点亮,共阳顺序,小数点暗,Dp g f e d c b a,16进制,a b c
3、 d e f g Dp,16进制,0,0 0 1 1 1 1 1 1,3FH,1 1 1 1 1 1 0 0,FCH,40H,C0H,1,0 0 0 0 0 1 1 0,06H,0 1 1 0 0 0 0 0,60H,79H,F9H,2,0 1 0 1 1 0 1 1,5BH,1 1 0 1 1 0 1 0,DAH,24H,A4H,3,0 1 0 0 1 1 1 1,4FH,1 1 1 1 0 0 1 0,F2H,30H,B0H,4,0 1 1 0 0 1 1 0,66H,0 1 1 0 0 1 1 0,66H,19H,99H,5,0 1 1 0 1 1 0 1,6DH,1 0 1 1 0 1
4、 1 0,B6H,12H,92H,6,0 1 1 1 1 1 0 1,7DH,1 0 1 1 1 1 1 0,BEH,02H,82H,7,0 0 0 0 0 1 1 1,07H,1 1 1 0 0 0 0 0,E0H,78H,F8H,8,0 1 1 1 1 1 1 1,7FH,1 1 1 1 1 1 1 0,FEH,00H,80H,9,0 1 1 0 1 1 1 1,6FH,1 1 1 1 0 1 1 0,F6H,10H,90H,【例9-1】已知显示数存在内RAM 30H(高位)、31H中,试将其转换为5位共阴字段码(顺序),存在以30H(高位)为首址的内RAM中。,从显示数中分离出显示的每一
5、位数字,方法是将显示数除以十进制的权,显示数,转换,为显示字段码的,步骤,:,将分离出的显示数字转换为显示字段,码,方法是查表,SPRT:MOV R0,#30H,;置万位BCD码间址,MOV A,30H,;置被除数,MOV B,31H,;,MOV R6,#27H,;置除数10000=2710H,MOV R5,#10H,;,LCALL SUM,;除以10000,万位商存30H,余数存A、B,MOV R6,#03H,;置除数1000=03E8H,MOV R5,#0E8H ;,INC R0,;指向千位商间址(31H),LCALL SUM,;除以1000,千位商存31H,余数存A、B,MOV R6,#
6、0,;置除数100,MOV R5,#100,;,INC R0,;指向百位商间址(32H),LCALL SUM,;除以100,百位商存32H,余数存A(B=0),MOV B,#10,;置除数10,DIV AB,;除以10,INC R0,;指向十位商间址(33H),MOV R0,A,;十位商存33H,XCH A,B,;读个位数,INC R0,;指向个位间址(34H),MOV R0,A,;个位存34H,RET,;,解:连续调用下列二个子程序即可。,分离显示数字子程序,说明,:SUM是16位除以16位子程序:(A、B)(R6、R5)=商R0,余数(A、B)。(参阅例4-9),转换显示字段码子程序,CH
7、AG:MOV DPTR,#TAB,;置共阴字段码表首址,MOV R0,#30H,;置显示数据区首址,CGLP:MOV A,R0,;取显示数字,MOVC A,A+DPTR,;读相应显示字段码,MOV R0,A,;存显示字段码,INC R0,;指向下一显示数字,CJNE R0,#35H,CGLP,;判5个显示数字转换完否?未完继续,RET,;转换完毕,结束,TAB:DB 3FH,06H,5BH,4FH,66H,;共阴字段码表,DB 6DH,7DH,07H,7FH,6FH,;,三、,静态显示方式及其典型应用电路,动态显示方式,,在某一瞬时显示一位,依次循环扫描,轮流显示,由于人的视觉滞留效应,人们看
8、到的是多位同时稳定显示。,特点,:占用I/O端线少,电路较简单,编程较复杂,CPU要定时扫描刷新显示。一般适用于显示位数较多的场合。,LED数码管显示分类:静态显示方式和动态显示方式。,静态显示方式,,每一位字段码分别从I/O控制口输出,保持不变直至CPU刷新。,特点,:编程较简单,但占用I/O口线多,一般适用于显示位数较少的场合。,DIR51:SETB P1.,静态显示方式,每一位字段码分别从I/O控制口输出,保持不变直至CPU刷新。,MOVX A,DPTR ;读A/D值,ANL A,#0F0H ;屏蔽行线,保留列线数据(A中高4位),2 ;百位停显示,MOV R0,#30H ;置A/D数据
9、存储区首址,LOOP1:MOV R7,#80H ;置锯齿波幅值;1机周,ANL A,#00000111B;屏蔽高5位,保留有键值信息的低3位,MOV R1,#03H ;取列线编号初值,MOV R7,#8 ;置通道数,MOV P1,#11010000B;选通十位,MOV R0,#30H ;置显示数据区首址,IOUT1、IOUT2:电流输出端。,MOV R6,#27H ;置除数10000=2710H,其中红色部分由80C51发送,PCF8591接收;,1、,并行扩展静态显示电路,【例9-2】按图9-3编制显示子程序,显示数(255)存在内RAM 30H中。解:,DIR1:MOV A,30H,;读显
10、示数,MOV B,#100,;置除数,DIV AB,;产生百位显示数字,MOVC A,A+DPTR,;读百位显示符,MOV DPTR,#0DFFFH,;置74377(百位)地址,MOVX DPTR,A,;输出百位显示符,MOV A,B,;读余数,MOV B,#10,;置除数,DIV AB,;产生十位显示数字,MOV DPTR,#TAB,;置共阳字段码表首址,MOVC A,A+DPTR,;读十位显示符,MOV DPTR,#0BFFFH,;置74377(十位)地址,MOVX DPTR,A,;输出十位显示符,MOV A,B,;读个位显示数字,MOV DPTR,#TAB,;置共阳字段码表首址,MOVC
11、 A,A+DPTR,;读个位显示符,MOV DPTR,#7FFFH,;置74377(个位)地址,MOVX DPTR,A,;输出个位显示符,RET,;,TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,;共阳字段码表,DB 92H,82H,0F8H,80H,90H;,2、,串行扩展静态显示电路,DIR2:MOV SCON,#00H,;置串口方式0,CLR ES,;串口禁中,SETB P1.0,;“与”门开,允许TXD发移位脉冲,MOV SBUF,30H,;串行输出个位显示字段码,JNB TI,$,;等待串行发送完毕,CLR TI,;清串行中断标志,MOV SBUF,31H,;串行输出
12、十位显示字段码,JNB TI,$,;等待串行发送完毕,CLR TI,;清串行中断标志,MOV SBUF,32H,;串行输出百位显示字段码,JNB TI,$,;等待串行发送完毕,CLR TI,;清串行中断标志,CLR P1.0,;“与”门关,禁止TXD发移位脉冲,RET,;,【,例9-3】按图9-4编制显示子程序,显示字段码已分别存在32H30H内RAM中。,解:,3、,BCD码输出静态显示电路,解:编程如下:,DIR3:MOV P1,#111,0,0000B,;选通个位,ORL P1,30H,;输出个位显示数,MOV P1,#11,0,10000B,;选通十位,ORL P1,31H,;输出十位
13、显示数,MOV P1,#1,0,110000B,;选通百位,ORL P1,32H,;输出百位显示数,RET,;,【例9-4】按图9-5试编制显示子程序(小数点固定在第二位),已知显示数存在内RAM 30H32H中。,动态显示电路,连结形式:,显示各位的所有,相同字段线连在一起,,共8段,由一个8位,I/O口控制;,每一位的公共端,(共阳或共阴COM),由另一个I/O口控制。,四、,动态显示方式,及其典型应用电路,1、,共阴型8位动态显示电路,DIR4:MOV R2,#10,;置循环扫描次数,MOV DPTR,#7FFFH,;置74377口地址,DLP1:ANL P1,#11111000B,;第
14、0位先显示,MOV R0,#30H,;置显示字段码首址,DLP2:MOV A,R0,;读显示字段码,MOVX DPTR,A,;输出显示字段码,LCALL DY2ms,;调用延时2ms子程序(参阅例4.13),INC R0,;指向下一位字段码,INC P1,;选通下一位显示,CJNE R0,#38H,DLP2,;判8位扫描显示完否?未完继续,DJNZ R2,DLP1,;8位扫描显示完毕,判10次循环完否?,CLR A,;10次循环完毕,显示暗,MOVX DPTR,A,;,RET,;子程序返回,【例9-5】按图9-7,试编制循环扫描(10次)显示子程序,已知显示字段码存在以30H(低位)为首址的8
15、字节内RAM中。,解:编程如下:,2、,共阳型3位动态显示电路,DIR5:MOV DPTR,#0BFFFH,;置74377地址,MOV R2,#100,;置循环显示次数,DIR50:SETB P1.2,;百位停显示,MOV A,40H,;取个位字段码,MOVX DPTR,A,;输出个位字段码,CLR P1.0,;个位显示,LCALL DY2ms,;调用延时2ms子程序(参阅例4.13),DIR51:SETB P1.0,;个位停显示,MOV A,41H,;取十位字段码,MOVX DPTR,A,;输出十位字段码,CLR P1.1,;十位显示,LCALL DY2ms,;延时2ms,DIR52:SET
16、B P1.1,;十位停显示,MOV A,42H,;取百位字段码,MOVX DPTR,A,;输出百位字段码,CLR P1.2,;百位显示,LCALL DY2ms,;延时2ms,DJNZ R2,DIR50,;判循环显示结束否?未完继续,ORL P1,#00000111B,;3位灭显示,RET,;,【例9-6】根据图9-8电路,试编制3位动态扫描显示程序(循环100次),已知显示字段码存在以40H(低位)为首址的3字节内RAM中。,解:编程如下:,1、,SAA1064引脚功能,五、,虚拟I,2,C总线串行显示电路,V,DD,、V,EE,:电源、接地端。电源4.515V;,P1P16,:段驱动输出端。
17、分为两个8位口:,P1P8;P9P16。P8、P16为高位。口锁存器具有反相功能,置1时,端口输出0。,MX1、MX2,:位码驱动端。静态显示驱动时,一片SAA1064可驱动二位LED数码管;动态显示驱动时,按图9-10连接方式,一片SAA1064可驱动四位LED数码管;,SDA、SCL,:I,2,C总线数据端、时钟端;,C,EXT,:时钟振荡器外接电容,典型值2700pF,ADR,:地址引脚端。SAA1064引脚地址A1、A0采用ADR模拟电压比较编址。当ADR引脚电平为0、3VDD/8,5VDD/8、VDD时,相应引脚地址A2、A1、A0 分别为000、001、010、011;,2、,硬件
18、电路设计,片内寄存器,符号,COM,data1,data2,data3,data4,装载内容,控制命令,显示段码1,显示段码2,显示段码3,显示段码4,片内地址,00H,01H,02H,03H,04H,3、,片内可编程功能,控制命令COM,COM,D7,D6,D5,D4,D3,D2,D1,D0,00H,C6,C5,C4,C3,C2,C1,C0,CO,:静动态控制,C0=1,动态显示,动态显示时,data1、data2轮流从P8P1输出,data3、data4轮流从P16P9输出;,C1,:显示位1、3亮暗选择,C1=1,选择亮;,C2,:显示位2、4亮暗选择,C2=1,选择亮;,C3,:测试位
19、C3=1,所有段亮;,C4,、,C5,、,C6,:驱动电流控制位,C4、C5、C6分别为1时,驱动电流分别为3mA、6mA、12mA;C4、C5、C6全为1时,驱动电流最大,可达21mA。,解:,VSAA:MOV MTD,#00H ;,置SAA1064控制命令寄存器COM片内子地址,MOV 31H,#01000111B;,置控制命令字,动态显示,驱动电流12mA,MOV NUMB,#6 ;,置发送数据数:SADR+COM+data14=6,SAA1:MOV RO,#51H ;,将51H54H显示符数据移至32H35H,LCALL MOVB ;,MOV SLA,#01110000B;,置SAA
20、1064(1)写寻址字节SLA,W,LCALL WRNB ;,发送给SAA1064(1),SAA2:MOV R0,#55H ;,将55H58H显示符数据移至32H35H,LCALL MOVB ;,MOV SLA,#01110110B;,置SAA1064(2)寻址字节SLA,W,LCALL WRNB ;,发送给SAA1064(2),RET ;,MOVB:MOV R1,#32H ;,显示符数据移至32H35H子程序,MOVB1:MOV A,R0 ;,读出,MOV R1,A ;,存入,INC RO ;,指向下一读出单元,INC R1 ;,指向下一存入单元,CJNE R1,#36H,MOVB1;,判4
21、个数据移完否?未完继续,RET ;,【,例9-7】已知8位显示符(共阴编码)已依次存入内RAM 51H58H中,试按图9-10编程将其输入SAA1064(1),(2)动态显示,驱动电流为12mA。设VIIC软件包已装入ROM,VSDA.VSCL.SLA.NUMB.MTD.MRD均已按8.3.2软件包小结中协议定义。,4、,程序设计,1、,按键开关去抖动问题,9-2 键盘接口,一、,键盘接口概述,键盘的抖动时间一般为510ms,,抖动现象会引起CPU对一次键操作进行多次处理,从而可能产生错误,。,硬件去抖动,消除抖动不良后果的方法:,其中,RC滤波电路去抖动电路简单实用,效果较好,。,软件去抖动
22、检测到按键按下后,执行,延时10ms子程序后再确认,该键是否确实按下,消除抖动影响。,2、,按键连接方式,独立式按键,独立式按键是每个按键占用一根I/O端线,。特点:,各按键相互独立,电路配置灵活;,按键数量较多时,I/O端线耗费较多,电路结构繁杂;,软件结构简单。,适用于按键数量较少的场合,。,矩阵式键盘,I/O端线分为行线和列线,按键跨接在行线和列线上,按键按下时,行线与列线发生短路,。,特点:,占用I/O端线较少;,软件结构教复杂。,适用于按键较多的场合,。,3、,键盘扫描控制方式,程序控制扫描方式,键处理程序固定在主程序的某个程序段。,特点,:对CPU工作影响小,但应考虑键盘处理程序
23、的运行间隔周期不能太长,否则会影响对键输入响应的及时性。,定时控制扫描方式,利用定时/计数器每隔一段时间产生定时中断,CPU响应中断后对键盘进行扫描。,特点,:与程序控制扫描方式的区别是,在扫描间隔时间内,前者用CPU工作程序填充,后者用定时/计数器定时控制。定时控制扫描方式也应考虑定时时间不能太长,否则会影响对键输入响应的及时性。,中断控制方式,中断控制方式是利用外部中断源,响应键输入信号。,特点,:克服了前两种控制方式可能产生的空扫描和不能及时响应键输入的缺点,既能及时处理键输入,又能提高CPU运行效率,但要占用一个宝贵的中断资源。,1、,按键直接与I/O口连接,二、,独立式按键及其接口电
24、路,按图9-13(b)编程如下,:,KEYB:ORL P1,#07H,MOV A,P1,;读键值,键闭合相应位为1,ANL A,#00000111B,;屏蔽高5位,保留有键值信息的低3位,JZ GRET,;全0,无键闭合,返回,LCALL DY10ms,;非全0,有键闭合,延时10ms,软件去抖动,MOV A,P1,;重读键值,键闭合相应位为1,ANL A,#00000111B,;屏蔽高5位,保留有键值信息的低3位,JZ GRET,;全0,无键闭合,返回;非全0,确认有键闭合,JB Acc.0,KB0,;转0#键功能程序,JB Acc.1,KB1,;转1#键功能程序,JB Acc.2,KB2,
25、转2#键功能程序,GRET:RET,KB0:LCALL WORK0,;执行0#键功能子程序,RET,KB1:LCALL WORK1,;执行1#键功能子程序,RET,KB2:LCALL WORK2,;执行2#键功能子程序,RET,按键与并行扩展I/O口连接,2、,按键与扩展I/O口连接,【例9-9】按图9-14,试编制按键扫描子程序,将键信号存入内RAM 30H。,解:编程如下:,KEY99:MOV DPTR,#7FFFH,;置74373口地址,MOVX A,DPTR,;输入键信号(“0”有效),MOV 30H,A,;存键信号数据,RET,;,参阅8.2.4,图8-6,【例8-2】。,按键与串
26、行扩展I/O口连接,三、,矩阵式键盘及其接口电路,【例9-10】按图9-15及图9-16,试编制矩阵式键盘扫描程序。解:,KEY:MOV P1,#0F0H,;行线置低电平,列线置输入态,KEY0:MOV A,P1,;读列线数据,CPL A,;数据取反,“1”有效,ANL A,#0F0H,;屏蔽行线,保留列线数据,MOV R1,A,;存列线数据(R1高4位),JZ GRET,;全0,无键按下,返回,KEY1:MOV P1,#0FH,;行线置输入态,列线置低电平,MOV A,P1,;读行线数据,CPL A,;数据取反,“1”有效,ANL A,#0FH,;屏蔽列线,保留行线数据,MOV R2,A,;
27、存行线数据(R2低4位),JZ GRET,;全0,无键按下,返回,JBC F0,WAIT,;已有消抖标志,转,SETB F0,;无消抖标志,置消抖标志,LCALL DY10ms,;调用10ms延时子程序(参阅例4.13),消抖,SJMP KEY0,;重读行线列线数据,GRET:RET,;,WAIT:MOV A,P1,;等待按键释放,CPL A,;,ANL A,#0FH,;,JNZ WAIT,;按键未释放,继续等待,KEY2:MOV A,R1,;取列线数据(高4位),MOV R1,#03H,;取列线编号初值,MOV R3,#03H,;置循环数,CLR C,;,KEY3:RLC A,;依次左移入C
28、中,JC KEY4,;C=1,该列有键按下,(列线编号存R1),DEC R1,;C=0,无键按下,修正列编号,DJNZ R3,KEY3,;判循环结束否?未结束继续寻找有键按下的列线,KEY4:MOV A,R2,;取行线数据(低4位),MOV R2,#00H,;置行线编号初值,MOV R3,#03H,;置循环数,CLR C,;,KEY5:RRC A,;依次右移入C中,JC KEY6,;C=1,该行有键按下,(行线编号存R2),INC R2,;C=0,无键按下,修正行线编号,DJNZ R3,KEY5,;判循环结束否?未结束继续寻找有键按下的行线,KEY6:MOV A,R2,;取行线编号,CLR C
29、RLC A,;行编号2,RLC A,;行编号4,ADD A,R1,;行编号4+列编号=按键编号,KEY7:CLR C,;,RLC A,;按键编号2,RLC A,;按键编号4(LCALL+RET共4字节),MOV DPTR,#TABJ,;,JMP A+DPTR,;散转,执行相应键功能子程序,TABJ:LCALL WORK0,;调用执行0#键功能子程序,RET,;,LCALL WORK1,;调用执行1#键功能子程序,RET,;,LCALL WORK15,;调用执行15#键功能子程序,RET,;,【例9-11】按图9-17,试编制中断方式键盘扫描程序,将键盘序号存入内RAM 30H。,ORG
30、0000H,;复位地址,LJMP STAT,;转初始化,ORG 0003H,;中断入口地址,LJMP PINT0,;转中断服务程序,ORG 0100H,;初始化程序首地址,STAT:MOV SP,#60H,;置堆栈指针,SETB IT0,;置为边沿触发方式,MOV IP,#00000001B,;置为高优先级中断,MOV P1,#00001111B,SETB EA,;CPU开中,SETB EX0,;开中,LJMP MAIN,;转主程序,并等待有键按下时中断,解:,OGR 2000H,;中断服务程序首地址,PINT0:PUSH Acc,;保护现场,PUSH PSW,;,MOV A,P1,;读行线(
31、P1.0P1.3)数据,CPL A,;数据取反,“1”有效,ANL A,#0FH,;屏蔽列线,保留行线数据,MOV R2,A,;存行线(P1.0P1.3)数据(R2低4位),MOV P1,#0F0H,;行线置低电平,列线置输入态,MOV A,P1,;读列线(P1.4P1.7)数据,CPL A,;数据取反,“1”有效,ANL A,#0F0H,;屏蔽行线,保留列线数据(A中高4位),MOV R1,#03H,;取列线编号初值,MOV R3,#03H,;置循环数,CLR C,;,PINT01:RLC A,;依次左移入C中,JC PINT02,;C=1,该列有键按下,(列线编号存R1),DEC R1,;
32、C=0,无键按下,修正列编号,DJNZ R3,PINT01,;判循环结束否?未结束继续寻找有键按下列线,PINT02:MOV A,R2,;取行线数据(低4位),MOV R2,#00H,;置行线编号初值,MOV R3,#03H,;置循环数,PINT03:RRC A,;依次右移入C中,JC PINT04,;C=1,该行有键按下,(行线编号存R2),INC R2,;C=0,无键按下,修正行线编号,DJNZ R3,PINT03,;判循环结束否?未结束继续寻找有键按下行线,PINT04:MOV A,R2,;取行线编号,CLR C,;,RLC A,;行编号2,RLC A,;行编号4,ADD A,R1,;行
33、编号4+列编号=按键编号,MOV 30H,A,;存按键编号,POP PSW,;,POP Acc,;,RETI,;,9-3 A/D转换接口电路,一、,A/D转换的基本概念,A/D转换的功能是把模拟量电压转换为N位数字量。,设D为N位二进制数字量,UA为电压模拟量,UREF为参考电压,无论A/D或D/A,其转换关系为:,U,A,=DU,REF,/2,N,(其中:D=D,0,2,0,+D,1,2,1,+D,N-1,2,N-1,),1、,A/D转换器的主要性能指标:,转换精度,。转换精度通常用分辨率和量化误差来描述。,分辨率,。分辨率=U,REF,/2,N,表示输出数字量变化一个相邻数码所需输入模拟电
34、压的变化量。,N为A/D转换的位数,N越大,分辨率越高,,习惯上分辨率常以A/D转换位数N表示。,量化误差,。量化误差是指零点和满度校准后,在整个转换范围内的最大误差。,转换时间,。指A/D转换器完成一次A/D转换所需时间。转换时间越短,适应输入信号快速变化能力越强。,2、,A/D转换器分类,A/D转换器分类:按,转换原理形式,可分为逐次逼近式、双积分式和V/F变换式;,按,信号传输形式,可分为并行A/D和串行A/D。,1、,引脚功能和典型连接电路,IN0IN7,:,8路模拟信号输入端,。,C、B、A,:,8路模拟信号转换选择端,。,与低8位地址中A0A2连接。由A0A2地址000111选择I
35、N0IN7八路A/D通道。,CLK,:,外部时钟输入端,。,时钟频率高,A/D转换速度快。允许范围为101280KHz。,通常由80C51 ALE端直接或分频后与0809 CLK端相连接。,D0D7,:,数字量输出端,。,OE,:,A/D转换结果输出允许控制端,。,OE=1,允许将A/D转换结果从D0D7端输出。通常由80C51的端与0809片选端(例如P2.0)通过或非门与0809 OE端相连接。,ALE,:,地址锁存允许信号输入端,。,0809 ALE信号有效时将当前转换的通道地址锁存。,START,:,启动A/D转换信号输入端,。,当START端输入一个正脉冲时,立即启动0809进行A/
36、D转换。START端与ALE端连在一起,由80C51WR与0809片选端(例如P2.0)通过或非门相连。,EOC,:A/D转换结束信号输出端,高电平有效。,U,REF(+),、,U,REF(-),:,正负基准电压输入端,。,Vcc,:,正电源电压,(+5V)。,GND,:,接地端,。,2、,ADC 0809应用实例,中断方式,【例9-12】按图9-20,用中断方式对8路模拟信号依次A/D转换一次,并把结果存入以30H为首址的内RAM中,试编制程序。,解:,ORG 0000H,;复位地址,LJMP STAT,;转初始化程序,ORG 0013H,;中断服务子程序入口地址,LJMP PINT1,;中
37、断,转中断服务子程序;,ORG 0100H,;初始化程序首地址,STAT:MOV R1,#30H,;置数据区首址,MOV R7,#8,;置通道数,SETB IT1,;置边沿触发方式,SETB EX1,;开中,SETB EA,;CPU开中,MOV DPTR,#0FEF8H,;置0809通道0地址,MOVX DPTR,A,;启动0通道A/D,LJMP MAIN,;转主程序,并等待A/D中断,ORG 0200H,;中断服务子程序首地址,PINT1:PUSH Acc,;保护现场,PUSH PSW,;,MOVX A,DPTR,;读A/D值,MOV R1,A,;存A/D值,INC DPTR,;修正通道地址
38、INC R1,;修正数据区地址,MOVX DPTR,A,;启动下一通道A/D,DJNZ R7,GORETI,;判8路采集完否?未完继续,CLR EX1,;8路采集已完,关中,GORETI:POP PSW,;恢复现场,POP Acc,;,RETI,;中断返回,查询方式,工作在查询方式时,0809 EOC端可不必通过反相器与或相连,直接与80C51 P1口或P3口中任一端线相连。,【例9-13】图9-20中,用P1.0直接与0809 EOC端相连,试用查询方式编制程序,对8路模拟信号依次A/D转换一次,并把结果存入以40H为首址的内RAM中。,解:,MAIN:MOV R1,#40H,;置数据区首
39、址,MOV R7,#8,;置通道数,SETB P1.0,MOV DPTR,#0FEF8H,;置0809通道0地址,LOOP:MOVX DPTR,A,;启动A/D,JNB P1.0,$,;查询A/D转换结束否?未完继续查询等待,MOVX A,DPTR,;A/D已结束,读A/D值,MOV R1,A,;存A/D值,INC DPTR,;修改通道地址,INC R1,;修改数据区地址,DJNZ R7,LOOP,;判8路采集完否?未完继续,RET,;8路采集完毕,返回,延时等待方式,工作在延时等待方式时,0809 EOC端可不必与80C51相连,是根据时钟频率计算出A/D转换时间,略微延长后直接读A/D转换
40、值。,【例9-14】图9-20中,0809 EOC端开路,fosc=6MHz,试用延时等待方式编制程序,对8路模拟信号依次A/D转换一次,并把结果存入以50H为首址的内RAM中。,解:编程如下:,MAIN:MOV R1,#50H,;置数据区首址,MOV R7,#8,;置通道数,MOV DPTR,#0FEF8H,;置0809通道0地址,LOOP:MOVX DPTR,A,;启动A/D,MOV R6,#17,;,DJNZ R6,$,;延时68,S:2机周17=34机周,2,S34=68,S,MOVX A,DPTR,;读A/D值,MOV R1,A,;存A/D值,INC DPTR,;修正通道地址,INC
41、 R1,;修正数据区地址,DJNZ R7,LOOP,;判8路采集完否?未完继续,RET,;8路采集完毕,返回,三、,串行A/D,ADC0832及其接口电路,ADC 0832是8位串行A/D转换器;,转换速度较高(250KHz时转换时间32,s);,单电源供电,功耗低(15mw)。,1、,引脚功能,V,DD,、,V,SS,:电源接地端,V,DD,同时兼任U,REF,;,CS,:片选端,低电平有效;,DI,:数据信号输入端;,DO,:数据信号输出端;,CLK,:时钟信号输入端,要求低于600KHz;,CH0,、,CH1,:模拟信号输入端(双通道),;,2、,典型应用电路,片选CS;,TXD,发送时
42、钟信号输入ADC0832 CLK;,RXD,与DI、DO端连接在一起。,编码,通道选择,CH0 CH1,00,01,10,11,表9-3,3、,串行A/D转换工作时序,工作时序分为二个阶段:,起始和通道配置,由CPU发送,从ADC0832 DI端输入;,A/D转换数据串行输出,由ADC 0832从DO端输出,CPU接收。,4、,软件编程,【例9-15】按图9-21(b)电路,试编制程序,将CH0、CH1通道输入的模拟信号A/D转换,分别存入30H31H中。,解:,AD0832:MOV SCON,#00H,;置串口方式0,禁止接收,CLR ES,;串口禁中,MOV R0,#30H,;置A/D数据
43、存储区首址,CLR P1.0,;片选0832,MOV A,#06H,;置CH0通道配置,ADC0:MOV SBUF,A,;启动A/D,ADC1:JNB TI,ADC1,;串行发送启动及通道配置信号,CLR TI,;清发送中断标志,SETB REN,;允许(启动)串行接收,ADC2:JNB RI,ADC2,;接收第一字节,CLR RI,;清接收中断标志,同时启动接收第二字节,MOV A,SBUF,;读第一字节数据,MOV B,A,;暂存,说明,:,接收第一字节的8位数据为(注意先接收低位D4):,清串行接收中断标志后,启动串行接收第二字节,其数据为:,组合后的8位数据为:,高低4位互换后的8位数
44、据为:,ADC3:JNB RI,ADC3,;接收第二字节,CLR RI,;清接收中断标志,MOV A,SBUF,;读第二字节数据,ANL A,#0FH,;第二字节屏蔽高4位,ANL B,#0FOH,;第一字节屏蔽低4位,ORL A,B,;组合,SWAP A,;高低4位互换,组成正确的A/D数据,MOV R0,A,;存A/D数据,INC R0,;指向下一存储单元,MOV A,#0EH,;置CH1通道配置,CJNE R0,#32H,ADC0,;判两通道A/D完毕否?未完继续,CLR REN,;两通道A/D完毕,禁止接收,SETB P1.0,;清0832片选,RET,;,D3,D2,D1,D0,D1
45、D2,D3,D4,D7,D6,D5,D4,D3,D2,D1,D0,D7,D6,D5,D4,D7,D6,D5,D4,D3,D2,D1,D0,四、,I,2,C串行A/D典型应用电路,I,2,C串行A/D,芯片,PCF8591,,同时具有A/D、D/A转换功能,。,1、,PCF8591引脚功能,SDA,、,SCL,:I,2,C总线数据线、时钟线;,A2,、,A1,、,A0,:引脚地址输入端;,AIN0AIN3,:模拟信号输入端,,OSC,:外部时钟输入端,内部时钟输出端;,EXT,:内外部时钟选择端,EXT=0时选择内部时钟;,V,DD,、,V,SS,:电源、接地端;,AGND,:模拟信号地;,U
46、REF,:基准电压输入端;,A,OUT,:D/A转换模拟量输出端;,该芯片既可用于A/D转换(模拟信号从AIN0AIN3输入),又可用于D/A转换(D/A转换模拟量从A,OUT,输出),器件地址为1001,若A2A1A0接地,D/A转换写寻址字节SLA,W,=90H,A/D转换读寻址字节SLA,R,=91H。,2、,硬件电路设计,3、,片内可编程功能,控制命令字,PCF8591内部有一个控制寄存器,用来存放控制命令,其格式如下:,COM,D7,D6,D5,D4,D3,D2,D1,D0,D1,、,D0,:,A/D通道编号,00:通道0;01:通道1;10:通道2;11:通道3;,D2,:,自动
47、增量选择,D2=1时,A/D转换将按通道03依次自动转换;,D3,、,D7,:必须为0;,D5,、,D4,:,模拟量输入方式选择位,:,00:,输入方式0(,四路单端输入,);,01:,输入方式1(,三路差分输入,);,10:,输入方式2(,二路单端一路差分输入,);,11:,输入方式3(,二路差分输入,)。,D6,:,模拟输出允许,。D6=1,模拟量输出有效;,输入方式0(四路单端输入):,ANI0 通道0(单端输入),ANI1 通道1(单端输入),ANI2 通道2(单端输入),ANI3 通道3(单端输入),输入方式1(三路差分输入):,输入方式2(二路单端一路差分输入):,输入方式3(二路
48、差分输入):,ADC数据操作格式,S,SLA,W,A,COM,A,S,SLA,R,A,Data0,A,Data1,A,发出控制命令(写操作),A/D转换(读操作),其中红色部分由80C51发送,PCF8591接收;,黑色部分由PCF8591发送,80C51接收;,4、,软件编程,【例9-16】按图9-23(b)编程将AIN0AIN3 4个通道的模拟信号A/D转换后,依次存入以50H为首址的内RAM中。设VIIC软件包已装入ROM,VSDA、VSCL、SLA、NUMB、MTD、MRD均已按8.3.2 软件包小结中协议定义。,解:,VADC:MOV SLA,#90H,;置发送寻址字节,MOV MT
49、D,#00000100B,;置A/D转换控制命令,通道自动增量,MOV NUMB,#1,;置发送字节数,LCALL WRNB,;发送控制命令字,MOV R0,#50H,;置A/D数据区首址,VADC0:MOV SLA,#91H,;置接收寻址字节,MOV NUMB,#2,;置接收字节数,LCALL RDNB,;读A/D转换数据,MOV R0,41H,;存A/D转换数据(存在50H53H),INC R0,;修改A/D数据区地址,CJNE R0,#54H,VADC0,;判4通道A/D完成否?未完继续,RET,;,9-4 D/A转换接口电路,一、,D/A转换的基本概念,1、D/A转换的基本概念,D/A
50、转换的基本原理是应用电阻解码网络,将N位数字量逐位转换为模拟量并求和,从而实现将N位数字量转换为相应的模拟量。,设D为N位二进制数字量,U,A,为电压模拟量,U,REF,为参考电压,无论A/D或D/A,其转换关系为:,U,A,=DU,REF,/2,N,(其中:D=D,0,2,0,+D,1,2,1,+D,N-1,2,N-1,),2、,D/A转换器的主要性能指标,分辨率:,相对分辨率=1/2,N,,,N越大,分辨率越高。,线性度,转换精度,建立时间,温度系数,二、,DAC0832及其接口电路,DAC 0832是8位D/A芯片,由美国国家半导体公司生产,是目前国内应用最广的8位D/A芯片(请特别注意






