
单片机入门必读第三章.ppt
164页第三章:MCS-51单片机的系统扩展及应用通过地址总线、数据总线和控制总线实现系统的扩展通过地址总线、数据总线和控制总线实现系统的扩展定时器、串行口和定时器、串行口和A/DA/D、、D/AD/A等应用场合下的硬件接口和等应用场合下的硬件接口和软件编程软件编程3.13.1::程序存储器程序存储器的扩展的扩展3.23.2::数据存储器数据存储器的扩展的扩展3.33.3::输入、输出口输入、输出口的扩展的扩展3.43.4::定时计数器定时计数器的应用的应用3.53.5::串行口串行口的应用的应用3.63.6::MCS-51MCS-51与与D/AD/A转换器的接口转换器的接口3.73.7::MCS-51MCS-51与与A/DA/D转换器的接口转换器的接口3.83.8::动态数码显示及键盘扫描电路动态数码显示及键盘扫描电路3.1:程序存储器ROM的扩展1 1,在使用,在使用80318031(无片内(无片内ROMROM)或大于)或大于4K4K程序存储器时,程序存储器时,必须通过外接必须通过外接ROMROM来构成、扩充系统的程序存储区来构成、扩充系统的程序存储区2 2,当使用外部存储器来扩展系统时,必须占用单片机的,当使用外部存储器来扩展系统时,必须占用单片机的P0P0、、P2P2口作为外部电路的数据、地址总线。
此时,口作为外部电路的数据、地址总线此时,P0P0、、P2P2口就不能作为通用的口就不能作为通用的I/OI/O端口3 3,在系统扩展时,外部电路与单片机连接的依据是单片,在系统扩展时,外部电路与单片机连接的依据是单片机访问外部存储器的时序,所以正确的理解时序是硬件电机访问外部存储器的时序,所以正确的理解时序是硬件电路设计的关键路设计的关键MCS-51与32K ROM的连接P2.7: : : P2.0P0.7: : : P0.0ALE/EA PsenCEA14 : :A8A7 O7 : : : : : : A0 O0OED7 Q7 D0 Q0CPCP 27256 32K ROMMCS-51/CE = P2.7(A15)返回前一次完整的地址信号外部ROM的状态与地址线A15的关系表ROMROM引脚引脚/CE/CEA14A14~~A8A8A7A7~~A0A0地址范围地址范围ROMROM工作工作状态状态单片机引脚单片机引脚A15A15P2P2口口P0P0口口0 00 000000000000000001111111111111111000000000000000011111111111111110000H0000H~~07FFH07FFH选中选中1 11 100000000000000001111111111111111000000000000000011111111111111118000H8000HFFFFHFFFFH未选中未选中访问外部程序存储器ROM的时序: A15-A8(PC)A7-A0OPA7-A0常数存储器数据输出控制 /Psen地址总线(高八位)P2口地址数据总线(低8位)P0 口S1S2S6S5S4S3373地址锁存信号 ALE A15-A8 (DPTR+A)MOVC A,@A+DPTRA B转电路图返回前一次(参考讲义70页)片外存储器访问时序说明P0P0、、P2P2口作地址和数据总线口作地址和数据总线。
其中其中P0P0口作为地址和数据复口作为地址和数据复用总线,前半部(用总线,前半部(A A段)作地址总线,后半部(段)作地址总线,后半部(B B段段) )作为作为数据总线数据总线外部程序存储器外部程序存储器ROMROM的操作步骤如下:的操作步骤如下: 1 1,单片机必须为其提供完整的(,单片机必须为其提供完整的(1515位)地址信息;位)地址信息; 2 2,,ROMROM芯片的芯片的/CE /CE 端端=0=0,选中该芯片;,选中该芯片; 3 3,在满足上述条件的基础上,当,在满足上述条件的基础上,当ROMROM的的/OE=0/OE=0时(时(B B时间时间段),存储器输出数据的三态门打开,并将与输入地址相段),存储器输出数据的三态门打开,并将与输入地址相对应的存储单元中的指令(数据)向外输出,单片机通过对应的存储单元中的指令(数据)向外输出,单片机通过P0P0口将指令送至口将指令送至CPU CPU 内部74LS37374LS373锁存器锁存器: :将将A A时间段时间段P0P0口输出的低位地址进行保存,口输出的低位地址进行保存,使使ROMROM在在B B时间段仍然可以得到完整的地址信号。
时间段仍然可以得到完整的地址信号转电路图转时序图外部ROM的容量扩展原理(一)如何使用两片如何使用两片32K32K的的ROMROM芯片扩展为芯片扩展为64K64K的存储阵列的存储阵列A15P2口口MCS - 51 P0口口ALE/EA Psen/CE2A14A8A7A0/OE2O0~~O7/CE1A14A8A7A0/OE1O0~~O774LS373由两片32K的ROM构成64K存储阵列与A15的关系表A15A15/CE/CEA14A14~~A8A8P2P2口口A7A7~~A0A0P0P0口口地址范围地址范围ROM1ROM1工作工作状态状态ROM2ROM2工作工作状态状态0 00 000000000000000001111111111111111000000000000000011111111111111110000H0000H~~07FFH07FFH选中选中未选中未选中1 11 100000000000000001111111111111111000000000000000011111111111111118000H 8000H ~~FFFFHFFFFH未选中未选中选中选中外部ROM的容量扩展原理(二)若需要对若需要对2 2片以上的芯片扩展,可以通过译码电路实现。
片以上的芯片扩展,可以通过译码电路实现P2.7P2.6P2.5P2.4P2.0P0口口ALEPsen/CE0A12A8A7 8K××8A0/OE1O0~~O774LS373C y7BA 0 y /CE1A12A8A78K×8A0/OE1O0~~O7/CE7A12A8A78K×8A0/OE1O0~~O7MCS–5174LS138采用LS138译码器实现ROM扩展示意表P2.7P2.7~~~~P2.5P2.5138 138 输出输出输出输出选中选中选中选中 ROMROMP2.4P2.4~~~~P0.0P0.0有效地址范围有效地址范围0 0 00 0 0Y0=0Y0=0第第1 1片片0000H0000H~~1FFFH1FFFH0000H0000H~~1FFFH1FFFH0 0 10 0 1Y1=0Y1=0第第2 2片片0000H0000H~~1FFFH1FFFH2000H2000H~~3FFFH3FFFH0 1 00 1 0Y2=0Y2=0第第3 3片片0000H0000H~~1FFFH1FFFH4000H4000H~~5FFFH5FFFH0 1 10 1 1Y3=0Y3=0第第4 4片片0000H0000H~~1FFFH1FFFH6000H6000H~~7FFFH7FFFH1 0 01 0 0Y4=0Y4=0第第5 5片片0000H0000H~~1FFFH1FFFH8000H8000H~~9FFFH9FFFH1 0 11 0 1Y5=0Y5=0第第6 6片片0000H0000H~~1FFFH1FFFHA000HA000H~~BFFFHBFFFH1 1 01 1 0Y6=0Y6=0第第7 7片片0000H0000H~~1FFFH1FFFHC000HC000H~~DFFFHDFFFH1 1 11 1 1Y7=0Y7=0第第8 8片片0000H0000H~~1FFFH1FFFHE000HE000H~~FFFFHFFFFH小结:1 1,单片机的,单片机的P0P0、、P2P2口作为地址数据总线;口作为地址数据总线;2 2,,P0P0口为数据、地址复用总线,所以必须加入八位锁口为数据、地址复用总线,所以必须加入八位锁存器存器74LS37374LS373来锁存来锁存P0P0口的低八位地址。
口的低八位地址3 3,外接,外接ROMROM是靠是靠MOVCMOVC指令产生的指令产生的PsenPsen信号来打开数信号来打开数据三态门,使据三态门,使ROMROM中的指令通过中的指令通过P0P0口送入单片机内部口送入单片机内部4 4,存储器的容量,存储器的容量M M与其地址线条数与其地址线条数n n的关系:的关系:M=2↑nM=2↑n5 5,当使用两片,当使用两片ROMROM扩展时,可以使用一个反向器实现容扩展时,可以使用一个反向器实现容量的扩展,通过量的扩展,通过ROMROM芯片的芯片的/CE/CE端实现6 6,当使用,当使用2 2片以上的片以上的ROMROM芯片扩展时,就要使用译码器芯片扩展时,就要使用译码器实现存储容量的扩展,译码器的输入与高位地址相连接,实现存储容量的扩展,译码器的输入与高位地址相连接,输出端分别与各输出端分别与各ROMROM芯片的芯片的/CE/CE连接(连接(如图所示如图所示)7 7,当外接,当外接ROMROM的高八位地址线与的高八位地址线与P2P2口高八位线没有完全口高八位线没有完全用足时,要注意外存储的地址重叠问题用足时,要注意外存储的地址重叠问题返回3.2:数据存储器RAM的扩展与程序存储器扩展原理相同,数据存储器的扩展也是使用与程序存储器扩展原理相同,数据存储器的扩展也是使用P0P0、、P2P2口作为地址、数据总线。
口作为地址、数据总线 1 1,当使用,当使用MOVX @RiMOVX @Ri指令时,系统使用指令时,系统使用P0P0口输出地址口输出地址 信号(信号(P2P2口不用);口不用); 2 2,当使用,当使用MOVX @DPTRMOVX @DPTR指令时,指令时,P0P0口输出口输出DPTRDPTR提供提供 的低八位地址信号,的低八位地址信号,P2P2口输出口输出DPTRDPTR提供的高八位地提供的高八位地 址信号 3 3,不论哪种情况,,不论哪种情况,P0P0口都是地址口都是地址/ /数据复用总线,因此数据复用总线,因此 仍要使用仍要使用74LS37374LS373来锁存来锁存P0P0口的地位地址信号口的地位地址信号与与ROMROM扩展不同:使用访问外部扩展不同:使用访问外部RAMRAM指令指令MOVX MOVX 时,在时,在时序中将产生时序中将产生/RD/RD或或/WR/WR信号,因此将此信号与外信号,因此将此信号与外RAMRAM的读的读((/RD) /RD) 、写(、写(/WR/WR)控制端相连接就实现系统对外)控制端相连接就实现系统对外RAMRAM的的读写控制。
读写控制 设外部设外部RAM2000HRAM2000H单元中有一个数单元中有一个数x,x,且且DPTRDPTR中已存有中已存有该数地址该数地址2000H.2000H.则则CPU CPU 执行外部执行外部ROMROM中的指令中的指令: : movx a,@dptr ; movx a,@dptr ;将外将外RAMRAM的的x x送送A AS1S2S6S5S4S3S1S2S6S5S4S3ALEPsenA15-A8(PC)A15-A8(DPH)A7-A0指令A7-A0数据RDP2口P0口选中外部RAM读外部数据存储器RAM的指令时序MCS-51与32K RAM的连接P2.5 P2.4: : P2.0P0.7: : : P0.0ALERDWRCEA12 : :A8A7 O7 : : : : : : A0 O0OE WED7 Q7 D0 Q0CPCP 6264 8K RAMMCS-51/CE = P2.5(A12)思考题:使用使用62646264((8KRAM8KRAM)芯片和)芯片和27642764((8KROM8KROM)芯)芯片组成片组成16K RAM16K RAM和和16KROM16KROM的外存储阵列(逻辑的外存储阵列(逻辑图)。
图) 采用采用74LS13874LS138和和74LS37374LS373实现译码和锁存实现译码和锁存功能根据设计的结果,写出根据设计的结果,写出RAMRAM和和ROMROM的地址范围的地址范围返回3.3:输入、输出口的扩展如果系统使用了外部存储器时,如果系统使用了外部存储器时,P0P0、、P2P2口被外存口被外存储器占用,留给用户的只有储器占用,留给用户的只有P1P1口因此I/OI/O端口的端口的扩展是使用扩展是使用MCS-51MCS-51作为嵌入式控制器进行硬件设作为嵌入式控制器进行硬件设计中经常遇到的问题计中经常遇到的问题: :3.3.1,3.3.1,使用使用82438243扩展扩展I/OI/O端口端口3.3.2,3.3.2,使用使用81558155扩展扩展I/O I/O 端口端口3.3.3,3.3.3,使用使用82558255扩展扩展I/OI/O端口端口3.3.4,3.3.4,使用使用串行口串行口扩展扩展I/OI/O端口端口继续3.3.1:使用8243扩展I/O端口82438243为为4X44X4位的扩展口位的扩展口 P4.0 P4.1P2.0 P4.2 P2.1 P4.3P2.2 P2.3 P5.0 P5.1 P5.2 P5.3 P6.0 P6.1 P6.2 P6.3PROG P7.0/CE P7.1 P7.2 P7.3接单片机P2口口:用于CPU与8243之间传送命令、 数据。
其中:命令码中含口地址(两位)、 操作码(两位)数据为四位PROG:控制端P4~~P7:4X4位具有锁存功能的双向I/O 端口操作码操作码口地址口地址P2.3P2.3P2.2P2.2操作操作P2.1P2.1P2.0P2.0端口端口0 00 0读读0 00 0P4P40 01 1写写0 01 1P5P51 10 0OROR1 10 0P6P61 11 1ANDAND1 11 1P7P78243的时序 P4.0 P4.1P2.0 P4.2 P2.1 P4.3P2.2 P2.3 P5.0 P5.1 P5.2 P5.3 P6.0 P6.1 P6.2 P6.3PROG P7.0/CE P7.1 P7.2 P7.3操作码、口地址数据(4位)PROGP2口口 1,,由高变低时,将P2口的命令(口地址、操作码)信息所存到8243 。
2,由低变高时:a,写操作时:8243将P2口上的数据写入对应的端口;b,读操作时:当操作码一译出,选中的端口的输入缓冲器与P2口接通,等待CPU读走当PROG变高后,结束读操作1282438243应用举例应用举例1 1::使用使用5151的的P2P2口与口与82438243连接,并从连接,并从82438243的的P6P6口读入数据,口读入数据,5151的的P2.6 P2.7 留作输入P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7MCS-51 P4.0 P4.1P2.0 P4.2 P2.1 P4.3P2.2 P2.3 P5.0PROG P5.1/CE P5.2 P5.3 P6.0 P6.1 P6.2 P6.3 P7.0 P7.1 P7.2 P7.3 8243IN8243:MOV A,#11010010B ;控制字MOV P2,A;输出控制字CLR P2.4 ;8243接收操作码MOV A,P2 ;读取P6口数据SETB P2.4 ;PROG=1结束读SETB P2.5 ;关闭8243RET【注意】:1,控制字11010010的含义;2,根据8243的时序,在使PROG变高前单片机必须读入P6口中的数据。
82438243应用举例应用举例2 2::将将R2R2寄存器的低寄存器的低4 4位写到位写到P7P7口 P2.6 P2.7 留作输入P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7 P4.0 P4.1P2.0 P4.2 P2.1 P4.3P2.2 P2.3 P5.0PROG P5.1/CE P5.2 P5.3 P6.0 P6.1 P6.2 P6.3 P7.0 P7.1 P7.2 P7.3OUT:MOV A,#11010111B ;控制字 MOV P2,A ;输出控制字 CLR P2.4 ;8243接收操作码 MOV A,R2 ;读取R2数据 ORL A,#11110000B ;高4位置1低4位不变 ORL P2,#00001111B ;低4位置1高4位不变 ANL P2,A ;A送P2高4位不变 SETB P2.4 ;PROG=1数据写入P7口 SETB P2.5 ;关闭8243 RET【注意】:第1条ORL是保证不影响P2口高4位;第2条ORL指令时保证下面ANL指令能够正确的将低4位数据写入P2口。
返回3.3.2:使用8155扩展I/O端口81558155的简介的简介1 1,,81558155的构成:的构成:2 2,,CPU CPU 对对81558155的控制的控制3 3,,81558155的工作方式的工作方式4 4,,81558155内部定时器的使用内部定时器的使用5 5,,81558155应用与编程举例应用与编程举例继续8155的简介同同82438243一样,一样,81558155、、82558255等芯片都是美国等芯片都是美国IntelIntel公公司为司为80868086系列微机开发出的系列通用可编程系列微机开发出的系列通用可编程I/OI/O接接口芯片81558155不仅可以提供三个并行的不仅可以提供三个并行的I/OI/O端口,在其内部端口,在其内部还集成有还集成有256256个字节的个字节的RAMRAM存储空间、一个存储空间、一个1414位位的定时的定时/ /计数器,因此非常适合与计数器,因此非常适合与MCS-51MCS-51单片机单片机连接实现系统功能的扩展连接实现系统功能的扩展由于由于81558155的特殊性,这里将主要介绍其结构和使的特殊性,这里将主要介绍其结构和使用、编程方法。
用、编程方法返回本节目录1,8155的构成:1 1,,双向数据总线缓冲器:双向数据总线缓冲器:传送传送CPUCPU与与RAMRAM之间的数据之间的数据2 2,,地址锁存器:地址锁存器:用于锁存用于锁存CPUCPU送来得送来得RAMRAM或端口地址或端口地址3 3,,地址译码地址译码(a)(a)和读写控制和读写控制(b)(b):: a,a,接收地址锁存器的低三位地址,确定命令接收地址锁存器的低三位地址,确定命令/ /状态存存器、状态存存器、 定时定时/ /计数器和计数器和A A、、B B、、C C口中的某个工作口中的某个工作 b,b,读写控制用于接收读写控制用于接收/RD/RD或或/WR/WR上的信息实现上的信息实现CPUCPU与与81558155 之间的信息控制之间的信息控制4 4,,256256个字节的个字节的RAMRAM数据存储器数据存储器5 5,,I/OI/O寄存器:寄存器:A,BA,B和和C C双向通用双向通用I/OI/O端口6 6,,命令寄存器:命令寄存器:用来存放用来存放CPUCPU送来得命令字。
送来得命令字7 7,,定时定时/ /计数器:计数器:二进制的二进制的1414位减一计数器,可做分频器位减一计数器,可做分频器8155的内部结构简图I/O寄存器A口口256字节RAM双向数据缓冲器地址锁存器定时计数器(14位)读/写控制器地址译码I/O寄存器B口口I/O寄存器C口口状态命令寄存器AD7-AD0/CEIO/MALE/RD/WRRESTT / INT / OUT8155引脚说明AD7-AD0:AD7-AD0:数据数据/ /地址总线与地址总线与MCS-51MCS-51的的P0P0口连接,分口连接,分 时传送地址和数据信息,是连接两者的通道时传送地址和数据信息,是连接两者的通道I/OI/O口线:口线:PA7-0PA7-0、、PB7-0PB7-0和和PC5-0PC5-0为为81558155的的A A、、B B和和C C口 其中其中A A、、B B口为口为8 8为的通用为的通用I/OI/O口;口; C C口:在口:在“ “通用通用I/OI/O模式模式” ”下作下作I/OI/O口;口; 在在“ “选通选通I/OI/O模式模式” ”下作下作命令命令/ /状态状态口。
口RESTREST、、/CE/CE和和IO/MIO/M : :复位、片选和复位、片选和I/OI/O端口端口/RAM/RAM选择线/RD/RD、、/WR/WR: : 读写控制线读写控制线ALEALE:8155:8155的地址锁存信号的地址锁存信号ALE=1ALE=1时,信号进入地址锁时,信号进入地址锁 存器,存器,ALE=0ALE=0时,锁存器处于时,锁存器处于“ “封锁封锁” ”状态,将状态,将ALE=1ALE=1 时的地址锁存到地址锁存器中时的地址锁存到地址锁存器中T/INT/IN、、T/OUTT/OUT: : 计数器的脉冲输入线和输出线,输出波形计数器的脉冲输入线和输出线,输出波形 与工作方式有关与工作方式有关 返回本节目录2,CPU 对8155的控制81558155的的A A、、B B和和C C口的数据传送是由口的数据传送是由CPUCPU发出的命发出的命令字控制的。
令字控制的 ((1 1))81558155内部的内部的7 7个寄存器地址个寄存器地址/CE/CEIO/MIO/MA7-A3A7-A3A2A1A0A2A1A0所选端口所选端口0 01 1XXXXXXXXXX000000命令命令 / / 状态寄存器状态寄存器0 01 1XXXXXXXXXX001001A A口口0 01 1XXXXXXXXXX010010B B口口0 01 1XXXXXXXXXX011011C C口口0 01 1XXXXXXXXXX100100计数器低计数器低8 8位位0 01 1XXXXXXXXXX101101计数器高计数器高8 8位位0 00 0XXXXXXXXXXXXXXXXRAMRAM单元单元(2)8155的命令字PBPB 、、PA:PA:A A、、B B口工作方式:口工作方式:0 0 输入;输入;1 1 输出PC2PC2、、 PC1: PC1: C C口工作方式:口工作方式:00 00 ALT1ALT1(输入)(输入) 01 01 ALT2ALT2(输出)(输出) 10 10 ALT3ALT3(选通方式)(选通方式) 11 11 ALT4ALT4(选通方式)(选通方式)IEBIEB IEA: IEA: A A、、B B口中断允许位:口中断允许位:0 0 禁止中断;禁止中断;1 1 允许中断。
允许中断TM2 TM1:TM2 TM1:计数器工作方式:计数器工作方式:00 00 无操作;无操作;01 01 停止计数;停止计数; 10 10 计满后停止;计满后停止;1111开始计数开始计数TMTM2 2TMTM1 1IEBIEBIEAIEAPC2PC2 PC1PC1PBPBPAPA上一次(3)8155的状态字─表征8155的状态INTRaINTRa:: A A中断请求标志中断请求标志 0 0 无中断;无中断;1 1 有中断ABFABF:: A A口缓冲器状态口缓冲器状态 0 0 空;空; 1 1 满INTEaINTEa:: A A口中断允许位口中断允许位 0 0 禁止;禁止; 1 1 允许INTRbINTRb:: B B中断请求标志中断请求标志 0 0 无中断;无中断;1 1 有中断。
有中断BBFBBF:: B B口缓冲器状态口缓冲器状态 0 0 空;空; 1 1 满INTEbINTEb:: B B口中断允许位口中断允许位 0 0 禁止;禁止; 1 1 允许TIMER: TIMER: 定时器中断定时器中断0 0 读状态字后或硬件复位后读状态字后或硬件复位后 1 1 有定时器中断时有定时器中断时X XTIMERTIMERINTEbINTEbBBFBBFINTRbINTRbINTEaINTEaABFABFINTRaINTRa状态字存在于8155的状态寄存器中,其地址与命令口地址一样都是000B,可以用 MOVX A, @ Ri 指令来读取8155的状态状态字寄存器与命令寄存器是靠输入、输出来自动区分的返回本节目录3,8155的工作方式((1 1)存储方式:)存储方式:若若IO/M=0IO/M=0、、CE=0CE=0时,时,81558155处于存储器处于存储器 模式,此时单片机通过模式,此时单片机通过AD7-AD0AD7-AD0与与81558155 的的RAMRAM单元进行读写数据。
单元进行读写数据2 2))I/OI/O方式:方式:若若IO/M=1,CE=0IO/M=1,CE=0时,时,81558155处于处于I/OI/O状态 a,a,通用通用I/OI/O方式:方式:A,B,CA,B,C都是通用的数据端口;都是通用的数据端口; b,b,选通选通I/OI/O方式:方式:A,BA,B为通用为通用I/OI/O方式,方式,C C口作口作 为为A,BA,B口的联络控制线口的联络控制线 选通方式是一种较为特殊的数据传输方式,它不同于选通方式是一种较为特殊的数据传输方式,它不同于一般并行口的一般并行口的I/OI/O操作它主要用于高速操作它主要用于高速CPUCPU与低速外设与低速外设之间的数据交换。
这里只作基本介绍之间的数据交换这里只作基本介绍C口在四种工作方式下的各位定义C C口口通用通用I/OI/O方式方式选通选通I/OI/O方式方式ALT1ALT1ALT2ALT2ALT3ALT3ALT4ALT4PC0PC0输入输入输出输出A INTRA INTR((A A口中断)口中断)A INTRA INTR((A A口中断)口中断)PC1PC1输入输入输出输出ABF ABF ((A A口缓冲器满)口缓冲器满) ABF ABF ((A A口缓冲器满)口缓冲器满)PC2PC2输入输入输出输出ASTBASTB((A A口选通)口选通)ASTBASTB((A A口选通)口选通)PC3PC3输入输入输出输出输出输出B INTRB INTR((B B口中断)口中断)PC4PC4输入输入输出输出输出输出BBF BBF ((B B口缓冲器满)口缓冲器满)PC5PC5输入输入输出输出输出输出BSTBBSTB((B B口选通)口选通)选通I/O数据输入操作当外设准备好数据并送当外设准备好数据并送PAPA口时,口时,发出低电平的选通信号发出低电平的选通信号ASTB;ASTB;81558155接收到接收到ASTBASTB后:后:1 1,将,将PAPA上的数据装入上的数据装入A A口寄存器口寄存器2 2,使,使A A口数据满口数据满ABFABF置位以通知置位以通知外设数据已收到。
外设数据已收到81558155在在ASTBASTB的上升沿使的上升沿使PC0PC0的的A INTRA INTR标志置位,以通知单标志置位,以通知单片机数据已收到片机数据已收到CPUCPU响应中断执行服务程序,响应中断执行服务程序,当执行到从当执行到从A A口读取输入的数口读取输入的数据(据(MOVXMOVX)时,)时,/RD/RD的上升沿的上升沿将将PC0PC0的的INTEAINTEA清零并使清零并使PC1PC1的的ABFABF变低变低, ,通知外设输入下一通知外设输入下一个数据 P0INT0 PAPD0-7/RD PC1 PC2 PC0D7- 0 C口为ALT3模式PC0:A口中断A INTR标志输出,送单片机;PC1:A口缓冲器满ABF标志输出,送外设PC2:A口选通输入ASTB,ASTBABFMCS-51 8155 外设A INTR选通I/O数据输出操作CPUCPU执行执行MOVXMOVX指令将数据送指令将数据送PAPA口,口,81558155收到数据后收到数据后ABFABF变变高通知外设数据已到达高通知外设数据已到达PAPA口。
口外设接收到外设接收到ABFABF的高电平后:的高电平后: 1 1,从,从D7-0D7-0上接收数据;上接收数据; 2 2,使,使ASTBASTB变低,通知变低,通知81558155外外 设已接收到数据设已接收到数据当当81558155监测到监测到ASTBASTB回到高电回到高电平时,使平时,使PC0DPC0D的的A INTRA INTR变为变为高电平,向单片机申请中断高电平,向单片机申请中断单片机在中断服务程序中巴下单片机在中断服务程序中巴下一个数据送到一个数据送到A A口,进行下一口,进行下一个数据的输出个数据的输出 P0INT0 PAPD0-7 PC1 PC2 PC0D7- 0 ASTBABFMCS-51 8155 外设C口为ALT3模式,控制字:00011001BPC0:A口中断A INTR标志输出,送单片机;PC1:A口缓冲器满ABF标志输出,送外设PC2:A口选通输入ASTB,A INTR4,8155内部定时器的使用严格的将,严格的将,81558155的定时器应当称为计数器,因为定时器的计的定时器应当称为计数器,因为定时器的计数脉冲来自外部的数脉冲来自外部的T/INT/IN引脚的输入脉冲引脚的输入脉冲, ,所以所以81558155的定时器的定时器非常适合做非常适合做1/n1/n的分频器的分频器( (如图)。
如图)定时器共有定时器共有4 4中工作方式中工作方式, ,由计数器高由计数器高8 8位中的最高两位位中的最高两位M2M2、、M1M1来确定不同的工作方式对应着不同的来确定不同的工作方式对应着不同的T/OUTT/OUT波形8155 T/INT/OUT由8155作1/5分频器MCS-51控制字8155内部定时器的4种工作方式1 1,,M1M2=00M1M2=00时时: :定时器在计数的后半周期在定时器在计数的后半周期在T/OUTT/OUT线上输线上输出低电平,如果计数初值为奇数,则高电平持续时间比低出低电平,如果计数初值为奇数,则高电平持续时间比低电平多一个计数脉冲;电平多一个计数脉冲;2 2,, M2M1=01M2M1=01时时: :同上一方式,差别为当计数器同上一方式,差别为当计数器“ “减减1”1”到到 “ “全全0”0”时,自动装入计数初值,所以在时,自动装入计数初值,所以在T/OUTT/OUT上为连续波形;上为连续波形;3 3,, M2M1=10M2M1=10时时: :当计数器当计数器“ “减减1”1”到到 “ “全全0”0”时,在时,在T/OUTT/OUT线线上输出一个单脉冲;上输出一个单脉冲;4 4,, M2M1=11M2M1=11时时: :当计数器当计数器“ “减减1”1”到到 “ “全全0”0”时,在时,在T/OUTT/OUT线线上输出一个单脉冲,且自动重装计数初值,所以在上输出一个单脉冲,且自动重装计数初值,所以在T/OUTT/OUT线上输出连续的波形。
线上输出连续的波形控制字8155定时器工作方式与T/OUT波形M2M2M1M1T13T13T12T12T11T11T10T10T9T9T8T8T7T7T6T6T5T5T4T4T3T3T2T2T1T1T0T0计数器高8位(101B)计数器低8位(100B)1个计数周期T T/INM2M1=00时 T/OUTM2M1=01时 T/OUTM2M1=10时 T/OUTM2M1=11时 T/OUT思考题:哪种工作方式可以使8155完成1/n分频器的功能? 这种分频器与普通数字电路中的“计数器分频”有何不同 ?(返回)5,8155应用与编程举例充分利用充分利用81558155的内部资源可以简化单片机系统的设计的内部资源可以简化单片机系统的设计无论是无论是81558155或其它外围电路与或其它外围电路与MCS-51MCS-51的连接可分为两种的连接可分为两种方式:最小化连接;方式:最小化连接; 按照外部按照外部RAMRAM地址统一编址地址统一编址 前者适用于较小的系统,后者用于较复杂的系统。
这里采前者适用于较小的系统,后者用于较复杂的系统这里采用前者,目的是使大家掌握用前者,目的是使大家掌握81558155最基本的编程方法最基本的编程方法81558155在在I/OI/O工作方式中我们选择工作方式中我们选择“ “通用通用I/OI/O方式方式” ”为例返回本节目录8155与MCS-51的最小化连接P2.7P2.0P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0ALE/RD/WR/CEIO/M PAAD7AD6AD5 PBAD4AD3AD2 AD1 PCAD0 ALE T/OUT/RD/WR T/INMCS-51 8155P2.7-P2.0P2.7-P2.0P0.7-P0.0P0.7-P0.0地址地址选择选择011111100111111000000000000000007E00H7E00HRAM’256RAM’256存储单元存储单元011111100111111011111111111111117EFFH7EFFH011111110111111100000000000000007F00H7F00H命令寄存器命令寄存器011111110111111100000000000010017F01H7F01HPAPA口口011111110111111100000000000100107F02H7F02HPBPB口口011111110111111100000000000110117F03H7F03HPCPC口口011111110111111100000000001001007F04H7F04H计数器低计数器低8 8位位011111110111111100000000001011017F05H7F05H计数器高计数器高8 8位位最小系统对8155内部各寄存器的地址分配设定:设定:PAPA口输入口输入,PB,PB口输出口输出, ,输入脉冲进行输入脉冲进行1616分频分频。
ORG 1000HORG 1000HSTRAT:STRAT: MOV DPTR,#7F04HMOV DPTR,#7F04H; ;指向定时器低指向定时器低8 8位位MOV A,#10HMOV A,#10H; ;计数初值计数初值1616MOVX @DPTR,AMOVX @DPTR,A; ;装入初值装入初值INC DPTRINC DPTR; ;指向定时器高指向定时器高8 8位位MOV A,#40HMOV A,#40H; ;设定为连续方波设定为连续方波MOVX @DPTR,AMOVX @DPTR,A; ;装入定时器高装入定时器高8 8位位MOV DPTR,#7F00HMOV DPTR,#7F00H; ;指向命令口指向命令口MOV A, # 0C2HMOV A, # 0C2H; ;控制字:(控制字:(A A输入输入B B输出启动定时器)输出启动定时器)MOVX @DPTR,AMOVX @DPTR,A; ;装入控制字并启动定时器装入控制字并启动定时器INPUT:INPUT: MOV DPTR,# 7F01HMOV DPTR,# 7F01H; ;指向指向PAPA口口MOVX A,@DPTRMOVX A,@DPTR; ;从从PAPA口输入数据口输入数据OUT:OUT:MOV DPTR,# 7F02HMOV DPTR,# 7F02H; ;指向指向PBPB口口MOVX @DPTR,AMOVX @DPTR,A; ;从从PBPB口输出数据口输出数据ENDEND【【思考题思考题】】:如何将:如何将PAPA口输入的数据存到口输入的数据存到81558155内部内部RAMRAM的某一单元?的某一单元?控制字MOVX @DPTR,AMOVX @DPTR,A或MOVX A,@DPTRMOVX A,@DPTR的时序S1S2S6S5S4S3S1S2S6S5S4S3ALEPsenA15-A8(PC)A15-A8((DPH))A7-A0指令((DPL))数据RDP2口P0口选中外部RAM第一个阶段:取 MOVX 指令第二阶段:执行MOVX(从外部读取数据)3.3.3:使用8255扩展I/O端口1 1,,82558255的内部结构和引脚功能的内部结构和引脚功能2 2,,82558255的控制字和状态字的控制字和状态字 (一)(一)““方式控制字方式控制字”” (二)(二)““C C口单一置位复位控制字口单一置位复位控制字”” (三)(三)8255A8255A的状态字的状态字 1 1,,8255A8255A在模式在模式1 1时的状态字时的状态字 2 2,,8255A8255A在模式在模式2 2时的状态字时的状态字3 3,,82558255的工作模式的工作模式4 4,,8255A8255A应用举例应用举例继续8255的内部结构图A口C口高四位B口C口低四位A组控制器B组控制器数缓 冲据器读制写逻控辑PA7-0PB7-0PC7-4PC3-0D7-D0/RD/WRA0A1RESE/CS返回前一次1,8255的内部结构和引脚功能(一):内部结构(一):内部结构: :由四部分组成。
由四部分组成1 1,,A A口,口,B B口和口和C C口;口; 2 2,,A A组控制器,组控制器,B B组控制器;组控制器;3 3,数据缓冲器;,数据缓冲器; 4 4,读写控制器读写控制器A A口8 8位数据输出缓冲位数据输出缓冲/ /锁存,输入缓冲锁存,输入缓冲/ /锁存的锁存的I/OI/O端口 B,CB,C口8 8位数据输出缓冲位数据输出缓冲/ /锁存,输入缓冲的锁存,输入缓冲的I/OI/O端口A A组控制器,组控制器,B B组控制器接收组控制器接收CPUCPU发送的控制字并确定发送的控制字并确定82558255的工作模式的工作模式, ,其中其中A A组控制器控制组控制器控制A A口和口和C C口的高口的高4 4位位; ; B B组控制器控制组控制器控制B B口和口和C C口的低口的低4 4位数据缓冲器双向数据缓冲器双向8 8位,用于传送位,用于传送CPUCPU与与82558255之间的数据之间的数据和控制字。
和控制字读写控制逻辑接收读写控制逻辑接收CPUCPU送来的读(送来的读(/RD/RD)), ,写(写(/WR/WR)和)和片选(片选(/CS/CS)等信号,用于对)等信号,用于对82558255的读写控制的读写控制(二)引脚功能:(二)引脚功能:4040脚脚DIPDIP封装1 1,数据总线,数据总线D7D7~~D0D0, ,与内部数据缓冲器连接,用来传送与内部数据缓冲器连接,用来传送CPUCPU与与 82558255之间的数据字、控制字之间的数据字、控制字2 2,控制总线:,控制总线:RESETRESET: :复位线,高电平有效;复位线,高电平有效; /CS/CS: :片选信号,低电平有效;片选信号,低电平有效; /RD/RD, ,/WR/WR读写命令线读写命令线: : 低电平有效;低电平有效; A0A0, ,A1A1: :地址输入线地址输入线, ,用于选中用于选中A A口口,B,B口口,C,C口和控制寄存器。
口和控制寄存器3 3,并行,并行I/OI/O总线(总线(2424条):条): PA7PA7~~PA0PA0: :双向双向I/OI/O总线,可由控制字设定为输入、输出或总线,可由控制字设定为输入、输出或 输入输出双向方式;输入输出双向方式; PB7PB7~~PB0:PB0:双向双向I/OI/O总线总线, ,可由控制字设定为输入或输出方式;可由控制字设定为输入或输出方式; PC7PC7~~PC0:PC0:双向双向I/OI/O总线总线, ,可以设定为传送可以设定为传送I/OI/O数据(模式数据(模式0 0)) 或控制或控制/ /状态信息(模式状态信息(模式1 1,,2 2););4 4,电源线:,电源线:VccVcc和和GND.GND.8255控制信号功能、地址表(设/CS=C0H)/CS/CS((1100001100000000))A1 A0A1 A0/RD/RD/WR/WR 端口地址端口地址端口端口功能功能0 00 00 00 01 1C0HC0HA A口口读读A A口口0 00 00 01 10 0C0HC0H写写A A口口0 00 10 10 01 1C1HC1HB B口口读读B B口口0 00 10 11 10 0C1HC1H写写B B口口0 01 01 00 01 1C2HC2HC C口口读读C C口口0 01 01 01 10 0C2HC2H写写C C口口0 01 11 11 10 0C3HC3H控制口控制口写控制字写控制字1 1X XX XX XX XX XX X未选中未选中返回本节目录转8255框图2,8255的控制字和状态字82558255有两个控制字:有两个控制字:“ “方式控制字方式控制字” ”和和“ “C C口置复位控制字口置复位控制字” ”。
两两者以控制字的者以控制字的D7=1D7=1或或D7=0D7=0来区别一)(一)““方式控制字方式控制字””: :用于确定三个端口的输入或输出等;用于确定三个端口的输入或输出等;D7:D7:控制字标志位控制字标志位1=1表明为表明为“ “方式控制字方式控制字” ”,=0,=0表明为表明为C C口置复位控制口置复位控制字;字;D6,D5: AD6,D5: A组方式选择位组方式选择位0000:模式:模式0 0,,0101:模式:模式1 1,,1X1X:模式:模式2 2D4: AD4: A口输入口输入/ /输出控制位输出控制位0=0时时A A口用于输出口用于输出;=1;=1时时A A口用于输入口用于输入D3: CD3: C口高口高4 4位输入位输入/ /输出控制位输出控制位0=0时时C C口高口高4 4位用于输出位用于输出;=0;=0用于输入用于输入D2: BD2: B组方式选择位组方式选择位D2=0D2=0时,时,B B组设定为模式组设定为模式0 0;;=1=1时时, , 设定为模式设定为模式1 1D1: BD1: B口输入口输入/ /输出控制输出控制D1=0D1=0时,时,B B口用于输出;口用于输出;=1=1时时,B,B口用于输入。
口用于输入D0: CD0: C口低口低4 4位输入位输入/ /输出控制输出控制0=0时用于输出;时用于输出;=1=1时,用于输入时,用于输入D7=1D7=1D6D6D5D5D4D4D3D3D2D2D1D1D0D0标志位 A组方式选择 A口、C口高4 B组方式 B口、C口低4 返回前次(二)(二)““C C口单一置位复位控制字口单一置位复位控制字””: : 使使C C口各位在口各位在模式模式1 1,,2 2时时单独置位或复位,以实现某单独置位或复位,以实现某些控制功能如:设置或清除些控制功能如:设置或清除A A口、口、B B口的中断允许位等口的中断允许位等D7D7: :控制字标志位控制字标志位0=0表明为表明为“ “C C口单一支复位控制字口单一支复位控制字” ”D6-D4: D6-D4: 不用D3D3~~D1: CD1: C口选择位口选择位三位二进制数(三位二进制数(000000~~111111),确定),确定C C口中口中8 8个位(个位(D7D7~~D0D0)中的某一位中的某一位D0: D0: 置复位控制位置复位控制位D0=0D0=0时,复位;时,复位;D0=1D0=1时,置位。
时,置位D7=0D7=0X XX XX XD3D3D2D2D1D1D0D0标志位=0 D6-D4位不用 C口位选择位 置复位控制位举例若若82558255的控制寄存器选口地址为的控制寄存器选口地址为FBH,FBH,试写出令试写出令PC3PC3先置先置“ “1”1”,后置,后置“ “0”0”的程序解解】】::MOVR0,#0FBHMOVR0,#0FBH; ;设定设定82558255的控制口的控制口MOVA,#07HMOVA,#07H; ;令令PC3PC3置置““1 1””的控制字送的控制字送A AMOVX@R0,AMOVX@R0,A; ;令令PC3=1PC3=1MOVA,#06HMOVA,#06H;PC3;PC3置置““0 0””的控制字送的控制字送A AMOVX@R0,AMOVX@R0,A; ;令令PC3PC3置置““0 0””: :ENDENDD7=0D7=0X XX XX XD3D3D2D2D1D1D0D0标志位=0 D6-D4位不用 C口位选择位 置复位控制位(三)(三)8255A8255A的状态字的状态字当当8255A8255A设定为设定为模式模式1 1、模式、模式2 2时,可以通过读时,可以通过读C C口获得相应口获得相应的的“ “状态字状态字” ”,以便了解,以便了解8255A8255A的工作状态。
的工作状态1 1,,8255A8255A在模式在模式1 1时的状态字:(时的状态字:( I/OI/O为引脚的电平信号)为引脚的电平信号)D7D7D6D6D5D5D4D4D3D3D2D2D1D1D0D0C口各位I/OI/OI/OI/O IBFaIBFaINTEaINTEaINTRaINTRa输入口用时/OFBa/OFBaINIEaINIEaI/OI/OI/OI/OINTRaINTRa输出口用时INTEbINTEbIBFbIBFbINTRbINTRb输入口用时INTEbINTEb/OBFb/OBFbINTRbINTRb输出口用时返回前一次PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC02 2,,8255A8255A在模式在模式2 2时的状态字时的状态字/OBFa:/OBFa:A A口口“ “输出缓冲器满输出缓冲器满” ”标志INTE1:INTE1:A A口与输出相关的口与输出相关的中断允许中断允许位,软件置位。
位,软件置位IBFa:IBFa:A A口口“ “输入缓冲器满输入缓冲器满” ”标志INTE2:INTE2:A A口与输入相关的口与输入相关的中断允许中断允许位,软件置位位,软件置位INTRa:INTRa:A A口口中断请求中断请求信号,高电平有效信号,高电平有效INTEb:INTEb:B B口口中断允许中断允许位,软件置位位,软件置位IBFb:BIBFb:B口口“ “输入缓冲器满输入缓冲器满” ”标志INTRb:BINTRb:B口中断请求信号,高电平有效口中断请求信号,高电平有效/OBFa/OBFaINTE1INTE1IBFaIBFaINTE2INTE2INTRaINTRaINTEbINTEbIBFbIBFbINTRbINTRbC口各位: D7 D6 D5 D4 D3 D2 D1 D0返回上一次A组模式2(输入、输出) B组模式1 输出(或输入)3,8255的工作模式8255A8255A有三种工作模式:模式有三种工作模式:模式0 0,模式,模式1 1,和模式,和模式2 2。
用户用户可以通过可以通过“ “8255A8255A方式控制字方式控制字” ”来设定所需的工作模式来设定所需的工作模式1 1)模式)模式0: 0: 基本的输入基本的输入/ /输出方式输出方式 ((2 2)模式)模式1: 1: 选通输入、选通输出方式选通输入、选通输出方式 A A口、口、B B口作为输入或输出,口作为输入或输出,C C口做联络线口做联络线((3 3))模式模式2:2: A A口的双向选通(输入口的双向选通(输入/ /输出)方式输出)方式D7=1D7=1D6D6D5D5D4D4D3D3D2D2D1D1D0D0标志位 A组方式选择 A口、C口高4 B组方式 B口、C口低4 (1)模式0: 基本的输入/输出方式A A口、口、B B口和口和C C口均可设定为此种模式口均可设定为此种模式例如例如】】:设定:设定A A口和口和C C口的高口的高4 4位为模式位为模式0 0的输出方式,的输出方式,B B口口和和C C口的低口的低4 4位为模式位为模式0 0的输入方式的输入方式MOV R0,#0FBHMOV R0,#0FBH; ;控制寄存器地址送控制寄存器地址送R0R0MOV A,#MOV A,#1 100000000011011B B; ;方式控制字方式控制字83H83H送送A AMOV @R0,AMOV @R0,A; ;控制字控制字83H83H送控制寄存器送控制寄存器在模式在模式0 0时,时,CPUCPU可以对可以对8255A8255A无条件的进行无条件的进行I/OI/O数据传送,数据传送,数据可以在数据可以在8255A8255A对应的锁存器中锁存。
同样,外设的对应的锁存器中锁存同样,外设的I/OI/O数据同样可以送到各端口得到锁存或缓冲也可以将某些数据同样可以送到各端口得到锁存或缓冲也可以将某些位设定为外设的状态输入位,位设定为外设的状态输入位,CPUCPU通过查询状态与外设进通过查询状态与外设进行异步行异步I/OI/O数据传送数据传送转控制字(2)模式1: 选通输入、选通输出方式A A口、口、B B口均可独立的设置为这种工作模式口均可独立的设置为这种工作模式在这种模式下,在这种模式下,A A口、口、B B口通常用于传送与它们相连外设口通常用于传送与它们相连外设的的I/OI/O数据而此时,数据而此时,C C口作为口作为A A口、口、B B口与外设之间的联口与外设之间的联络握手信号,可以实现络握手信号,可以实现CPUCPU与外设之间以与外设之间以“ “中断中断” ”的方式的方式进行异步进行异步I/OI/O数据传送数据传送D7=1D7=10 01 1D4D4D3D3D2D2D1D1D0D0标志位 A组方式选择 A口、C口高4 B组方式 B口、C口低4 转8255逻辑图模式1下C口各位定义如下C C口各位口各位模式模式1 1模式模式2 2输入方式输入方式输出方式输出方式双向双向I/OI/O方式方式PC7PC7I/OI/O/OBFa/OBFa/OBFa/OBFaPC6PC6I/OI/O/ACKa/ACKa/ACKa/ACKaPC5PC5IBFaIBFaI/OI/OIBFaIBFaPC4PC4/STBa/STBaI/OI/O/STBa/STBaPC3PC3INTRaINTRaINTRaINTRaINTRaINTRaPC2PC2STBbSTBb/ACKb/ACKb由由B B口模式决定口模式决定PC1PC1IBFbIBFb/OBFb/OBFb由由B B口模式决定口模式决定PC0PC0INTRbINTRbINTRbINTRb由由B B口模式决定口模式决定INTR:INTR:8255A8255A发出的中断请求信号,经反相后送单片机。
发出的中断请求信号,经反相后送单片机IBF:IBF:8255A8255A发出发出“ “输入缓冲器满输入缓冲器满” ”信号/OBF:/OBF:输出缓冲器满信号输出缓冲器满信号/STB:/STB:外设发出的外设发出的“ “选通信号选通信号” ”,用于,用于8255A8255A的数据锁存用的数据锁存用 /ACK:/ACK:外设发出通知外设发出通知8255A8255A的的“ “已接收到数据已接收到数据” ” 的应答信号的应答信号(1)8255的模式1:选通输入方式(A口)1 1,当外设输入数据到,当外设输入数据到PAPA口时口时, , 自动的向自动的向/STBa/STBa发出一个低电平选通信号发出一个低电平选通信号; ;2 2,,8255A8255A收到收到/STBa/STBa上的负脉冲后作两件事上的负脉冲后作两件事: : 一是将数据存入一是将数据存入A A口输入缓冲口输入缓冲/ /锁存器中;锁存器中; 二是输入二是输入“ “缓冲器满缓冲器满” ”的的IBFaIBFa高电平信号,通知外设已收到数据高电平信号,通知外设已收到数据。
3 3,,8255A8255A检测到检测到/STBa/STBa变为高电时,若变为高电时,若QibfaQibfa高电平,高电平,QintraQintra高电平时,将高电平时,将INTRaINTRa变高向变高向CPUCPU申请中断(申请中断(QintraQintra可由用户对可由用户对PC4PC4进行单一置复位控进行单一置复位控制字控制,参见制字控制,参见模式一时的状态字模式一时的状态字)4 4,,CPUCPU响应中断后,从响应中断后,从A A口读取数据,并在读走数据后口读取数据,并在读走数据后8255A8255A撤掉撤掉INTRaINTRa信信号,并使号,并使/STBa/STBa变低通知外设送下一个字节的数据变低通知外设送下一个字节的数据P08031 /INT0D7-D0 PAPC4PC5PC3D7-D0输入设备INTEa/STBaIBFaINTRa12转符号说明(2)8255的模式1:选通输出方式(B口)P08031 /INT0D7-D0 PBPC1PC2PC0D7-D0输入设备INTEb/OBFb/ACKbINTRb131 1,,CPUCPU通过通过 MOVX @Ri ,AMOVX @Ri ,A 指令将数据送到指令将数据送到B B口输出锁存器,口输出锁存器,8255A8255A收收到数据后便令到数据后便令“ “输出缓冲器满输出缓冲器满” ”/OBFb/OBFb变为低电平变为低电平, , 通知外设准备接收。
通知外设准备接收2 2,外设接到,外设接到/OBFb/OBFb的低电平后作两件事情:的低电平后作两件事情: 一,从一,从PBPB上取走数据;二,使上取走数据;二,使/ACKb/ACKb线变低,通知线变低,通知8255A:8255A:外设已收到外设已收到数据3 3,,8255A8255A接收到接收到/ACKb/ACKb线变低后,就对线变低后,就对/OBFb /OBFb ,,/ACKb /ACKb 和和QintebQinteb的状态进的状态进行检测,当它们皆为行检测,当它们皆为“ “1”1”时,时,INTRbINTRb变为高电平向变为高电平向CPUCPU发终端申请发终端申请4 4,,CPUCPU响应中断后,通过中断服务程序将下一个数据送到响应中断后,通过中断服务程序将下一个数据送到8255A8255A的的B B口,口,同时撤掉同时撤掉INTRbINTRb信号2模式一时的状态字模式一时的状态字(3)模式2: A口的双向(输入/输出)方式只有只有A A口具有模式口具有模式2 2 方式此时,方式此时,PAPA口为双向口为双向I/OI/O总线1 1,当,当PAPA作输入口时作输入口时, ,由由/STBa/STBa和和IBFaIBFa信号控制信号控制, , 过程同模式过程同模式1 1的输入操作。
的输入操作2 2,当,当PAPA作输出口时作输出口时, ,由由/OBFa/OBFa和和/ACKa/ACKa控制控制, ,工作过程同模式工作过程同模式1 1的输出操作的输出操作模式模式2 2 非常适应像终端一类的外设,如键盘、显示器等设备非常适应像终端一类的外设,如键盘、显示器等设备P08031 /INT0D7-D0 PAD7-D0输入设备PC7INTE1/OBFa/ACKaINTRaPC6PC4PC5PC3IBFa/STBa+INTE2返回本节目录模式2 状态字4,8255A应用举例(方式0)/RD/WRP0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0ALE89C51 D7 Q7D6 Q6D5 Q5D4 Q4D3 Q3D2 Q2D1 Q1D0 Q074LS373G /E/RD/WRRESET/CS PC口口 8255AA1A0 PB口口D7D6D5D4D3D2 PA口口D1D0设8255A工作在方式0,且A口输入,B、C口输出。
/CS=FF7XHA口:FF7CHB口:FF7DH,C口:FF7EH,控制口:FF7FH程序清单程序清单ORG 0100HORG 0100HSTART:START: MOV A,#90HMOV A,#90H; ;方式方式0 0,,A A口输入,口输入,B B口、口、C C口输出口输出MOV DPTR,#0FF7FHMOV DPTR,#0FF7FH;8255A;8255A控制口地址送指针控制口地址送指针MOVX @DPTR,AMOVX @DPTR,A; ;控制字送控制字送8255A8255A控制寄存器控制寄存器MOV DPTR,#0FF7CMOV DPTR,#0FF7C;A;A口地址送指针口地址送指针MOVX A,@DPTRMOVX A,@DPTR; ;从从A A口输入数据到口输入数据到A AMOV DPTR,#0FF7DHMOV DPTR,#0FF7DH; B; B口地址送指针口地址送指针MOV A,DATA1MOV A,DATA1; ;从内存从内存DATA1DATA1单元中取数单元中取数X1X1到到A AMOVX @DPTR,AMOVX @DPTR,A; ;数据从数据从B B口输出口输出MOV DPTR,#0FF7EHMOV DPTR,#0FF7EH; C; C口地址送指针口地址送指针MOV A,DATA2MOV A,DATA2; ;从内存从内存DATA2DATA2单元中取数单元中取数X2X2到到A AMOVX @DPTR,AMOVX @DPTR,A; ;数据从数据从C C口输出口输出1 10 00 01 10 00 00 00 0标志位 A组方式选择 A口、C口高4 B组方式 B口、C口低4 返回本节目录3.3.4,使用串行口扩展I/O端口在在MCS-51MCS-51单片机串行口的单片机串行口的4 4种工作模式中种工作模式中模式模式0 0 (同步(同步移位模式)可以用来实现系统并行移位模式)可以用来实现系统并行I/OI/O端口的扩展。
端口的扩展使用这种方式的特点:使用这种方式的特点:1.1.扩展扩展I/OI/O端口数量可以不受限制(端口数量可以不受限制(N*8N*8位);位);2.2.扩展端口与单片机之间的连线少(扩展端口与单片机之间的连线少(2 2 ~~ 3 3条);条);3.3.扩展口与单片机之间的数据交换时间较长;扩展口与单片机之间的数据交换时间较长;4.4.需要使用外部的需要使用外部的“ “并入串出并入串出” ” 或或“ “串入并出串入并出” ” 移位寄存移位寄存器MCS-51 RXDTXD移位寄存器移位寄存器同步移位脉冲由MCS-51的串口与两个8位移位寄存器(74LS164)构成的16位并行输出口数据线串行口0模式特点:特点:1.1.同步移位方式同步移位方式8 8位数据移位,低位在先;位数据移位,低位在先;2.2.波特率固定为波特率固定为fosc/12fosc/12;;3.3.数据由数据由RXDRXD((P3.0P3.0)出入,同步移位脉冲由)出入,同步移位脉冲由TXDTXD发出与串行口模式与串行口模式0 0相关的寄存器相关的寄存器1.1.SBUFSBUF用来装载接收或待传送数据的用来装载接收或待传送数据的缓冲器缓冲器;;2.2.SCONSCON。
设定工作模式设定工作模式, ,存放相关标志的串口存放相关标志的串口控制寄存器控制寄存器设定串口模式:设定串口模式:00000 00 000000000B B 模式模式0 0 时发送机的控制字;时发送机的控制字; 00000 01 100000000B B 模式模式0 0 时接收机的控制字时接收机的控制字注意注意】】: :在接收或发送前必须将对应的标志在接收或发送前必须将对应的标志RIRI或或TITI清零!清零!只要只要REN=1REN=1便开始启动接收便开始启动接收SM0SM0SM1SM1SM2SM2RENRENTB8TB8RB8RB8TITIRIRI使用2片74LS165构成的16位输入扩展口MCS-51P3.0P3.1P1.0 H G F E D C B AQH 74LS165 SIN S/ L CLK H G F E D C B AQH 74LS165 SIN S/ L CLK RXDTXD16位并行I/O端口 74LS165: A~H:8位并行数据输入端;并入串出移位寄存器 SIN: 串行数据输入端; QH: 串行数据输出端; S/ L: =0时锁存并行数据,=1时允许串行移位。
编程举例:读入读入2020个字节的数据并送入内部个字节的数据并送入内部RAMRAM单元单元MOV R7,#14HMOV R7,#14H; ;字节数字节数2020送计数器送计数器R7R7MOV R0,#20HMOV R0,#20H; ;内部数据区指针内部数据区指针R0R0赋初值赋初值SETB F0SETB F0; ;设置设置“ “读入字节数奇偶数读入字节数奇偶数” ”标志标志RCV0:RCV0: CLR P1.0CLR P1.0; ;并行置入数据并行置入数据SETB P1.0SETB P1.0; ;允许串行移位允许串行移位RCV1:RCV1: MOV SCON,#00010000BMOV SCON,#00010000B; ;设定模式设定模式0 0并启动接收并启动接收(REN=1)(REN=1)LOOP:LOOP: JNB RI,$JNB RI,$; ;等待接收结束等待接收结束CLR RICLR RI; ; 首先清首先清RIRI准备下一次接收准备下一次接收MOV A,SBUFMOV A,SBUF; ;将接收的数据送将接收的数据送A AMOV @R0,AMOV @R0,A; ;数据送内存数据送内存INC R0INC R0CPL F0CPL F0; ;标志取反标志取反JB F0,RCV2JB F0,RCV2; ;接收偶次后重新置入数据接收偶次后重新置入数据DEC R7DEC R7; ;接收奇次时要再接收一帧接收奇次时要再接收一帧SJMP RCV1SJMP RCV1; ;转转RCV1RCV1再接收一帧数据再接收一帧数据RCV2:RCV2: DJNZ R7,RCV0DJNZ R7,RCV0; ;是否完成是否完成2020个字节的输入个字节的输入【【注意注意】】::F0F0的作用和程序根据的作用和程序根据F0F0的状态转移到的状态转移到RCV1RCV1、、RCV0RCV0的区别。
的区别思考题:思考题:编一个在下面的电路中读入编一个在下面的电路中读入2020个字节的数据的程序个字节的数据的程序MCS-51P3.0P3.1P1.0 H G F E D C B AQH 74LS165 SIN S/ L CLK RXDTXD使用2片74LS164构成的16位输出扩展口MCS-51P3.0P3.1P1.0 QA QHA,B 74LS164 /CLR CLK QA QHA,B 74LS164 /CLR CLK RXDTXD 共阳极LED数码管 . g f e d c b a 共阳极LED数码管 . g f e d c b a+5V编程:利用静态数码管显示电路,显示利用静态数码管显示电路,显示RAMRAM中的数据中的数据数据存数据存RAMRAM的的20H20H开始的单元,以开始的单元,以BCDBCD码的形式存储(高码的形式存储(高4 4位为位为0 0););再送数码管显示前必须事先利用查表程序将再送数码管显示前必须事先利用查表程序将BCDBCD码转换为码转换为共阳极的字符码。
共阳极的字符码显示字型显示字型dpdp ,g,f,e,d,c,b, a,g,f,e,d,c,b, a字符码字符码0 01 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 C0HC0H1 11 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1F9HF9H2 21 1 0 1 0 0 1 0 0 0 1 0 0 1 0 0A4HA4H3 31 1 0 1 1 0 0 0 0 0 1 1 0 0 0 0B0HB0H4 41 1 0 0 1 1 0 0 1 0 0 1 1 0 0 199H99H5 51 1 0 0 1 0 0 1 0 0 0 1 0 0 1 092H92H6 61 1 0 0 0 0 0 1 0 0 0 0 0 0 1 082H82H7 71 1 1 1 1 1 0 0 0 1 1 1 1 0 0 0F8HF8H8 81 1 0 0 0 0 0 0 0 0 0 0 0 0 0 080H80Habcdefgdp+VCCabcdefgdpORG 2000HORG 2000HDISP:DISP:MOV R7,02HMOV R7,02H; ;设置显示位数设置显示位数MOV R0,#20HMOV R0,#20H; ;设置数据区指针设置数据区指针MOV SCON,#00HMOV SCON,#00H; ;设串行口为模式设串行口为模式0 0MOV DPTR, # TABLEMOV DPTR, # TABLE; ;设置字符表指针设置字符表指针DISP0:DISP0: MOV A , @R0MOV A , @R0; ;取数据到取数据到A AMOVC A,@A+DPTRMOVC A,@A+DPTR; ;从表中取与从表中取与A A对应的字符到对应的字符到A AMOV SBUF,AMOV SBUF,A; ;字符向外传送字符向外传送LOOP:LOOP: JNB TI,$JNB TI,$; ;等待传送结束等待传送结束CLR TICLR TI; ;清除标志清除标志TITIINC R0INC R0; ;指向下一个数据指向下一个数据DJNZ R7,DISP0DJNZ R7,DISP0; ;未完时转未完时转DISP0DISP0继续继续RETRETTABLE:TABLE: DBDB 0C0H,0F9H,0A4H,0B0H,99H 0C0H,0F9H,0A4H,0B0H,99H;0,1, 2,3,4;0,1, 2,3,4的字符码的字符码DBDB 92H,82H,0F8H,80H,98H 92H,82H,0F8H,80H,98H;5,6,7,8,9;5,6,7,8,9的字符码的字符码ENDEND返回3.4:定时计数器的应用3.4.1:3.4.1:定时计数器的定时计数器的四种工作模式四种工作模式3.4.2:3.4.2:定时器相关的寄存器定时器相关的寄存器3.4.3:3.4.3:定时器模式定时器模式1 1电路电路3.4.43.4.4: :定时计数器的初始化定时计数器的初始化3.4.53.4.5: :定时器方式定时器方式1 1应用举例(一)应用举例(一)3.4.63.4.6: :定时器方式定时器方式1 1应用举例(二)应用举例(二)3.4.73.4.7: :定时器门控位定时器门控位GATEGATE的应用的应用继续3.4.1:定时计数器的四种工作模式M1 M0M1 M0工工 作作 模模 式式0 00 0模式模式0 0,, 1313位计数器模式位计数器模式0 10 1模式模式1 1,,1616位计数器模式位计数器模式1 01 0模式模式2 2,,8 8位自动重装模式位自动重装模式1 11 1模式模式3 3,,TH0TH0、、TL0TL0和和T1T1各自独立。
各自独立模式模式0 0、模式、模式1 1:基本相同,区别在于模式:基本相同,区别在于模式0 0计数器的长度为计数器的长度为1313位;模式位;模式1 1时计数器长度为时计数器长度为1616位;位;模式模式2 2:主要用于单片机的串行通讯时的:主要用于单片机的串行通讯时的“ “波特率波特率” ”发生器,发生器,将在下一节将在下一节“ “串行口应用中介绍串行口应用中介绍” ”本节主要介绍模式本节主要介绍模式1 1 的应用返回本节目录3.4.2: 定时器相关的寄存器GATEGATEC/TC/TM1M1M0M0GATEGATEC/TC/TM1M1M0M0定时/计数器1定时/计数器0TF1TF1TR1TR1TF0TF0TR0TR0IE1IE1IT1IT1IE0IE0IT0IT01,模式控制寄存器TMOD ( SFR 89H)2,控制寄存器控制寄存器TCON (SFRTCON (SFR地址地址:88H):88H)返回本节目录T0、T1的启动TR和溢出标志TF 外部中断标志IE和触发极性选择IT3.4.3:定时器模式1电路TL1TH1震荡器1/12(8位)(8位)TF1中断控制T1 引脚TR1GATEINT1C/T=0C/T=1返回本节目录3.4.4:定时计数器的初始化((一)初始化的步骤:一)初始化的步骤:1 1,根据需要,设定工作方式(,根据需要,设定工作方式(C/TC/T位)计数或定时;位)计数或定时;2 2,确定定时或计数初值;,确定定时或计数初值;3 3,设置相应的中断参数、优先级别;,设置相应的中断参数、优先级别;4 4,送命令字,启动定时、计数器。
送命令字,启动定时、计数器二)定时、计数初值的计算:(二)定时、计数初值的计算: TCTC为计数初值;为计数初值;1 1,计数初值计算公式:,计数初值计算公式: TC=M-CTC=M-C 其中其中 MM为计数器的模;为计数器的模; C C为计数值;为计数值;【【举例举例】】::在方式在方式0 0时,每接收时,每接收100100个外部事件,要求产生一个个外部事件,要求产生一个中断,确定计数初值中断,确定计数初值TC=8192-100=8092=TC=8192-100=8092=1 1F F9 9C CHH1 11 11 11 11 11 10 00 0X XX XX X1 11 11 10 00 01FH9CHTHi=FCHTLi=1CH2 2,定时器初值计算公式:,定时器初值计算公式:TC=M-T/TTC=M-T/T计数计数 (其中:(其中:M M 计数模;计数模;T T 定时时间;定时时间;T T计数计数 系统时钟周期的系统时钟周期的1212倍)倍)设系统时钟为设系统时钟为12MHZ,12MHZ,则则T T计数计数 =1=1μ μЅ Ѕ。
定定时时器器4 4种模式的最大定种模式的最大定时时间时时间与与MM有关模模 式式计数模计数模M M 最大定时时间最大定时时间 TmaxTmax模式模式0 01313位位Tmax=8192*1 μЅ =8.192ms模式模式1 11616位位Tmax=65536* 1μЅ=65.536ms模式模式2 2,,3 38 8位位Tmax=256*1 μЅ=0.256ms【【举例举例】】:请计算定时:请计算定时50ms50ms所需要的定时初值所需要的定时初值1 1,确定模式,确定模式. .选择模式选择模式1 1 2 2,计算定时初值计算定时初值Tc=65536-50ms/1Tc=65536-50ms/1μЅ=65536-50000=15536=3CB0H 既THi=3CH;TLi=B0H返回本节目录3.4.5:定时器方式1应用举例(一)利用单片机的利用单片机的P1.0P1.0产生一个频率为产生一个频率为50HZ50HZ的对称方波的对称方波解解】】::使用使用T0T0首先确定工作方式、工作模式和定时初值首先确定工作方式、工作模式和定时初值1 1,选定时方式(,选定时方式(C/T=0C/T=0););2 2,模式,模式1 1((M2M1=01)M2M1=01),,3 3,,TC=65536-10ms/1us=55536=D8F0HTC=65536-10ms/1us=55536=D8F0H,,既既TH=D8H,TL=F0HTH=D8H,TL=F0H。
GATEGATEC/TC/TM1M1M0M0GATEGATEC/TC/TM1M1M0M020ms10msTF1TF1TR1TR1TF0TF0TR0TR0IE1IE1IT1IT1IE0IE0IT0IT010msTMOD 0000 0001ORG 1000HORG 1000HSTRAT:STRAT:MOV TMOD,#01HMOV TMOD,#01H; ;设定时器为设定时器为定时定时,,模式模式1 1SETB TR0SETB TR0; ;启动定时器启动定时器T0T0LOOP:LOOP:MOV TH0,# 0D8HMOV TH0,# 0D8H ; ;设定时初值设定时初值MOV TL0,# 0F0HMOV TL0,# 0F0HJNB TF0,$JNB TF0,$; ;定时时间到?定时时间到?CLR TF0CLR TF0; ;清清T0T0标志标志CPL P1.0CPL P1.0;P1.0;P1.0取反取反SJMP LOOPSJMP LOOP; ;循环继续循环继续ENDEND程序清单返回本节目录3.4.6: 定时器方式1应用举例(二)利用利用P1.0P1.0口线输出周期为口线输出周期为2S2S的方波。
的方波解解】】如何产生如何产生1S1S((1000ms1000ms)的定时?)的定时?1000ms1000ms的定时由的定时由50ms50ms累计累计2020次1,1,设定设定T0T0为定时方式,模式为定时方式,模式1 12,TC=65535-50ms/1us=3CB0H2,TC=65535-50ms/1us=3CB0H3,TMOD3,TMOD控制字为:控制字为:00000001B=01H00000001B=01H4,T04,T0采用采用中断方式中断方式, ,既每既每50ms50ms产生一次中断,产生一次中断,中断中断2020次便是次便是1S1S软件重装初值R0=0?NYCPL P1.02 S1S1SP1.020→ R0R0-1→R0RETIBRT0中断服务程序ORG 1000HORG 1000HSTART:START: MOV TMOD,#01HMOV TMOD,#01H;设;设0 0为定时方式,模式为定时方式,模式1 1MOV TH0,#3CHMOV TH0,#3CH;;50mS50mS定时初值定时初值MOV TL0,#0B0HMOV TL0,#0B0HMOV IE,#82HMOV IE,#82H;开中断(;开中断(T0T0))SETB TR0SETB TR0;启动定时器;启动定时器T0T0MOV R0,#14HMOV R0,#14H;计数器;计数器R0R0赋初值赋初值2020LOOP:LOOP: SJMP $SJMP $;等待;等待T0T0中断中断ORG 000BHORG 000BHAJMP 0080HAJMP 0080HORG 0080HORG 0080HBRT0:BRT0:DJNZ R0,NEXTDJNZ R0,NEXT;;T0T0中断服务程序中断服务程序CPL P1.0CPL P1.0;;P1.0P1.0输出取反输出取反MOV R0,#14HMOV R0,#14H;计数器;计数器R0R0重赋初值重赋初值2020NEXT:NEXT:MOV TH0,#3CHMOV TH0,#3CH;软件重装初值;软件重装初值MOV TL0,#0B0HMOV TL0,#0B0HRETIRETI;中断返回;中断返回ENDEND返回本节目录3.4.7:定时器门控位GATE的应用在通常,在在通常,在TMODTMOD中中GATE=0GATE=0时,只要时,只要TR=1TR=1便启动定时器开始计数。
便启动定时器开始计数 如果如果GATE=1GATE=1时时, TR=1, TR=1电路是否计数取决于电路是否计数取决于/INT0/INT0:: /INTE0=1 /INTE0=1 时开始计数;时开始计数;/INTE0=0,/INTE0=0,电路不计数电路不计数利用这一特点,可以实现测量外部脉冲的宽度利用这一特点,可以实现测量外部脉冲的宽度计数器震荡器1/12TF0中断计数控制T0 引脚TR0GATEINT0C/T=0C/T=1 MCS-51 INTE0 解题步骤:解题步骤:1.1.将外部脉冲接到将外部脉冲接到P3.2P3.2((/INT0/INT0)上,使用)上,使用T0T0且且C/T=1C/T=1;;2.2.计数器计数器TH0TH0、、TL0TL0原始初值为原始初值为00H,00H,且设为且设为模式模式1(161(16位位) ) ;;3.3.在在/INT0=0/INT0=0时启动时启动T0T0计数器(计数器(TR0=1);TR0=1);4.4.当当/INT0=1/INT0=1时,定时器时,定时器T0T0开始计数;开始计数;5.5.当当/INT0=0/INT0=0时计数停止,此时时计数停止,此时TH0TH0、、TL0TL0中的计数值就是与中的计数值就是与脉冲宽度相对应得数据。
脉冲宽度相对应得数据 MCS-51INT0 启动T0 T0开始计数 计数停止 (TR0=1) (/INT0=1) (/INT0=0)外部脉冲MOV TMOD,#09HMOV TMOD,#09H; ;设定设定T0T0为模式为模式1 1且且GATE0=1GATE0=1MOV TH0, #00HMOV TH0, #00HMOV TL0, #00HMOV TL0, #00H; ;计数器原始清零计数器原始清零MOV R0, #20HMOV R0, #20H; ;设置数据区指针并原始赋初值设置数据区指针并原始赋初值JB INT0,$JB INT0,$; ;等待等待/INT0/INT0上的脉冲变低上的脉冲变低SETB TR0SETB TR0;INT0;INT0变低后,启动变低后,启动T0 T0 (( 但不计数)但不计数)JNB INT0,$JNB INT0,$; ;若若INT0INT0低电平则等待低电平则等待JB INT0,$JB INT0,$; ;若若INT0INT0高电平则等待高电平则等待 (( 开始计数)开始计数)CLR TR0CLR TR0;INT0;INT0变低后,关闭变低后,关闭T0 T0 (( 停止计数)停止计数) MOV @R0,TH0MOV @R0,TH0INC R0INC R0MOV @R0,TL0MOV @R0,TL0; ;保存计数器保存计数器T0T0的计数值的计数值【【说明说明】】:设系统时钟为:设系统时钟为12MH,12MH,这样脉冲宽度这样脉冲宽度T=T=((THLTHL、、TL0TL0))* *1 1μ μЅ Ѕ返回本节目录 MCS-51INT0 启动T0 T0开始计数 计数停止 (TR0=1) (/INT0=1) (/INT0=0)外部脉冲3.5:串行口的应用3.5.1:串型口的工作模式和控制寄存器控制寄存器SCONSCON3.5.2:3.5.2:模式模式0 0、、2 2时的波特率的计算时的波特率的计算3.5.3:3.5.3:模式模式1 1、、3 3时的波特率的计算时的波特率的计算3.5.4:3.5.4:四种模式下的接收与发送条件四种模式下的接收与发送条件3.5.5:3.5.5:模式模式1 1举例举例( (一一) )发送程序发送程序TXD.ASMTXD.ASM3.5.6:3.5.6:模式模式2 2、、3 3应用举例应用举例3.5.7:3.5.7:使用模式使用模式3 3进行多机通讯进行多机通讯继续串行口的应用在编制串行通讯程序时,首先要确定两个参数:在编制串行通讯程序时,首先要确定两个参数: 1 1,通讯双方的,通讯双方的“ “波特率波特率” ”,必须保持严格一致;,必须保持严格一致; 2 2,传输数据的格式,传输数据的格式“ “字符帧格式字符帧格式” ”必须统一。
必须统一MCS-51MCS-51串口的串口的4 4种模式中:种模式中:0 0、、2 2模式的波特率是模式的波特率是固定的;固定的;1 1和和3 3模式时波特率是可变且由定时器模式时波特率是可变且由定时器T1T1来作为波特率发生器来作为波特率发生器, , 以模式以模式2 2的方式工作的方式工作用用T1T1作为波特率发生器时,根据波特率来计算作为波特率发生器时,根据波特率来计算T1T1的初值就成为串口程序初始化的主要任务之一的初值就成为串口程序初始化的主要任务之一在通讯过程中,对标志(在通讯过程中,对标志(RIRI、、TITI)的判断是控制通)的判断是控制通讯全过程的关键环节讯全过程的关键环节3.5.1:串型口的工作模式和控制寄存器SCON SM0 SM1SM0 SM1模式模式功功 能能波特率波特率 0 00 00 0同步移位寄存器模式同步移位寄存器模式Fosc/12Fosc/12 0 10 11 11+8+11+8+1位异步通信位异步通信UARTUART可变可变 1 01 02 21+9+11+9+1位异步通信位异步通信UARTUARTFosc/64Fosc/64或或/32/32 1 11 13 31+9+11+9+1位异步通信位异步通信UARTUART可变可变SM0SM0 SM1SM1SM2SM2RENRENTB8TB8RB8RB8TITIRIRI 模式选择 多机通讯位 允许接收位 发送、接收第9位 发送、接收标志返回本节目录3.5.2: 模式0、2时的波特率的计算1.1.模式模式0 0:波特率:波特率B = fosc/12 foscB = fosc/12 fosc为系统频率为系统频率2.2.模式模式2 2:: B = 1/64B = 1/64* *fosc fosc (( SMOD=0SMOD=0时)时) 或或 B = 1/32B = 1/32* *fosc fosc ((SMOD=1SMOD=1时)时)其中:其中:SMODSMOD为电源控制寄存器为电源控制寄存器PCON PCON 的最高位。
的最高位返回本节目录模式模式0 0 电路框图电路框图51内部总线SBUF零检测器移位时钟START SHIFT 发送控制器TXCLOCK TI SENDD S QCLSTART RI RECEIVERX 接收控制器 SHIFTCLOCK 1 1 1 1 1 1 1 0输入移位寄存器SBUF51内部总线读SBUF写SBUF(S6)Fosc/12串行口中断P3.0RXDP3.1TXD装载SBUFREN/RI返回前一次P3.0RXD1/161/2T1溢出10SMOD1/2focs/210SMOD模式2串行口的波特率 B模式1、3时串行口的波特率 B1/16focs/12模式0串行口的波特率 B串行口四种模式时,因移位脉冲来源不同而使串行口的波特率 B不同(如图所示)B=focs/12B=focs/32或=fosc/64 B=1/32×T1溢出率或=1/16×T1溢出率发送、接收控制器发送、接收控制器发送、接收控制器TL1(8位)TH1(8位)震荡器1/12TF1中断控制T1 引脚TR1GATEINT1C/T=1C/T=0返回8位+1计数器8位初值寄存器T1T1溢出率溢出率=fosc/12× [1/=fosc/12× [1/((256-TH1256-TH1))] ] ;; TH1TH1为初值,其值的大小直接影响溢出率。
为初值,其值的大小直接影响溢出率实际上实际上T1T1就是一个分频系数为就是一个分频系数为1 1~~256256分频器3.5.3: 模式1、3时的波特率的计算 B= 1/16B= 1/16××T1T1溢出率溢出率 ((SMOD=1SMOD=1时时)) 或:或:B= B= 1/321/32××T1T1溢出率溢出率 ((SMOD=0SMOD=0时时)) 其中:其中:T1T1溢出率溢出率=fosc/12=fosc/12×× [1/ [1/((256-TH1256-TH1))] ] ;; TH1TH1为为初初值值所以:所以: B= fosc/192 B= fosc/192 ×× [1/ [1/((256-TH1256-TH1))] ] ((SMOD=1SMOD=1时时)) 或:或: B= fosc/384 B= fosc/384 ×× [1/ [1/((256-TH1256-TH1))] ] ((SMOD=0SMOD=0时时)) 这样这样,我,我们们可以得到求可以得到求TH1TH1(初(初值值)的)的计计算公式:算公式: TH1=256 - [ fosc/TH1=256 - [ fosc/((384XB384XB))] ] ;; ((SMOD=0SMOD=0时时)) TH1=256 - [ fosc/TH1=256 - [ fosc/((192XB192XB))] ] ;; ((SMOD=1SMOD=1时时))【【举举例例】】: :设设foscfosc为为11.0592MHz,11.0592MHz,波特率波特率为为1200Hz1200Hz,求,求THTH((设设::SMOD=0SMOD=0)。
解解】】:: 用上述公式用上述公式 TH1=256-[11.059MHz /TH1=256-[11.059MHz /((384X1200384X1200))] =232 =0E8H ] =232 =0E8H 返回本节目录3.5.4: 四种模式的接收、发送条件模式模式发送条件发送条件接收条件接收条件接收方式接收方式主要应用主要应用0 0TI=0TI=0RI=0,REN=1RI=0,REN=1查询、中断查询、中断同步移位同步移位, ,系统扩并口系统扩并口1 1TI=0TI=0RI=0,REN=1RI=0,REN=1查询、中断查询、中断8 8位数据异步传送位数据异步传送2 2、、3 3TI=0TI=0RI=0, REN=1RI=0, REN=1,,SM2=0SM2=0查询查询((无中断无中断))8 8位数据位数据+ + 奇偶位的奇偶位的异步收发异步收发 UARTUARTRI=0, REN=1RI=0, REN=1,,RB8=1 RB8=1 若若SM2=0SM2=0时查时查询。
询若若SM2=1SM2=1时引时引发中断发中断8 8位数据位数据+ + 控制位的控制位的异步收发异步收发 UARTUART返回本节目录3.5.5:模式1举例(一)发送程序TXD.ASM org 0000horg 0000h ljmp 0100h ljmp 0100h org 0100h org 0100hstart: mov tmod,#20h ;start: mov tmod,#20h ;设定定时器设定定时器T1T1为模式为模式2 2 mov tl1,#0f4h ; mov tl1,#0f4h ;送定时初值(送定时初值(fosc=11.059fosc=11.059)) mov th1,#0f4h ;mov th1,#0f4h ;波特率波特率B=2400B=2400 mov pcon,#00h ;PCON mov pcon,#00h ;PCON中的中的SMOD=0SMOD=0 setb tr1 ; setb tr1 ;启动定时器启动定时器T1T1 mov scon,#40h ; mov scon,#40h ;设定串行口为模式设定串行口为模式1 1loop2: mov p1,#0ffh loop2: mov p1,#0ffh mov a,p1 ; mov a,p1 ;从从P1P1口输入数据口输入数据 mov sbuf,a ;mov sbuf,a ;数据送数据送SBUFSBUF发送发送loop1: loop1: jnb ti,loop1jnb ti,loop1 ; ;判断数据是否发送完毕?判断数据是否发送完毕? clr ticlr ti ; ;发送完一帧后清标志发送完一帧后清标志 sjmp loop2 ;sjmp loop2 ;返回继续返回继续 endendTXD.ASM发送程序框图(查询方式)SM0SM0SM1SM1SM2SM2RENRENTB8TB8RB8RB8TITIRIRIT1初始化启动T1串行口初始化输入数据到A发送一帧数据MOV SBUF,ATI=1?软件清TIGATEGATEC/TC/TM1M1M0M0GATEGATEC/TC/T M1M1M0M0设定定时器T1的工作模式 00000010B设定串行口模式寄存器SCON为01000000BYN(二)接收程序:RXD.ASMorg 0000horg 0000hljmp 0100hljmp 0100horg 0100horg 0100hstart: start: mov tmod,#20h mov tmod,#20h ; ;选定选定T1T1为模式为模式2 2(自动重装)(自动重装)mov tl1,#0f4h mov tl1,#0f4h ; ;设定初值设定初值mov th1,#0f4h mov th1,#0f4h ; ;同上同上mov pcon,#00h mov pcon,#00h ;PCON;PCON的的SMOD=0SMOD=0setb tr1 setb tr1 ; ;启动启动T1T1定时器定时器clr riclr ri ; ;清接收标志清接收标志mov scon,#50h mov scon,#50h ; ;设定串行口为方式设定串行口为方式1 1loop1: loop1: jnb ri,loop1jnb ri,loop1 ; ;判断是否接收到数据?判断是否接收到数据?clr riclr ri ; ;接收到数据后清接收标志接收到数据后清接收标志mov a,sbuf mov a,sbuf ; ;数据送累加器数据送累加器A Amov p1,a mov p1,a ; ;从从P1P1口输出口输出sjmp loop1 sjmp loop1 ; ;回继续回继续endendRXD.ASM接收程序框图(查询方式)T1初始化启动T1串行口初始化输出数据到P1数据送AMOV A,SBUFRI=1?软件清TISM0SM0SM1SM1SM2SM2RENRENTB8TB8RB8RB8TITIRIRIGATEGATEC/TC/TM1M1M0M0GATEGATEC/TC/T M1M1M0M0定时器TMOD(89H)的工作模式 00000010B串行口模式寄存器SCON(98H)为01010000BYN思考题:用中断的方式思考题:用中断的方式 接收数据接收数据org 0000horg 0000hljmp 0100hljmp 0100horg 0023horg 0023hljmp 0200hljmp 0200horg 0100horg 0100hstart: start: mov tmod,#20h ;mov tmod,#20h ;选定选定T1T1为模式为模式2 2(自动重装)(自动重装)mov tl1,#0f4h mov tl1,#0f4h ; ;设定初值设定初值mov th1,#0f4h mov th1,#0f4h ; ;同上同上mov pcon,#00h ;PCONmov pcon,#00h ;PCON的的SMOD=0SMOD=0setb tr1 setb tr1 ; ;启动启动T1T1定时器定时器clr ri clr ri ; ;清接收标志清接收标志mov scon,#50h ;mov scon,#50h ;设定串行口为方式设定串行口为方式1 1mov ie,#90hmov ie,#90h ; ;开串行口中断开串行口中断sjmp $sjmp $org 0200horg 0200hrxd1:rxd1:clr ri clr ri ; ;接收到数据后清接收标志接收到数据后清接收标志mov a,sbuf mov a,sbuf ; ;数据送累加器数据送累加器A Amov p1,a mov p1,a ; ;从从P1P1口输出口输出retireti endendLJMPLJMP01H01H00H00HLJMPLJMP02H02H00H00HMOVMOVCLRCLR0000H0023H0100H0200HRXD.ASM接收程序框图(中断方式)T1初始化并启动T1串行口初始化开串行口中断等待RI中断输出数据到P1接收一帧数据MOV A,SBUF软件清TIRETI主程序框图中断服务程序框图EAEAX XX XESESET1ET1EX1EX1ET0ET0EX0EX0设定中断允许寄存器IE(A8H)为10010000B返回本节目录3.5.6: 模式2、3应用举例与模式与模式1 1相比,模式相比,模式2 2、、3 3的主要特点:的主要特点: 1 1,,9 9位数据的传送格式位数据的传送格式: : 其中:发送时第其中:发送时第9 9位在位在TB8TB8;; 接收时第接收时第9 9位在位在RB8RB8中。
中 2 2,,SM2SM2: : 多机通讯位多机通讯位: : 在模式在模式0 0、、1 1中中: :SM2=0SM2=0当RI=1RI=1时便可以引发中断时便可以引发中断在模式在模式2 2、、3 3中中: : 如果如果SM2=0SM2=0,TI,TI和和RI RI 虽然可以被激活,但不能引发中断!虽然可以被激活,但不能引发中断! 如果如果SM2=1SM2=1, ,且且RB8=1RB8=1时,时,RIRI被激活时可以引发中断!被激活时可以引发中断!根据上面特点,模式根据上面特点,模式2 2、、3 3可以可以: : 1, 1,利用第利用第9 9位数据来传送、接收每一字节的位数据来传送、接收每一字节的“ “奇偶效验位奇偶效验位” ” 2,2,利用利用SM2SM2、、RB8 RB8 实现多机通讯功能实现多机通讯功能利用模式利用模式2,32,3进行带奇校验的串行通讯程序流程图进行带奇校验的串行通讯程序流程图数据送累加器APSW.P=1 ?SET SCON.TB8CLR SCON.TB8MOV SBUF,ATI=1 ?CLR SCON.TIYESNONOYES发送端程序RI=1 ?MOV A,SBUFPSW.P⊕RB8=1?出错处理CLR SCON.RIYESNO接收端程序使用“查询法”编制的发送、接收程序NY数据送内存返回本节目录3.5.7: 使用模式3进行多机通讯主机从机 N从机 4从机 3从机 2从机 1串行数据线(2条)主从式多机通讯原理主从式多机通讯原理1 1,主机发送的数据可以传送到各个从机,从机发送的数据只能为主机接收,,主机发送的数据可以传送到各个从机,从机发送的数据只能为主机接收,从机之间不能直接通讯。
从机之间不能直接通讯2 2,主机和从机的设置为模式,主机和从机的设置为模式2 2或或3 3,其中,其中: :主机的主机的SM2=0SM2=0(单机方式);(单机方式); 从机的从机的SM2=1SM2=1(多机方式)多机方式)3 3,主机发送,主机发送地址码地址码来寻找从机(来寻找从机(地址码特征是第地址码特征是第9 9位数据为位数据为“ “1” 1” ),所有),所有从机都接收主机发出的地址码(因为从机都接收主机发出的地址码(因为RB8=1RB8=1),既),既RI=1RI=1引发中断在中引发中断在中断服务程序中,将接收到地址码与自己的地址进行比较,断服务程序中,将接收到地址码与自己的地址进行比较,被选中的从机被选中的从机将自己的将自己的SM2=0SM2=0,并维持在中断服务程序中保持与主机的联系,并维持在中断服务程序中保持与主机的联系。
而未被而未被选中的从机仍保持选中的从机仍保持SM2=1SM2=1,并退出中断服务程序,并退出中断服务程序4 4,当主机找到从机后,开始向从机发数据、命令(其特征为第,当主机找到从机后,开始向从机发数据、命令(其特征为第9 9位位=0=0)由于选中的从机于选中的从机SM2=0SM2=0,从机仍可以使用,从机仍可以使用查询查询RIRI的方式的方式接收主机发出的数接收主机发出的数据或命令(而未选中的从机因据或命令(而未选中的从机因RB8=0RB8=0不会引发它们的中断)当主机与不会引发它们的中断)当主机与从机的通讯完成后,该从机再将其从机的通讯完成后,该从机再将其SM2=1SM2=1并退出中断服务程序并退出中断服务程序主机重新发出另一个从机的地址,所有从机可以马上响应并接收地址信息新发出另一个从机的地址,所有从机可以马上响应并接收地址信息多机通讯中主机与从机之间的控制、状态信息多机通讯中主机与从机之间的控制、状态信息主机的控制命令:主机的控制命令: 00H 00H 主机发送,从机接收;主机发送,从机接收;(控制从机的操作)(控制从机的操作) 01H 01H 主机接收,从机发送。
主机接收,从机发送从机状态字:从机向主机发送的用于表征从机工作状态的从机状态字:从机向主机发送的用于表征从机工作状态的信息(如下图)信息(如下图)ERRERRTRDYTRDYRRDYRRDY0:合法命令 0:发送未就绪 0:接收未就绪1:非法命令 1:发送就绪 1:接收就绪从机返回的状态字主机程序框图主机程序框图T1为定时,模式2B=1200,启动T1设串口为模式3REN=1,SM2=0TB8=1设定程序数据:R0~R5调用MCOMMU停机MCOMMU发送从机地址从机应答?地址相符?发送命令字TB8=0从机应答?命令正确?命令分类接收数据块发送数据块从机接收就绪?从机发送就绪?RET命令从机复位NNYYNNYYNNYY接收发送一:主机程序(初始化部分)一:主机程序(初始化部分)ORG 2000HORG 2000HSTART:START: MOV TMOD,#20HMOV TMOD,#20H; ;定时器定时器T1T1为模式为模式2 2MOV TH1,#0F4HMOV TH1,#0F4HMOV TL1,#0F4HMOV TL1,#0F4H; ;波特率为波特率为12001200(设外接6(设外接6MHzMHz晶体)晶体)SETB TR1SETB TR1; ;启动启动T1T1MOV SCON,#0D8HMOV SCON,#0D8H; ;串口为模式串口为模式3 3允许接收,允许接收,SM2=0,TB8=1SM2=0,TB8=1MOV PCON,#00HMOV PCON,#00H; ;设设PCONPCON中的中的SMOD=0SMOD=0MOV R0,#40HMOV R0,#40H; ;发送数据块首地址送发送数据块首地址送R0R0MOV R1,#20HMOV R1,#20H; ;接收数据块首地址送接收数据块首地址送R1R1MOV R2,#SLAVEMOV R2,#SLAVE; ;被寻从机地址送被寻从机地址送R2R2MOV R3,#00H/#01HMOV R3,#00H/#01H; ;主发、从收命令。
或主收、从发命令主发、从收命令或主收、从发命令MOV R4,#14HMOV R4,#14H; ;发送数据块长度送发送数据块长度送R4R4((2020))MOV R5,#14HMOV R5,#14H; ;接收数据块长度送接收数据块长度送R5R5((2020))ACALL MCOMACALL MCOM; ;调用主机通讯子程序调用主机通讯子程序SJMP $SJMP $二二: :主机通讯子程序主机通讯子程序(( MCOMMCOM))OGR 2100HOGR 2100HMCOM:MCOM: MOV A,R2MOV A,R2; ;取从机地址取从机地址MOV SBUF,AMOV SBUF,AJNB RI,$JNB RI,$CLR RICLR RIMOV A,SBUFMOV A,SBUFXRL A,R2XRL A,R2; ;核对两个地址核对两个地址JZ MTXD2JZ MTXD2; ;相符时,转相符时,转MTXD2MTXD2MTXD1:MOV SBUF,#0FFHMTXD1:MOV SBUF,#0FFH; ;返回地址错误时,发送从机复位信号返回地址错误时,发送从机复位信号SETB TB8SETB TB8; ;设定地址标志设定地址标志SJMP MCOMSJMP MCOM ; ; 重发从机地址,使所有从机重新判断地址重发从机地址,使所有从机重新判断地址MTXD2:CLR TB8MTXD2:CLR TB8; ;准备发送命令准备发送命令MOV SBUF,R3MOV SBUF,R3; ;送出命令送出命令JNB RI,$JNB RI,$; ;等待从机应答等待从机应答CLR RICLR RI; ;从机应答后清标志从机应答后清标志MOV A,SBUFMOV A,SBUF; ;接收从机应答命令接收从机应答命令JNB ACC.7,MTXD3JNB ACC.7,MTXD3; ;命令无错时,则命令分类命令无错时,则命令分类SJMP MTXD1SJMP MTXD1; ;命令错返回重新联络命令错返回重新联络MTXD3:CJNE R3,#00H,MRXDMTXD3:CJNE R3,#00H,MRXD ; ;从机发送主机接收时,转从机发送主机接收时,转MRXDMRXDJNB ACC.0,MTXD1JNB ACC.0,MTXD1; ;从机接收时,若从机未准备好转回从机接收时,若从机未准备好转回MTXD4:MOV SBUF,@R0MTXD4:MOV SBUF,@R0; ;若从机准备好,则开始发送若从机准备好,则开始发送JNB TI,$JNB TI,$CLR TICLR TIINC R0INC R0DJNZ R4,MTXD4DJNZ R4,MTXD4RETRETMRXD:MRXD: JNB ACC.1,MTXD1JNB ACC.1,MTXD1; ;从机发送未准备好返回从机发送未准备好返回MRXD1:JNB RI,$MRXD1:JNB RI,$; ;等待接收等待接收CLR RICLR RIMOV A,SBUFMOV A,SBUFINC R1INC R1; ;接收数据区指针加一接收数据区指针加一DJNZ R5,MRXD1DJNZ R5,MRXD1; ;未接收完则继续(未接收完则继续(R5R5接收数据计数器)接收数据计数器)RETRETENDENDERRERR从机返回的状态字TRDYTRDYRRDYRRDY0:合法命令 0:发送未就绪 0:接收未就绪1:非法命令 1:发送就绪 1:接收就绪从机程序框图从机程序框图T1为定时,模式2B=1200,启动T1设串口为模式3REN=1,SM2=0TB8=1设定程序参数:R0~R3开串行口中断停机保护现场接收地址符合本机? 回送本机地址接收下一字符是命令吗? 命令分类 本机发送准备就绪? 本机接收准备就绪? 发TRDY=1状态字发RRDY=1状态字发送数据接收数据发送完? 接收完? 保护现场返回NNYY发送命令接收命令非法命令送TRDY=0送RRDY=0NNNY主程序中断服务程序三:从机主程序三:从机主程序ORG 1000HORG 1000HSTART:START: MOV TMOD,#20HMOV TMOD,#20H; ;设定定时器设定定时器T1T1为模式为模式2 2MOV TH1,#0F4HMOV TH1,#0F4H; ;设定波特率为设定波特率为12001200MOV TL1,#0F4HMOV TL1,#0F4HSETB TR1SETB TR1; ;启动定时器启动定时器T1T1MOV SCON,#0F8HMOV SCON,#0F8H; ;设串口模式设串口模式3 3,,REN=1,SM2=1,TB8=1REN=1,SM2=1,TB8=1MOV PCON,#00HMOV PCON,#00HMOV R0,#20HMOV R0,#20H;R0;R0指向发送数据块首地址指向发送数据块首地址MOV R1,#40HMOV R1,#40H;R1;R1指向接收数据块首址指向接收数据块首址MOV R2,#14HMOV R2,#14H;R2;R2赋发送数据块长度赋发送数据块长度MOV R3,#14HMOV R3,#14H;R3;R3赋接收数据块长度赋接收数据块长度SETB EASETB EASETB ESSETB ES; ;开中断开中断CLR RI CLR RI ;清标志;清标志RIRI准备接收数据准备接收数据SJMP $SJMP $; ;等待中断等待中断四:从机中断服务程序四:从机中断服务程序` `ORG 0023HORG 0023HLJMP 0100HLJMP 0100HORG 0100HORG 0100HSINTS:SINTS: CLR RICLR RI; ;接收到地址后清接收到地址后清RI RI PUSH ACCPUSH ACCPUSH PSWPUSH PSW; ;保护现场保护现场MOV A,SBUFMOV A,SBUF; ;接收主机送来得从机地址接收主机送来得从机地址XRL A,#SLAVEXRL A,#SLAVE; ;核实从机地址核实从机地址JZ SRXD1JZ SRXD1; ;若是本机地址转若是本机地址转SRXD1SRXD1RETU:RETU: POP PSWPOP PSW; ;返回主程序返回主程序POP ACCPOP ACC; ;恢复现场恢复现场RETIRETI; ;中断返回中断返回SRXD1:CLR SM2SRXD1:CLR SM2; ;准备接收主机数据准备接收主机数据/ /命令命令MOV SBUF,# SLAVEMOV SBUF,# SLAVE; ;向主机发回从机地址向主机发回从机地址JNB RI,$JNB RI,$; ;等待主机的命令等待主机的命令CLR RICLR RI; ;接收到主机命令后清接收到主机命令后清RIRIJNB RB8,SRXD2JNB RB8,SRXD2; ;若是命令(若是命令(RB8=0RB8=0)则转)则转SRXD2SRXD2继续继续SJMP RETUSJMP RETU; ;接收的不是命令时(接收的不是命令时(RB8=1RB8=1),返回),返回SRXD2:MOV A,SBUFSRXD2:MOV A,SBUF; ;将接收到的命令送将接收到的命令送A ACJNE A,#02H,NEXTCJNE A,#02H,NEXT; ;命令合法命令合法NEXT:NEXT:JC SRXD3JC SRXD3; ;若命令合法(若命令合法(A>02HA>02H)则继续)则继续CLR TICLR TI; ;命令不合法则清命令不合法则清TITI准备发回准备发回ERR=1ERR=1MOV SBUF,#80HMOV SBUF,#80H; ;发送发送ERR=1ERR=1的状态字的状态字SETB SM2SETB SM2;SM2;SM2重新置位重新置位SJMP RETU SJMP RETU ; ;返回主程序返回主程序SRXD3:JZ SCHRXSRXD3:JZ SCHRX; ;若若A=00HA=00H既主机发送从机接收转既主机发送从机接收转SCHRXSCHRXJB JB F0HF0H,STXD,STXD; ;若从机准备好(若从机准备好(F0H=1F0H=1)时,转)时,转STXDSTXDMOV SBUF,#00HMOV SBUF,#00H; ;未准备好时,向主机发回未准备好时,向主机发回TRXD=0TRXD=0信息信息SETB SM2SETB SM2SJMP RETUSJMP RETU; ;返回主程序返回主程序STXD:STXD: MOV SBUF,#02HMOV SBUF,#02H; ;向主机发送向主机发送TRDY=1TRDY=1的状态字的状态字JNB TI,$JNB TI,$; ;等待发送完毕等待发送完毕CLR TICLR TI; ;发送完毕后清标志发送完毕后清标志TITILOOP1:MOV SBUF,@R0LOOP1:MOV SBUF,@R0; ;开始发送数据块开始发送数据块JNB TI,$JNB TI,$CLR TICLR TIINC R0INC R0DJNZ R2,LOOP1DJNZ R2,LOOP1SETB SM2SETB SM2;数据块发送完毕;数据块发送完毕SJMP RETUSJMP RETU; ;返回主程序返回主程序SCHRX:JB PSW.1,SRXDSCHRX:JB PSW.1,SRXD; ;本机接收就绪时转本机接收就绪时转SRXDSRXDMOV SBUF,#00HMOV SBUF,#00H; ; 接收未准备好时,向主机发接收未准备好时,向主机发RRDY=0RRDY=0SETB SM2SETB SM2SJMP RETUSJMP RETU; ;返回主程序返回主程序SRXD:SRXD: MOV SBUF,# 01HMOV SBUF,# 01H; ;向主机发送向主机发送RRDY=1RRDY=1状态字状态字LOOP2:JNB RI,$LOOP2:JNB RI,$; ;等待接收数据块,开始接收数据块等待接收数据块,开始接收数据块CLR RICLR RIMOV @R1,SBUFMOV @R1,SBUFINC R1INC R1DJNZ R3,LOOP2DJNZ R3,LOOP2SETB SM2SETB SM2;数据块接收完毕;数据块接收完毕SJMP RETUSJMP RETU;返回主程序;返回主程序ENDEND返回本节目录3.6:MCS-51与D/A转换器的接口3.6.03.6.0:: 嵌入式系统嵌入式系统与与A/DA/D、、D/AD/A转换器转换器3.6.13.6.1:: D/AD/A转换器原理转换器原理3.6.2:3.6.2:DAC0832DAC0832芯片介绍芯片介绍3.6.33.6.3:: MCS-51MCS-51与与DACDAC芯片的接口芯片的接口继续3.6.0 嵌入式系统与A/D、D/A转换器单片机作为嵌入式控制器可以灵活地嵌入在仪表、家电和单片机作为嵌入式控制器可以灵活地嵌入在仪表、家电和各种智能化设备中。
各种智能化设备中在这些嵌入式系统中,单片机对输入的信号进行采集、进在这些嵌入式系统中,单片机对输入的信号进行采集、进行相应的分析、运算,产生对应的输出操作行相应的分析、运算,产生对应的输出操作在系统的输入端,往往都是一些模拟信号或者是非电量的在系统的输入端,往往都是一些模拟信号或者是非电量的信号,同时系统输出的执行机构也往往要用模拟量(电流、信号,同时系统输出的执行机构也往往要用模拟量(电流、电压)来驱动所以作为一个完整的嵌入式系统就应当包电压)来驱动所以作为一个完整的嵌入式系统就应当包含:含:A/DA/D转换、微控制器和转换、微控制器和D/AD/A转换器等转换器等A/DA/D、、D/AD/A转换器的应用使转换器的应用使CPUCPU与输入、输出连成一个有与输入、输出连成一个有机的整体,使单片机具有了真正意义上的机的整体,使单片机具有了真正意义上的“ “微控制器微控制器” ”的的作用单片机在嵌入式系统中的应用示意图MCS-51D/A转换器控制执行机构被控实体A/D转换器多路开关传感器1传感器2传感器n控制执行机构温度、压力、流量等信号模拟信号模拟信号数字信号返回3.6.1 D/A转换器原理D/A 转换器D7 :D0tV数字量 输入模拟量 输出T型电阻网络构成的D/A转换器分析分析0,1,2,30,1,2,3各点对地的电阻(各点对地的电阻(=R=R))分析各点电压和分析各点电压和I3,I2,I1,I0I3,I2,I1,I0电流:电流: 因为因为I3= I3= I I总总×1×1/2/2 所以所以I3=VR/(2I3=VR/(2× × R) R) = = U2=VR/2 U2=VR/2 所以所以I2=VR/(2×2R)=I2=VR/(2×2R)= U1=U2/2=VR/4U1=U2/2=VR/4 所以所以I1=VR/(4×2R)=I1=VR/(4×2R)=U0=U1/2=VR/8U0=U1/2=VR/8 所以所以I0=VR/(8×2R)=I0=VR/(8×2R)=RRRRR2R2R2R2RVR3210I3I2I1I0IoutI out=I3+I2+I1+I0I out=I3+I2+I1+I0RRRRR2R2R2R2RVRI3I2I1I0b3 b2 b1 b0 四位DAC寄存器 -+RfIRfIout1Vout电流 / 电压变换返回Vout=-Iout×RfIout23.6.2 DAC0832芯片介绍8 8位输入数据寄存器位输入数据寄存器: :存放存放CPUCPU送来得数据,由送来得数据,由/ILE1/ILE1控制;控制;8 8位位DACDAC寄存器寄存器: :存放待转换的数据,由存放待转换的数据,由/ILE2/ILE2控制;控制;带有开关的带有开关的8 8位位T T型电阻网络型电阻网络: : 输出与数字量对应的模拟电流。
输出与数字量对应的模拟电流8位输入寄存器8位DAC寄存器8位T型电阻网络DI7DI6DI5DI4DI3DI2DI1DI0ILE/CS/WR1/WR2/XFERM1M3VREFIout2Iout1RfbGNDRf=1允许输入=0锁存数据阻断新数据=1允许输入 进行转换=0锁存数据阻断新数据返回前一次DAC0832芯片引脚介绍数字量输入线数字量输入线DI7DI7~~DI0:DI0:第第1 1级缓冲控制线:级缓冲控制线:1.1.ILE:ILE:允许数字量输入线,高电平有效允许数字量输入线,高电平有效2.2./CS:/CS:片选线,低电平有效片选线,低电平有效3.3./WR1:/WR1:写命令控制线,低电平有效写命令控制线,低电平有效 ILE= 1ILE= 1,, /CS/CS,, /WR1=0/WR1=0时,时,M1M1为为1 1,数据进入输入寄存器数据进入输入寄存器 反之,条件不满足时,反之,条件不满足时,M1=0,M1=0,锁存器锁存数据锁存器锁存数据第第2 2级缓冲控制线(控制级缓冲控制线(控制DACDAC转换时间):转换时间):1.1./WR2:/WR2:写命令控制线,低电平有效。
写命令控制线,低电平有效2.2./XFER:/XFER:输入传送控制线,低电平有效输入传送控制线,低电平有效 /WR2=0/WR2=0,,/XFER=0/XFER=0时,时,M3M3为为1 1,数据进入,数据进入DACDAC寄存器寄存器, ,通过通过T T型电阻网型电阻网络实现络实现DACDAC转换反之,条件不满足时,转换反之,条件不满足时,M3=0,M3=0,锁存器锁存数据锁存器锁存数据 DACDAC寄存器不接收前面输入寄存器的数据寄存器不接收前面输入寄存器的数据输出线:输出线:1.1.Rfb:Rfb:与外接运算放大器的输出端相连与外接运算放大器的输出端相连2.2.Iout1Iout1、、Iout2:Iout2:模拟电流输出线,分别与运算放大器的反模拟电流输出线,分别与运算放大器的反相端、同相端连接相端、同相端连接电源线:电源线:1.1.VCC:VCC:电源输入线,电源输入线,+5V+5V~~+15V+15V之间2.2.VREF:VREF:参考电压输入线,参考电压输入线,-10V-10V~~+10V+10V范围内,由基准范围内,由基准电源提供。
电源提供3.3.DGND:DGND:数字电源地数字电源地4.4.AGND:AGND:模拟电源地模拟电源地-+I RfV out电流 / 电压变换DAC0832Iout1Iout2V ref返回3.6.3 MCS-51与DAC0832芯片的接口根据根据DAC0832DAC0832结构特点,结构特点,DAC0832DAC0832的接法有:的接法有:1.1.无缓冲的直通方式无缓冲的直通方式:用于无:用于无CPUCPU的普通仪表场合的普通仪表场合2.2.单单 缓缓 冲冲 方方 式:式: 在单片机系统中常用的使用模式在单片机系统中常用的使用模式3.3.双双 缓缓 冲冲 方方 式式:: 用于多用于多DACDAC的应用场合的应用场合转内部框图1,单缓冲方式将将DAC0832DAC0832口中两个缓冲器中的一个直通如将后级的口中两个缓冲器中的一个直通如将后级的DACDAC寄存器直通(寄存器直通(/XFER/XFER,,/WR2=0/WR2=0),用单片机的),用单片机的/WR/WR与与DAC0832DAC0832的的/WR1/WR1连接这样,一旦数据进入输入寄存器连接。
这样,一旦数据进入输入寄存器DACDAC就开始进行转换就开始进行转换使用:使用:MOV R0,#0FEHMOV R0,#0FEH ;来选定;来选定DAC0832DAC0832的片选的片选/CS /CS MOVX @R0,A MOVX @R0,A ;指令产生;指令产生/WR/WR信号使数据进入信号使数据进入 08320832进行转换(进行转换(A A中为待转换中为待转换 的数字的数字N N)) /WRP0口ALE/WR1/WR2/XFER Rfb/CS Iout1ILE Iout2DI7~DI0锁存器译码器+5V-+V outFEH转内部框图使用使用DAC0832DAC0832作波形发生器,作波形发生器,分别输出锯齿波、三角波和方分别输出锯齿波、三角波和方波。
波1,1,锯齿波发生器程序:锯齿波发生器程序:ORG 1000HORG 1000HSTART:MOV R0,#0FEHSTART:MOV R0,#0FEHMOVX @R0,AMOVX @R0,AINC AINC ASJMP STARTSJMP STARTENDEND【【说明说明】】:单极性输出:单极性输出VoutVout/WR1/WR2/XFER Rfb/CS Iout1ILE Iout2DI7~DI0-+V outVoutt2,2,三角波发生器程序:三角波发生器程序:ORG 1000HORG 1000HSTART:CLR ASTART:CLR AMOV R0,#0FEHMOV R0,#0FEHDOWN:DOWN:MOVX @R0,AMOVX @R0,AINC AINC AJNZ DOWNJNZ DOWNUP:UP:MOVX @R0,AMOVX @R0,ADEC ADEC AJNZ UPJNZ UPSJMP DOWNSJMP DOWNENDEND【【说明说明】】:单极性输出:单极性输出VoutVout/WR1/WR2/XFER Rfb/CS Iout1ILE Iout2DI7~DI0-+V outVoutt3,3,方波发生器程序:方波发生器程序: ORG 1000HORG 1000HSTART:MOV R0,#0FEHSTART:MOV R0,#0FEHLOOP: MOV A,#33HLOOP: MOV A,#33HMOVX@R0,AMOVX@R0,AACALL DELAYACALL DELAYMOV A,#0FEHMOV A,#0FEHMOVX @R0,AMOVX @R0,AACALL DELAYACALL DELAYSJMP LOOPSJMP LOOPDELAY: DELAY: : :ENDEND【【说明说明】】:单极性输出:单极性输出VoutVout/WR1/WR2/XFER Rfb/CS Iout1ILE Iout2DI7~DI0-+V outVoutt2 2,双缓冲方式,双缓冲方式/WRP0口ALE/WR1/WR2/CS Rfb/XFER Iout1ILE Iout2DI7~DI0锁存器译码器+5V-+V XFDHFEHFFH/WR1/WR2/CS Rfb/XFER Iout1ILE Iout2DI7~DI0+5V-+V Y数据寄存器:/WR1,/CSDAC寄存器:/WR2,/XFER转内部框图设内部设内部RAMRAM单元有两个长度为单元有两个长度为3030的数据块,起始地址分的数据块,起始地址分别为别为DA1DA1和和DA2DA2,试编程将,试编程将DA1,DA2DA1,DA2中的数据分别从中的数据分别从1#1#和和2#DAC08322#DAC0832输出的程序。
输出的程序解解】】::FDH:1#DAC0832FDH:1#DAC0832数字量输入控制口;数字量输入控制口;FEH:1#DAC0832FEH:1#DAC0832数字量输入控制口;数字量输入控制口;FFH:1#,2#DAC0832FFH:1#,2#DAC0832的的DACDAC转换控制口;转换控制口;ORG 1200HORG 1200HDA1:DA1:DATA 20HDATA 20HDA2:DA2:DATA 40HDATA 40HDTOUT:MOV R1,#DA1DTOUT:MOV R1,#DA1;R1;R1指向指向DA1DA1数据区数据区MOV R2,#30MOV R2,#30; ;数据区长度数据区长度3030送计数器送计数器R2R2SETB RS0SETB RS0;CPU;CPU转向转向1#1#工作寄存器区工作寄存器区MOV R1,#DA2MOV R1,#DA2;1#;1#区区R1R1指向指向DA2DA2数据区数据区CLR RS0CLR RS0; ;返回返回0#0#工作寄存器区工作寄存器区NEXT:NEXT:MOV R0,#0FDHMOV R0,#0FDH; ;指向指向1#0832DAC1#0832DAC的输入数据口的输入数据口MOV A,@R1MOV A,@R1; ;取取DA1DA1数据区的数据送数据区的数据送A AMOV @R0,AMOV @R0,A; ;数据送数据送1#08321#0832的数据寄存器的数据寄存器INC R1INC R1; ;修改修改DA1DA1数据区指针数据区指针SETB RS0SETB RS0;CPU;CPU转向转向1#1#工作寄存器区工作寄存器区MOV R0,#0FEHMOV R0,#0FEH; ;指向指向2#0832DAC2#0832DAC的输入数据口的输入数据口MOV A,@R1MOV A,@R1; ;取取DA2DA2数据区的数据送数据区的数据送A AMOVX @R0,AMOVX @R0,A; ;数据送数据送2#08322#0832的数据寄存器的数据寄存器INC R1INC R1; ;修改修改DA2DA2数据区指针数据区指针INC R0INC R0; ;指向指向1#1#、、2#08322#0832的的DACDAC转换口转换口MOV @R0,AMOV @R0,A; ;同时启动同时启动1#1#、、2# DAC08322# DAC0832进行转换进行转换CLR RS0CLR RS0;CPU;CPU转回转回0# 0# 工作寄存器区工作寄存器区DJNE R2,NEXTDJNE R2,NEXT;30;30个数据是否完成个数据是否完成SJMP DTOUTSJMP DTOUT; ;未完时,转未完时,转DTOUTDTOUT继续继续ENDEND返回本节目录3.7:MCS-51与A/D转换器的接口A/D 转换器D7 :D0数字量 输出模拟量 输入VX基准电压VR3.7.13.7.1::逐次比较式逐次比较式A/DA/D转换器原理转换器原理3.7.23.7.2::逐次比较式逐次比较式A/DA/D转换器转换器ADC0809ADC08093.7.33.7.3::MCS-51MCS-51与与ADC0809ADC0809的接口电路的接口电路继续3.7.1:逐次比较式A/D转换器原理控制电路N位D/A转换网络N位寄存器SAR模拟电压输入VXA/D转换数据输出启动 时钟 状态+-1 1,,N N位寄存器首先形成位寄存器首先形成1000000010000000;经;经DACDAC转换后送比较器与转换后送比较器与VXVX相比较;相比较;2 2,若,若VX>VSVX>VS时时, ,比较器通知比较器通知N N位寄存器保留最高位位寄存器保留最高位“ “1”1”。
若若VX 此线输出高电平时表明转换完成转换结束标志此线输出高电平时表明转换完成6.6.D7D7~~D0:D0:数字量输出线数字量输出线7.7.OE:OE:输出三态控制线输入高电平时,引脚输出三态控制线输入高电平时,引脚D7D7~~D0D0上输出转换后上输出转换后的的8 8位位 数字量8.8.CLOCK:CLOCK:时钟输入端为时钟输入端为ADCADC提供提供640KH640KH的逐次比较脉冲时序的逐次比较脉冲时序9.9.VrefVref((+ +)、)、 VrefVref((- -)): :参考电压输入,为电阻网络提供电压参考电压输入,为电阻网络提供电压 VrefVref((+ +)、)、 VrefVref((- -)可以与)可以与VccVcc和和GND GND 连接10.10.VccVcc、、GND:GND:电源和地电源和地简化的两位电阻阶梯和树状开关1011002.5V1.5V0.5V0.0V1/2VrefVSTD1D1 D0D0VST0 0 0 00.0V0.0V0 0 1 10.5V0.5V1 1 0 01.5V1.5V1 1 1 12.5V2.5VD1D0由左边的两组树状电子开关,右边四只分压电阻构成;由左边的两组树状电子开关,右边四只分压电阻构成;树状开关树状开关D1D1、、D0D0由由SARSAR(逐次比较寄存器)对应控制;(逐次比较寄存器)对应控制;树状开关树状开关D1D1、、D0D0的状态与的状态与DACDAC输出输出VSTVST的关系见表;的关系见表;实际电路为实际电路为8 8位位, ,既既256256个分压电阻,形成个分压电阻,形成256256个标准电压个标准电压供树状开关使用供树状开关使用返回3.7.3: MCS-51与ADC0809的接口电路/RD/WRP0口 MCS-51 ALE/INT1OESTARTALEADC0809 addCaddBaddCD7~~D0CLOCKEOC地址锁存器地址译码器++P0.2P0.1P0.0分频器F0H使用使用MOVX @RiMOVX @Ri,,A A 指令启动指令启动ADCADC,,A A中为通道代码中为通道代码,Ri=F0H,Ri=F0H((/WR/WR))使用使用MOVX A,@Ri MOVX A,@Ri 指令来读指令来读ADCADC的数据,的数据,Ri=F0H,Ri=F0H,((/RD/RD))使用中断方式为使用中断方式为ADC0809ADC0809服务。 服务• •试编程对试编程对IN0-IN7IN0-IN7上的模拟电压采集并送到内部上的模拟电压采集并送到内部RAM30HRAM30H开开始的单元始的单元 ORG 0A00HORG 0A00H ; ;主程序主程序START:MOV R1,#30HSTART:MOV R1,#30H ; ;数据区指针数据区指针R1R1赋初值赋初值30H30H MOV R4,#08H MOV R4,#08H ; ;计数器计数器R4R4赋初值赋初值08H08H MOV R2,#00H MOV R2,#00H ; ;通道代码送通道代码送R2R2 SETB EA SETB EA SETB EX1 SETB EX1 ; ;开开/INT1/INT1中断中断 SETB IT1SETB IT1 ; ;设设/INT1/INT1为边沿触发为边沿触发 MOV R0,#0F0HMOV R0,#0F0H ;ADC ;ADC地址送间址寄存器地址送间址寄存器R0R0 MOV A,R2 MOV A,R2 ; ;通道代码送累加器通道代码送累加器A A MOVX @R0,A MOVX @R0,A ; ;送通道代码并启动送通道代码并启动ADCADC SJMP $ SJMP $ ; ;等待中断等待中断ORG 0013HORG 0013HLJMP CINT1LJMP CINT1ORG 0100HORG 0100HCINT1:MOV R0,#0F0HCINT1:MOV R0,#0F0H; ;中断服务程序中断服务程序MOVX A,@R0MOVX A,@R0; ;读入读入ADCADC数据数据MOV @R1,AMOV @R1,A; ;存入转换的数据存入转换的数据INC R1INC R1; ;修改数据区指针修改数据区指针R1R1INC R2INC R2; ;修改通道代码寄存器修改通道代码寄存器R2R2MOV A,R2MOV A,R2; ;通道代码送累加器通道代码送累加器A AMOVX @R0,AMOVX @R0,A; ;送下一个通道代码并启动送下一个通道代码并启动ADCADCDJNZ R4,LOOPDJNZ R4,LOOP; ;若未采集完转若未采集完转LOOPLOOPCLR EX1CLR EX1; ;采集完时,关中断采集完时,关中断LOOP:RETILOOP:RETI; ;中断返回中断返回ENDEND返回3.8:动态数码显示及键盘扫描电路1.1.概概 述述2.2.静态静态LEDLED数码显示电路数码显示电路3.3.动态动态LEDLED数码显示电路数码显示电路4.4.动态扫描时序图动态扫描时序图5.5.单片机与动态显示电路的接口单片机与动态显示电路的接口6.6.82798279构成的动态显示电路构成的动态显示电路7.7.可编程键盘扫描可编程键盘扫描/ /显示芯片显示芯片8279 8279 内部结构图内部结构图8.8.82798279内部的主要结构内部的主要结构9.9.82798279引脚说明引脚说明10.10.82798279的命令字和状态字的命令字和状态字11.11.82798279的应用的应用继续LEDLED数码管显示电路分静态、动态两种类型。 与静态电路数码管显示电路分静态、动态两种类型与静态电路相比,动态显示电路具有电路结构简单、功耗低、与微机相比,动态显示电路具有电路结构简单、功耗低、与微机接口容易接口容易, ,因此特别适合多位数显示电路及与单片机接口因此特别适合多位数显示电路及与单片机接口由由81558155或或82558255芯片构成的动态显示芯片构成的动态显示/ /键盘扫描电路可以减键盘扫描电路可以减少单片机端口的占有但它将低了少单片机端口的占有但它将低了CPUCPU的工作效率的工作效率使用专用的可编程键盘扫描使用专用的可编程键盘扫描/ /显示芯片显示芯片82798279不仅减少单片机不仅减少单片机的端口占有数量,还大大的减少的端口占有数量,还大大的减少CPUCPU对动态显示、键盘扫对动态显示、键盘扫描的管理,因而提高了描的管理,因而提高了CPUCPU的工作效率的工作效率3.8.1: 概 述返回3.8.2 静态LED数码显示电路(共阳极)七段译码器 七段译码器 七段译码器 七段译码器 七段译码器Vcc BCD码 0000 0001 0010 0011 0100返回3.8.3动态LED数码显示电路(共阴极)七段译码器BCD码动态扫描时序图返回3.8.4动态扫描时序图00H 01H 02H 03H 04H万位 仟位 佰位 十位 个位位扫描万位仟位佰位十位个位BCD码返回上一页返回3.8.5单片机与动态显示电路的接口(一)MCS-51 P0P1驱动电路采用软件进行七段译码可以省去译码器,但要使用7-8条口线输出字形码单片机与动态显示电路的接口(二)MCS-51 P0.7P0.6P0.5P0.4P0.3P0.2P0.1七段译码器3-8译码器使用“BCD/七段译码器”和“位扫描译码器”可以有效的节省单片机的口线单片机与动态显示电路的接口(三) 8155/8255 AD0.7 PA.7AD0.0 PA.0/CS PB.5PB.0驱动电路TO 51的P0口可以使用8155/8255并行口扩展芯片组成的动态扫描电路3.8.6: 8279构成的动态显示电路 8279 OUTB0OUTB3OUTA0OUTA3 / CS SL0SL1SL2SL3DB0 : DB7 驱动电路3-8译码器由可编程键盘/显示芯片8279 构成的8位LED数码管动态显示电路框图所有的“动态显示和键盘扫描”均有8279 内部自动完成。 返回3.8.73.8.7可编程键盘扫描可编程键盘扫描/ /显示芯片显示芯片8279 8279 内部结构图内部结构图FIFO/传感器RAM状态键盘抖动和控制I/O控制 数据缓冲器8*8FIFO/传感器RAM控制和时序寄存器显示地址寄存器16*8显示用RAM回送扫描计数器时序和控制显示寄存器 OUTA0~3、OUTB0~3 /BD SL0~3 RL0~7 移位控制 CLK RESET DB0~7 /RD /WR /CS A0 IRQ返回前一次返回3.8.8: 8279内部的主要结构输入输出数据缓冲器:输入输出数据缓冲器:用来接收用来接收CPU CPU 送来得命令或数据,送来得命令或数据,82798279与与CPUCPU之间的数据通道之间的数据通道控制与定时寄存器:控制与定时寄存器:用来寄存显示与键盘的工作方式,并用来寄存显示与键盘的工作方式,并通过译码产生相应的操作通过译码产生相应的操作扫描计数器:扫描计数器:用于输出显示用于输出显示/ /键盘的扫描信号键盘的扫描信号 在在“ “编码方式编码方式” ”中该电路输出二进制计数器的代码中该电路输出二进制计数器的代码(此时外部必须使用一个译码器对其译码产生真正的扫描(此时外部必须使用一个译码器对其译码产生真正的扫描信号。 这种方式的特点是可以产生多达信号这种方式的特点是可以产生多达1616条扫描线条扫描线 在在“ “译码方式译码方式” ”时,电路直接输出时,电路直接输出4 4选选1 1的扫描信号的扫描信号(外部不必使用译码器),缺点是只能产生(外部不必使用译码器),缺点是只能产生4 4条扫描线的条扫描线的信号回复缓冲器、键盘消抖及控制:回复缓冲器、键盘消抖及控制:通过通过RL0-7RL0-7用来接收键盘用来接收键盘的数据,并自动加入的数据,并自动加入10mS10mS的延时进行防抖的延时进行防抖FIFO/FIFO/传感器传感器 RAMRAM及状态寄存器:及状态寄存器:双重功能的双重功能的8*88*8位位RAMRAM 在键盘或选通方式中在键盘或选通方式中:它是:它是FIFOFIFO寄存器进入和读出数据是按寄存器进入和读出数据是按FIFOFIFO规则规则进行的此时进行的此时FIFOFIFO状态字用来存放状态字用来存放FIFO RAMFIFO RAM的工作状态每当的工作状态每当FIFOFIFO不空不空时(由键盘数据)时(由键盘数据),IRQ=1,IRQ=1向向CPUCPU发中断申请。 发中断申请 在传感器矩阵方式时在传感器矩阵方式时:它又是传感器:它又是传感器RAMRAM用来存放每一个传感器的状态用来存放每一个传感器的状态, ,如果传感器的状态发生变化,则是如果传感器的状态发生变化,则是IRQ=1IRQ=1向向CPUCPU发中断申请发中断申请显示显示RAM RAM 和显示地址寄存器:和显示地址寄存器:由由16*816*8位位RAMRAM构成构成, ,可以存放可以存放1616个显示的数个显示的数据82798279在动态显示数据时在动态显示数据时, ,就是将此就是将此RAMRAM单元中的数据轮流从显示单元中的数据轮流从显示RAMRAM中输出 数据的输出分为两组数据的输出分为两组OUTAOUTA、、OUTBOUTB它们可以单独使用也可以合并为它们可以单独使用也可以合并为8 8位在输出位在输出RAMRAM中的数据时中的数据时, ,扫描电路同步的发出与位对应的显示驱动位扫描电路同步的发出与位对应的显示驱动位扫描信号扫描信号, ,以实现数据的动态显示以实现数据的动态显示 显示地址寄存器是寄存显示地址寄存器是寄存CPU CPU 进行读进行读/ /写的显示写的显示RAMRAM地址地址, ,它可由命令它可由命令字中的低字中的低4 4位来设定位来设定, ,也可以按照命令字中的也可以按照命令字中的AIAI的状态自动加一或自动减一。 的状态自动加一或自动减一返回3.8.9: 8279引脚说明DB0DB0~~DB7:DB7:具有三态的双向数据总线用于具有三态的双向数据总线用于82798279与外部与外部 CPUCPU之间传递命令(控制字)和数据之间传递命令(控制字)和数据CLK CLK ::系统时钟输入用于系统时钟输入用于82798279内部产生工作的时序内部产生工作的时序RESET RESET ::复位信号输入端当复位信号输入端当RESET=1RESET=1时时,8279,8279被复位,被复位, 复位后复位后82798279内部状态如下内部状态如下 1 1,,1616个字符显示,左入口;个字符显示,左入口; 2 2,编码扫描键盘,双键锁定;,编码扫描键盘,双键锁定; 3 3,程序时钟编程为,程序时钟编程为3131。 /CS /CS ::片选段低电平有效;片选段低电平有效;A0 A0 :: 缓冲器选择端缓冲器选择端A0=1A0=1时时: :若若CPUCPU对对82798279执行写入操执行写入操 作时作时, ,写入是命令字;若写入是命令字;若CPUCPU从从82798279读数据时,读出读数据时,读出 的是的是82798279的状态A0=0A0=0时时, ,写入和读出的均为数据写入和读出的均为数据/RD/RD、、/WR:/WR:读写控制线来自读写控制线来自CPUCPU的控制信号,控制的控制信号,控制 82798279的读写操作的读写操作IRQ : IRQ : 中断请求信号输出线,高电平有效中断请求信号输出线,高电平有效SL0SL0~~SL3: SL3: 扫描输出线作为键盘、显示器的扫描信号,扫描输出线作为键盘、显示器的扫描信号, 通过编程可定为通过编程可定为“ “编码输出编码输出” ”(外接(外接4-164-16译码译码器产器产 生生1616选选1 1的扫描信号);也可设定为的扫描信号);也可设定为“ “译码输出译码输出” ” 直接输出4选1的扫描信号。 直接输出4选1的扫描信号RL0RL0~~RL7:RL7:回复输入线用来接收扫描键盘的回复信号回复输入线用来接收扫描键盘的回复信号SHIFTSHIFT::移位信号的输入线,高电平有效该信号是移位信号的输入线,高电平有效该信号是82798279 键盘数据的次高位(键盘数据的次高位(D6D6位),通常用来补充键盘位),通常用来补充键盘 开关的功能,如键盘的上、下挡功能在传感器方开关的功能,如键盘的上、下挡功能在传感器方 式和选通方式中,式和选通方式中,SHIFTSHIFT无效CNTL/STB:CNTL/STB: 控制控制/ /选通输入线,高电平有效键盘方式时该选通输入线,高电平有效键盘方式时该输入信号是键盘信号的最高位(输入信号是键盘信号的最高位(D7D7)), ,通常用来扩充键盘开通常用来扩充键盘开关的控制功能,作为键盘控制功能键用在传感器方式和关的控制功能,作为键盘控制功能键用。 在传感器方式和选通方式中,选通方式中,CNTLCNTL无效在选通方式中,该信号的上升沿无效在选通方式中,该信号的上升沿可将来可将来RL0RL0~~RL7RL7的数据存放到的数据存放到FIFO RAMFIFO RAM中OUTA0OUTA0~~OUTA3: OUTA3: A A组显示输出线组显示输出线( ( 接接LEDLED的的e e~~g,dpg,dp划划) )OUTB0OUTB0~~OUTB3: OUTB3: B B组显示输出线组显示输出线( (接接LEDLED的的a a~~d d划划) ) 上面两组线均为显示用的信息输出线上面两组线均为显示用的信息输出线, ,数据的输出与数据的输出与SL0SL0~~SL7SL7的数字扫描信号同步的数字扫描信号同步, ,实现数据的动态扫描显示实现数据的动态扫描显示 A A组与组与B B组输出线可以单独使用(如输出组输出线可以单独使用(如输出BCDBCD码经外部的码经外部的“ “BCD-BCD-七段译码器七段译码器” ”与显示器连接);也可以将与显示器连接);也可以将A A、、B B两组两组合并使用,直接输出七段的合并使用,直接输出七段的“ “字形码字形码” ”供显示器使用。 供显示器使用/BD:/BD:消隐显示输出线,低电平有效该输出信号在数字切消隐显示输出线,低电平有效该输出信号在数字切换显示或使用显示消隐命令时,控制显示器将显示消隐换显示或使用显示消隐命令时,控制显示器将显示消隐返回3.8.10: 8279的命令字和状态字 82798279是可编程接口芯片,其工作方式、工作特点等均是是可编程接口芯片,其工作方式、工作特点等均是通过通过CPUCPU向向82798279发送命令实现的,因此对发送命令实现的,因此对82798279的编程实的编程实际上就是向际上就是向82798279写入命令字的过程写入命令字的过程 82798279共有共有8 8条控制字,命令字是由每个字节中的条控制字,命令字是由每个字节中的D7D7~~D5D5三位为特征区分具体的命令字格式如下:三位为特征区分具体的命令字格式如下:1,键盘/显示方式命令字D7,D6,D5=000:D7,D6,D5=000:方式命令字的特征位方式命令字的特征位D3,D4=DD:D3,D4=DD:显示工作方式设定显示工作方式设定 0 00 0: 8: 8位字符显示,左入口(打字机方式);位字符显示,左入口(打字机方式); 0 0 1 1: 16: 16位字符显示,左入口(打字机方式);位字符显示,左入口(打字机方式); 1 01 0: 8: 8位字符显示,右入口(计算器方式);位字符显示,右入口(计算器方式); 1 11 1: 16: 16位字符显示,右入口(计算器方式)。 位字符显示,右入口(计算器方式)0 00 00 0D DD DK KK KK KD7 D6 D5 D4 D3 D2 D1 D0命令字特征位 显示工作方式 键盘工作方式 D2,D1,D0=KKK: D2,D1,D0=KKK: 设定键盘工作方式设定键盘工作方式 0 0 00 0 0 : : 编码扫描键盘,双键锁定;编码扫描键盘,双键锁定; 0 0 10 0 1 : : 译码扫描键盘,双键锁定;译码扫描键盘,双键锁定; 0 1 00 1 0 : : 编码扫描键盘,编码扫描键盘,N N键轮回;键轮回; 0 1 10 1 1 : : 译码扫描键盘,译码扫描键盘,N N键轮回;键轮回; 1 0 01 0 0 : : 编码扫描传感器;编码扫描传感器; 1 0 11 0 1 : : 译码扫描传感器;译码扫描传感器; 1 1 01 1 0 : : 选通输入,编码显示扫描;选通输入,编码显示扫描; 1 1 11 1 1 : : 选通输入,译码显示扫描;选通输入,译码显示扫描;【【说明说明】】::1 1,,““双键锁定双键锁定””指有指有2 2个键按下时,取最后弹起的键;个键按下时,取最后弹起的键;2 2,,““NN键轮回键轮回””指有指有NN个键按下时,根据它们按下的顺序依次存入个键按下时,根据它们按下的顺序依次存入FIFORAMFIFORAM中。 中3 3,,““编码输出编码输出””指按二进制计数器规律输出数据;指按二进制计数器规律输出数据;4 4,,““译码输出译码输出””指按译码器输出的规律输出(如指按译码器输出的规律输出(如4 4选选1)1)2,程序时钟命令82798279内部有自己的时序电路,其时钟信号来源于外部输入内部有自己的时序电路,其时钟信号来源于外部输入的的CLKCLK,为了使输入的时钟满足内部,为了使输入的时钟满足内部100KHz100KHz的要求,就的要求,就要对外部输入的要对外部输入的CLKCLK进行适当的分频进行适当的分频D4,D3,D2,D1,D0=PPPPP:D4,D3,D2,D1,D0=PPPPP: 分频系数范围:分频系数范围:2 2~~31310 00 01 1P PP PP PP PP PD7 D6 D5 D4 D3 D2 D1 D0命令字特征位 对输入信号CLK的分频系数3,读FIFO RAM命令FIFO RAMFIFO RAM为存放扫描键盘时获得的为存放扫描键盘时获得的“ “键值键值” ”数据,容量数据,容量为为8*88*8。 CPU CPU 读读82798279的数据口的数据时,可能有两类数据:的数据口的数据时,可能有两类数据: 1 1,,FIFO RAMFIFO RAM中扫描键盘时获得的中扫描键盘时获得的“ “键值键值” ”数据;数据; 2 2,显示,显示RAMRAM中的现实数据中的现实数据 所以必须事先通过命令字来选择所以必须事先通过命令字来选择D4=AI:D4=AI: 地址增量控制若地址增量控制若AI=1,AI=1,在每次读在每次读FIFO RAMFIFO RAM后,后,地址自动地址自动+1+1否则读出后,地址自动否则读出后,地址自动-1-1 AIAI的使用简化了编程,不用每读一次数据给出一个地址的使用简化了编程,不用每读一次数据给出一个地址0 01 10 0AIAIX XA AA AA AD7 D6 D5 D4 D3 D2 D1 D0命令字特征位 地址自动增量 FIFO RAM地址 4,读显示 RAM命令显示显示RAMRAM用来存放用来存放82798279动态显示的数据,容量动态显示的数据,容量16*816*8。 在显示在显示RAMRAM中,数据的存放顺序与在数码管上显示的数据中,数据的存放顺序与在数码管上显示的数据顺序是相对应得因此,要显示的数据要按顺序存放到显顺序是相对应得因此,要显示的数据要按顺序存放到显示示RAMRAM中在在82798279的显示方式中有的显示方式中有8 8位显示和位显示和1616位显示两种,对应占位显示两种,对应占用显示用显示RAM8RAM8字节或字节或1616字节0 01 11 1AIAIA AA AA AA AD7 D6 D5 D4 D3 D2 D1 D0命令字特征位 地址自动增量 显示 RAM地址 5,写显示RAM命令在向在向82798279的数据口写入要显示的数据前,要先向的数据口写入要显示的数据前,要先向82798279的的命令命令/ /状态口写入一个状态口写入一个“ “写显示写显示RAM”RAM”命令其作用是通过命令其作用是通过“ “写显示写显示RAM”RAM”命令设定要写入的显示数据到显示命令设定要写入的显示数据到显示RAMRAM中中的地址例如:当例如:当82798279设定为设定为“ “8 8位右入口位右入口” ”工作方式时,要显示工作方式时,要显示的的8 8位数据就要从位数据就要从00000000地址依次写入(地址依次写入(AI=1AI=1),这样命令),这样命令字的格式为字的格式为 10010000B 10010000B 既既90H90H。 1 10 00 0AIAIA AA AA AA AD7 D6 D5 D4 D3 D2 D1 D0命令字特征位 地址自动增量 显示 RAM地址 6,显示禁止写入/消隐命令此命令用于此命令用于OUTA,OUTBOUTA,OUTB分为两组分为两组4 4位显示方式时使用位显示方式时使用D3,D2=IW/A,IWB:D3,D2=IW/A,IWB: 分别屏蔽分别屏蔽A A或或B B组的显示组的显示 如:如: IW/A=1IW/A=1时禁止写入时禁止写入A A组显示组显示RAMRAM 当当CPU CPU 向向82798279的的B B组显示组显示RAMRAM送数时,先要把送数时,先要把A A组屏蔽掉,组屏蔽掉,这样这样CPUCPU送给送给B B组的数据不会影响到组的数据不会影响到A A组的显示组的显示D1,D0=BL/A,BL/B:D1,D0=BL/A,BL/B:显示输出消隐控制如:显示输出消隐控制如: BL/A=1BL/A=1时,时,A A组显示被消隐,组显示被消隐,=0=0时恢复。 时恢复1 10 01 1××××IW/AIW/AIW/BIW/BBL/ABL/ABL/BBL/BD7 D6 D5 D4 D3 D2 D1 D0 命令字特征位 屏蔽显示控制 消隐控制 7,清除命令 用来清除用来清除FIFO RAMFIFO RAM和显示和显示RAM,RAM,常用在对常用在对82798279初始化中初始化中D4,D3,D2=Cd,Cd,CdD4,D3,D2=Cd,Cd,Cd: : 清除显示清除显示RAMRAM的方式 1 01 0××××: : 全部清除全部清除““显示显示RAMRAM””;; 1 1 0 : 1 1 0 : 将将 ““显示显示RAMRAM””清为清为20H20H((A A组组00100010,,B B组组0000);0000); 1 1 1 : 1 1 1 : 将将 ““显示显示RAMRAM””全部清为全部清为““1 1””;; 0 0 0 : 0 0 0 : 不清除(若不清除(若Ca=1Ca=1时,时,D3,D2D3,D2仍有效)。 仍有效)D1=Cf :D1=Cf : Cf=1 Cf=1时,清空时,清空FIFO RAMFIFO RAMD0=Ca:D0=Ca: 总清位,兼有总清位,兼有Cd,CfCd,Cf的功能Ca=1Ca=1时,对显示时,对显示RAMRAM的清除取决于的清除取决于D3,D2 D3,D2 的编码1 11 10 0CdCdCdCdCdCdCfCfCaCaD7 D6 D5 D4 D3 D2 D1 D0命令字特征位 清除“显示RAM”的方式 清空FIFO 总清 8,结束中断/错误方式设置命令此命令有两种不同的应用:此命令有两种不同的应用:1 1,作为结束中断的命令作为结束中断的命令 82798279与与CPUCPU之间可以以中断方式进行工作之间可以以中断方式进行工作 在传感器(键盘扫描)工作方式中,若传感器(按键)的状态发生变化在传感器(键盘扫描)工作方式中,若传感器(按键)的状态发生变化时时, ,检测电路将其状态(键值)写入检测电路将其状态(键值)写入FIFO RAMFIFO RAM中,并启动中断逻辑使中,并启动中断逻辑使IRQIRQ变高,向变高,向CPUCPU法中断申请。 法中断申请 如果如果, ,在读在读FIFO RAMFIFO RAM数据前数据前, ,写入写入82798279的的“ “ 读读FIFO RAM”FIFO RAM”命令中命令中AI=0AI=0时时, ,在在CPUCPU读出读出FIFO RAMFIFO RAM中的一个数据后中的一个数据后, ,中断请求中断请求IRQIRQ自动清除;自动清除; 若中若中AI=1AI=1时,在读出时,在读出FIFO RAMFIFO RAM中的数据后中的数据后, ,中断请求时不能自动除,中断请求时不能自动除,必须使用必须使用“ “结束中断结束中断/ /错误方式错误方式” ”命令来撤掉命令来撤掉IRQIRQ1 11 11 1E E××××××××××××××××D7 D6 D5 D4 D3 D2 D1 D0 命令字特征位 屏蔽显示控制2 2,作为特定的,作为特定的“ “错误方式错误方式” ”设定命令设定命令 针对与针对与82798279键盘处于键盘处于“ “N N键轮回键轮回” ”方式时使用。 如果方式时使用如果E=1E=1就使就使82798279处于此种工作方式处于此种工作方式 在此种方式中,如果有多个键同时按下时, 在此种方式中,如果有多个键同时按下时,FIFOFIFO的状的状态字中的态字中的S/ES/E位位=1=1并产生中断请求信号和阻止数据写入并产生中断请求信号和阻止数据写入FIFO RAMFIFO RAM中 错误特征位错误特征位S/ES/E在读出在读出FIFOFIFO状态字时被读出,而在状态字时被读出,而在执行执行Cf =1Cf =1的的“ “清除清除” ”命令时被复位命令时被复位82798279的命令字是以的命令字是以D7,D6D7,D6和和D5D5为特征位的在通过为特征位的在通过82798279的状态的状态/ /命令口时会根据其特征位自动分配到相应的控制命令口时会根据其特征位自动分配到相应的控制寄存器中寄存器中9,8279的状态字状态字主要是用于表征键盘和选通方式下,状态字主要是用于表征键盘和选通方式下,FIFO RAMFIFO RAM中的状态,使中的状态,使用与查询是否发生传感器操作(按键)和有无错误发生。 用与查询是否发生传感器操作(按键)和有无错误发生DU:DU:显示无效特征位当显示无效特征位当82798279的显示的显示RAMRAM因清除或全清操作还未完成因清除或全清操作还未完成时,时,DU=1DU=1S/E:S/E:传感器信号结束传感器信号结束/ /错误特征位错误特征位82798279在传感器方式时,在传感器方式时,S/E=1S/E=1表表示最后一个信号已经进入传感器示最后一个信号已经进入传感器RAMRAM中而82798279在特殊的错误方式在特殊的错误方式时,时,S/E=1S/E=1表示发生了多键同时按下的错误表示发生了多键同时按下的错误OO、、U : U : 超出和不足错误特征位超出和不足错误特征位 当当FIFO RAMFIFO RAM已满时,若还有键盘数据输入时就发生错误已满时,若还有键盘数据输入时就发生错误, ,此时此时O=1;O=1; 当当FIFO RAMFIFO RAM已经置空已经置空,CPU ,CPU 还想读数据则会出现不足错误,还想读数据则会出现不足错误,U=1U=1F: F: 若若F=1F=1表示表示FIFO RAMFIFO RAM已经满已经满. .NNN: NNN: 表征表征FIFO RAMFIFO RAM中的字符数,最多中的字符数,最多8 8个。 个DUDUS/ES/EOOU UF FN NN NN ND7 D6 D5 D4 D3 D2 D1 D0返回8279 OUTB0 : OUTB3OUTA0: OUTA3SL0SL1SL2A0/RD/WR/CSDB0DB1DB2DB3DB4DB5DB6DB7RL0RL1RL2RL3RL4RL5RL6RL7 字符驱动电路A y0B y1C y2 y3y4y5y6y7位扫描驱动电路adp74LS07+5VRL0RL1RL2RL3RL4RL5RL6RL71023456789ABCDEFF1F2F3F4F5F6F774LS138 74LS07• 由8279构成的键盘扫描和动态显示电路原理图使用使用OCOC门输出的门输出的74LS0774LS07驱动器作字符驱动时,驱动驱动器作字符驱动时,驱动电流电流I I的路径字符驱动器位扫描驱动器位扫描驱动器字符驱动器+5V+5V电流I电流ILED字划(亮)LED字划(灭)上拉限流电阻R字符驱动器输出“1”时,输出端开路 字符驱动器输出“0”时输出为低上拉限流电阻R返回。
