单片机课件第8章.ppt
《单片机课件第8章.ppt》由会员分享,可在线阅读,更多相关《单片机课件第8章.ppt(46页珍藏版)》请在冰点文库上搜索。
![单片机课件第8章.ppt](https://file1.bingdoc.com/fileroot1/2023-5/7/152d932c-744f-422a-a2d8-3f52edb9fd1c/152d932c-744f-422a-a2d8-3f52edb9fd1c1.gif)
第8章机械工业出版社同名教材配套电子教案,单片机原理与控制技术第2版,第8章80C51串行扩展技术,本章要点,串行扩展特点串行扩展方式分类虚拟串行扩展慨念移位寄存器串行扩展方式80C51I/O虚拟串行接口I2C总线串行扩展技术I2C总线扩展I/O口通用器件PCF8574虚拟I2C总线扩展AT24CXX系列E2PROM,8-1串行扩展概述,一、串行扩展特点,最大程度发挥最小系统的资源功能。
原来由并行扩展占用的P0口、P2口资源,直接用于I/O口。
简化连接线路,缩小印板面积。
扩展性好,可简化系统的设计。
串行扩展的缺点:
数据吞吐容量较小,信号传输速度较慢,但随着CPU芯片工作频率的提高,以及串行扩展芯片功能的增强,这些缺点将逐步淡化。
1、一线制,二、串行扩展方式分类,一线制的典型代表为Dallas公司推出的单总线(1-wire)。
2、二线制,二线制的典型代表为philips公司推出的I2C总线(IntelIntegratedCircuitBUS)。
三线制(不包括片选线)主要有两种:
由Motorala公司推出的SPI(SerialperipheralInterface);由NS公司推出的Microwire/PLUS。
3、三线制,SPI的时钟线是SCK,数据线MOSI(主发从收)、MOSO(主收从发),主从器件的MOSI和MOSO是同名端相连。
由于该两类器件无法通过数据传输线寻址,因此,必须由MCUI/O线单独寻址,连到扩展器件的片选端CS(若只扩展一片,可将扩展芯片CS接地)。
Microwire/PLUS的时钟线是SK,数据线为SI和SO,但SI、SO依照主器件的数据传送方向而定,主器件的SO与所有扩展器件数据输入端DI或SI相连;主器件的SI与所有扩展器件数据输出端DO或SO相连。
4、80C51移位寄存器串行扩展,80C51的UART(UniversalAsynohronousReceiver/Transmitter)有4种工作方式,其中方式0为同步移位寄存器工作方式,通过移位寄存方式,可将串行数据并行输出,也可以将并行数据串行输入。
三、虚拟串行扩展概念,用通用I/O口来模拟串行接口,构成虚拟的串行扩展接口。
只要严格控制模拟同步信号,并满足串行同步数据传送的时序要求,就可满足串行数据传送的可靠性要求。
8-280C51移位寄存器串行扩展技术,一、移位寄存器串行扩展方式,80C51串行方式0时,串行口作为同步移位寄存器使用。
TXD端(P3.1)发出移位脉冲,频率为fosc/12,RXD端(P3.0)输入输出数据。
1、80C51扩展并行输出口,74LS164为串入并出移位寄存器,其中A、B为串行数据输入端,QA、QB、QH为并行数据输出端(QA为高位),CLK为同步时钟输入端,CLR为输出清0端。
若不需将输出数据清0,则CLR端接Vcc。
2、80C51扩展并行输入口,74LS165为并入串出移位寄存器,A、B、H为并行输入端(A为高位),QH为串行数据输出端,SER为串行数据输入端,CLK为同步时钟输入端,S/L为预置控制端。
S/L=0时,锁存并行输入数据;S/L=1时,可进行串行移位操作。
80C51串行方式0归一化子程序:
单字节串行输出子程序单字节串行输入子程序多字节串行输出子程序多字节串行输入子程序,二、串行方式0归一化子程序,所谓归一化子程序,即通用或标准化操作子程序,将80C51串行方式0所有应用操作归纳成几个基本的输入输出子程序,并使这些标准子程序具有规范的入口条件和出口状态。
应用时,只要设置相应的入口和出口,调用归一化子程序,就能达到串行输入输出的目的。
80C51虚拟串行I/O口归一化子程序:
单字节虚拟串行输出子程序单字节虚拟串行输入子程序多字节虚拟串行输出子程序多字节虚拟串行输入子程序,三、80C51I/O虚拟串行接口,利用80C51通用I/O口虚拟移位寄存器工作方式实现串行扩展,只需用任一通用I/O口代替RXD和TXD,设为VRXD和VTXD。
四、移位寄存器串行扩展应用,80C51移位寄存器串行扩展应用,只需根据标准化的电路形式连接,设置好入口条件,然后调用串行方式0归一化子程序或虚拟串行接口归一化子程序,即可完成扩展应用。
【例8-1】电路如图8-5所示,fosc=12MHz,要求发光二极管从左向右依次点亮,点亮时间为1秒,不断循环。
设串行方式0归一化子程序已存在ROM中。
解:
PIOX1BITP1.0;定义PIOX1WORK:
MOVA,#10000000B;置D7灯亮,其余暗LOOP:
CLRPIOX1;74LS164输出全0,灯全暗LCALLUART0;调用单字节串行输出子程序LCALLDLY1s;调用延时1秒子程序(略)RRA;右移SJMPLOOP;,【例8-2】电路如图8-6所示,fosc=12MHz,要求每隔10ms,检测键K0K7状态,并存入内RAM2FH。
设虚拟串行接口归一化子程序已存在ROM中。
解:
ORG0000H;复位地址LJMPSTAT;转初始化程序ORG000BH;T0中断入口地址LJMPIT0;转T0中断服务子程序VRXDBITP1.0;P1.0虚拟RXDVTXDBITP1.1;P1.1虚拟TXDPIOX2BITP1.2;P1.2虚拟PIOX2ORG0100H;初始化程序首地址STAT:
MOVTMOD,#01H;置T0定时器方式1MOVTH0,#0D8H;置T0定时初值10msMOVTL0,#0F0H;SETBTR0;启动T0SETBET0;T0开中SETBEA;CPU开中LJMPWORK;转主程序并等待T0中断ORG1000H;T0中断服务子程序首地址IT0:
MOVTH0,#0D8H;重置T0定时初值10msMOVTL0,#0F0H;PUSHAcc;保护现场PUSHPSW;INPUT:
LCALLVUARTI;调用虚拟串行输入子程序MOV2FH,A;存键K0K7状态数据POPPSW;恢复现场POPAcc;RETI;,1、扩展连接方式,8-3I2C总线串行扩展技术,一、I2C总线串行扩展概述,具有I2C总线结构的器件,不论SRAM、E2PROM、ADC/DAC、I/O口或MCU,均可通过SDA、SCL连接(同名端相连)。
无I2C总线结构的器件,如LED/LCD显示器、键盘、码盘、打印机等也可通过具有I2C总线结构的I/O接口电路成为串行扩展器件。
2、器件寻址方式,I2C总线器件地址SLA格式如下:
具有I2C总线结构的器件在器件出厂时已经给定了器件的地址编码。
器件固有地址编码,器件引脚地址,读/写,DA3DA04位器件地址是I2C总线器件固有的地址编码,器件出厂时就已给定,用户不能自行设置。
A2A1A03位引脚地址用于相同地址器件的识别。
若I2C总线上挂有相同地址的器件,或同时挂有多片相同器件时,可用硬件连接方式对3位引脚A2A1A0接Vcc或接地,形成地址数据。
R/W数据传送方向。
R/W=1时,主机接收(读);R/W=0时,主机发送(写)。
表8-1常用I2C器件地址SLA,3、接口电气结构I2C总线端口输出为开漏结构,总线上必须外接上拉电阻Rp,其阻值通常可选510K。
4、总线驱动能力由于I2C总线器件均为CMOS器件,总线具有足够的电流驱动能力。
I2C总线的电容负载能力为400pF(通过驱动扩展可达4000pF)。
I2C总线传输速率为100Kb/s(改进后的规范为400Kb/s)。
5、I2C总线时序,一次完整的数据传送过程应包括:
起始(S)、发送寻址字节(SLAR/W)、应答、发送数据、应答、发送数据、应答、终止(P)。
80C51只能采用虚拟I2C总线方式,并且只能用于单主系统,虚拟I2C总线接口可用通用I/O口中任一端线充任,数据线定义为VSDA,时钟线定义为VSCL。
二、80C51单主系统虚拟I2C总线软件包,80C51单主系统虚拟I2C总线软件包VIIC可由二大类共9个归一化子程序组成。
二大类程序分别为典型信号模拟子程序和数据传送通用子程序。
1、典型信号模拟子程序对于虚拟I2C总线,有几个重复应用的典型信号,可根据I2C总线时序要求,编制这些典型信号子程序:
启动信号STAT终止信号STOP发送应答位(A)MACK发送应答非位(A)NACK检查应答位CACK2、数据传送通用子程序数据传送通用子程序是应用典型信号模拟子程序(起始、终止、应答和检查应答)并按I2C总线数据传送时序要求编制的子程序。
发送一字节数据子程序WR1B接收一字节数据子程序RD1B发送N个字节数据子程序WRNB接收N个字节数据子程序RDNB,按照I2C总线数据传送时序要求,一次完整的数据发送过程应包括起始(S)、发送寻址字节(SLAR/W)、应答、发送数据、应答、发送数据、应答、终止(P),其格式如下:
其中,红色部分由主器件发送,从器件接收;黑色部分由从器件发送,主器件接收。
发送N个字节数据子程序WRNB,入口条件:
伪指令定义NUMB、SLA、MTD单元地址;发送数据字节数存内RAMNUMB单元;发送寻址字节存内RAMSLA单元;发送数据依次存放在首址为MTD的内RAM中。
占用资源:
Acc、R1、R2、R3、Cy、F0。
WRNB:
MOVR3,NUMB;取发送数据字节数N(存在内RAMNUMB单元)WRNB0:
LCALLSTAT;启动I2C总线MOVA,SLA;读发送寻址字节(存在内RAMSLA单元)LCALLWR1B;发送寻址字节LCALLCACK;检查应答位JBF0,WRNB0;应答不正常,返回重发MOVR1,#MTD;应答(A)正常,取发送数据存储区首址WRDA:
MOVA,R1;读一个字节发送数据LCALLWR1B;发送一个字节LCALLCACK;检查应答位JBF0,WRNB;应答不正常,返回重发INCR1;应答(A)正常,指向发送数据下一字节DJNZR3,WRDA;判N个数据发送完毕否?
未完继续LCALLSTOP;N个数据发送完毕,发送结束信号RET;,按照I2C总线数据传送时序要求,接收N个字节数据应按下列格式编程:
接收N个字节数据子程序RDNB,其中,红色部分由主器件发送,从器件接收;黑色部分由从器件发送,主器件接收。
入口条件:
伪指令定义NUMB、SLA、MRD地址;接收数据字节数存内RAMNUMB单元;接收寻址字节存内RAMSLA单元。
出口状态:
接收N个字节依次存在首址MRD的内RAM中。
占用资源:
Acc、R1、R2、R3、Cy、F0。
RDNB:
MOVR3,NUMB;取接收数据字节数N(存在内RAMNUMB单元)RDNB0:
LCALLSTAT;启动I2C总线MOVA,SLA;读接收寻址字节(存在内RAMSLA单元)LCALLWR1B;发送接收寻址字节LCALLCACK;检查应答位JBF0,RDNB0;应答不正常,返回重新开始RDA0:
MOVR1,#MRD;应答(A)正常,取接收数据存储区首址RDA1:
LCALLRD1B;接收一个字节数据MOVR1,A;存一个字节数据DJNZR3,ACK;判N个数据接收完毕否?
未完转发送应答位LCALLNACK;N个数据接收完毕,发送应答非位(A)LCALLSTOP;发送终止信号RET;子程序结束返回ACK:
LCALLMACK;发送应答位(A)INCR1;指向下一接收数据存储单元地址SJMPRDA1;转接收下一字节数据,VIIC软件包共有9个归一化子程序组成。
VIIC软件包仅适用单主系统即主方式下I2C总线外围扩展。
且应fosc6MHz,若fosc6MHz,则应相应调整NOP指令个数,以满足I2C总线数据传送时序要求。
VIIC软件包可嵌入到80C51ROM中任一空间,作为I2C总线扩展应用程序设计的软件支持平台。
在应用VIIC软件包初始化中,应对软件包中标记符号用伪指令定义。
VIIC软件包占用资源:
F0、Cy、Acc、R1、R1、R3。
在调用VIIC软件包之前,若涉及这些存储单元中原有数据尚需保存,应采取保护现场措施,在调用结束后恢复现场。
3、虚拟I2C总线软件包VIIC小结,一、I2C总线扩展I/O口通用器件PCF8574,8-4虚拟I2C总线扩展I/O口,1、引脚功能,PCF8574是一个带有中断输出的8位准双向I/O口I2C总线扩展芯片。
A2A0:
地址引脚;P0P7:
8位准双向I/O口,驱动能力IOL=25mA,IOH300A;SDA、SCL:
I2C总线接口;INT:
中断请求输出,低电平有效,开漏输出;VDD、VSS:
电源端、接地端;,2、电路设计,PCF8574与80C51I2C总线接口应用电路。
PCF8574的器件地址是0100,A2A1A0为引脚地址,全接地时为000,R/W=1时,接收寻址字节SLAR=41H=01000001B;R/W=0时,发送寻址字节SLAW=40H=01000000B。
3、寻址字节,当PCF8574输入端P0P7电平状态改变时,中断请求输出端INT会出现低电平(滞后时间约4s),可触发80C51产生中断。
在对PCF8574进行一次读写操作后,INT端撤销中断请求,复位为高电平。
4、中断请求,5、数据输入/输出操作格式,输出操作,输入操作,其中,红色部分由80C51发送,PCF8574接收;黑色部分由PCF8574发送,80C51接收。
二、PCF8574应用实例,【例8-3】图8-14为PCF8574四键四LED应用电路,PCF8574P0P3为键信号K0K3输入端,P4P7为LED控制信号D0D3输出端,要求当键K0K3按下后,相应LEDD0D3亮,设VIIC软件包已装入ROM。
解:
编制程序如下:
主程序:
VSDAEQUP1.0;定义虚拟I2C总线数据线端口VSCLEQUP1.1;定义虚拟I2C总线时钟线端口SLAEQU50H;定义发送/接收寻址字节内RAM存储单元为50HNUMBEQU51H;定义发送/接收数据字节数N内RAM存储单元为51HMTDEQU30H;定义发送数据内RAM存储区首地址为30HMRDEQU40H;定义接收数据内RAM存储区首地址为40HWORK:
MOVMTD,#0FFH;PCF8574初始化,置P0P3输入态,D0D3灯灭MOVSLA,#40H;置发送寻址字节MOVNUMB,#1;置发送字节数LCALLWRNB;FFH写入PCF8574SETBEA;CPU开中SETBEX1;INT1开中SETBIT1;置INT1边沿触发方式SJMP$;等待PCF8574P0P3口状态变化触发中断,中断服务子程序:
VINT:
MOVSLA,#41H;置接收寻址字节MOVNUMB,#1;置接收字节数LCALLRDNB;读PCF8574口状态MOVA,MRD;读接收数据SWAPA;低4位状态移至高4位ORLA,#0FH;低4位保持输入态MOVMTD,A;控制信号存入发送数据首地址单元MOVSLA,#40H;置发送寻址字节MOVNUMB,#1;置发送字节数LCALLWRNB;输出控制信号RETI;,1、引脚功能,8-5虚拟I2C总线扩展AT24CXX系列E2PROM,一、I2C总线E2PROM芯片AT24C02,SDA、SCL:
I2C总线接口A2A0:
地址引脚TEST:
测试端,高电平有效VDD、VSS:
电源端、接地端,2、电路设计,E2PROM的写入时间一般需要510ms,页写缓冲器具有SRAM性质,可快速写入,先将CPU输入的数据暂存页写缓冲器内,然后慢慢写入E2PROM中。
但一次写入数据,受到该芯片页写缓冲器容量的限制,若超出容量或超出页内地址,都将导致出错。
应将超出部分,隔510ms重新启动一次写操作。
AT24C02页写缓冲器为8B,页内地址为000111。
3、寻址字节,AT24CXX的器件地址是1010,A2A1A0为引脚地址,全接地时为000。
R/W=1时,读寻址字节SLAR=10100001B=A1H;R/W=0时,写寻址字节SLAW=10100000B=A0H。
4、页写缓冲器,写操作格式,5、数据读/写操作格式,读操作格式,其中,红色部分由80C51发送,AT24CXX接收;黑色部分由AT24CXX发送,80C51接收。
【例8-4】按图8-15(b),试将内RAM10H为首址的8个字节数据写入AT24C0250H57H单元中。
设VIIC软件包已装入ROM,VSDA、VSCL、SLA、NUMB、MTD、MRD均已按8.3.2软件包小结中协议定义解:
二、扩展AT24C02应用举例,VAT24W:
MOVSLA,#10100000B;置写AT24C02寻址字节MOVNUMB,#9;置写入数据字节数N+1(多一个片内子地址)MOVMTD,#50H;置写AT24C02片内子地址首址SADR(30H)=50HMOVR0,#10H;置8个数据原存放区首址MOVR1,#31H;置8个数据串行发送存放区首址MOVR2,#8;置数据个数MOVLP:
MOVA,R0;将8个数据依次移入31H38HMOVR1,A;INCR0;INCR1;DJNZR2,MOVLP;LCALLWRNB;发送AT24C02片内子地址及8个数据RET;,【例8-5】同例8-4,数据改为16个,试编程。
解:
AT24W1:
LCALLVAT24W;调用写8个数据子程序(第1次写)LCALLDLY10ms;调用延时10ms子程序(略)AT24W2:
MOVMTD,#58H;置第2次写AT24C02片内首址SADR(30H)=58HMOVR0,#18H;置第2次写8个数据原存放区首址MOVR1,#31H;置第2次写8个数据串行发送存放区首址MOVR2,#8;置第2次写数据个数MOVLP2:
MOVA,R0;将第2次写8个数据依次移入31H38HMOVR1,A;INCR0;INCR1;DJNZR2,MOVLP2;LCALLWRNB;第2次写AT24C02RET;,解:
AT24W3:
MOVSLA,#10100000B;置写AT24C02寻址字节MOVNUMB,#7;置写入数据字节数N+1(多一个片内子地址)MOVMTD,#52H;置写AT24C02片内子地址首址SADR(30H)=52HMOVR0,#10H;置6个数据原存放区首址MOVR1,#31H;置6个数据串行发送时存放区首址MOVR2,#6;置数据个数MOVLP3:
MOVA,R0;将6个数据依次移入31H36HMOVR1,A;INCR0;INCR1;DJNZR2,MOVLP3;LCALLWRNB;发送AT24C02片内子地址及6个数据LCALLDLY10ms;调用延时10ms子程序(略)AT24W4:
MOVNUMB,#3;置第2次写入字节数N+1(多一个片内子地址)MOVMTD,#58H;置第2次写AT24C02片内首址SADR(30H)=58HMOV31H,16H;将后2个数据移至发送区MOV32H,17H;LCALLWRNB;第2次写2个数据RET;,【例8-6】同例8-4,但要求将8个数据写入AT24C02的52H59H。
AT24RD:
MOVMTD,#50H;置AT24C02读出数据区首址SADRMOVSLA,#10100000B;置写AT24C02寻址字节MOVNUMB,#1;置写入数据字节数LCALLWRNB;启动并发送AT24C02读出单元子地址SADRMOVSLA,#10100001B;置读AT24C02寻址字节MOVNUMB,#10H;置读出字节数LCALLRDNB;读16个数据按协议存放在40H(首址MRD)4FH中MOVD:
MOVRO,#10H;将接收16个数据转移至10H1FHMOVR1,#MRD;MOVA,R1;MOVRO,A;INCRO;INCR1;CJNERO,#20H,MOVD;RET;,【例8-7】将例8-5写入AT24C0250H5FH中的16个数据读出,存入内RAM10H1FH,设VIIC软件包已装入ROM,VSDA、VSCL、SLA、NUMB、MTD、MRD均已按8.3.2软件包小结中协议定义。
解: