内容文本微机_第1页
内容文本微机_第2页
内容文本微机_第3页
内容文本微机_第4页
内容文本微机_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Ch9 串行通口及应用 9.1 9.2串行通信基础MCS-51单片机的串行口 9.3点对点串行通信 9.4串行通信总线9 串行通9.4口及应用总通Ô总线及所连接的器件或设备了总线。Ô在监测与领域,该总线叫做分布式系统或集散系统;Ô若采用主从方式管理总线,则称系统为一点对多点的多机通;Ô若采用支持多主设备的管理方式,则称为多点对多点的多机通。9 串行通9.4口及应用总通Â I2C总线Ô(InterIntegratedCircuit)是Philips公司开发的一个双向2线总线,用于IC之间的通信,也称为Inter IC。Ô接口简

2、单,解决了数字电路设计中遇到的很多接口问题,已成为一个事实上的国际标准。9 串行通9.4口及应用总通Â I2C总线工作原理ª 总线器件Ô 器件:连接到总线上的ICÔÔ 主器:数据到总线的器件;:从总线接收数据的器件件:总线的器件;从件:被主件寻址的器件 每个器件都有一个唯一的地址识别,无论是MCU还是ADC、DAC;Ô 连接到总线的器件数量只受总线的最大电容限制;L 是一个多主机总线,当多个主机使用总线发生方法解决。或争用时通过仲裁L 大多数应用为主从式,即MCU为主机,其它均为从机。9 串行通9.4口及应用总通Â I2C总

3、线工作原理ª 总线信号Ô SCL(serial clock):串行时钟,双向,用于同步数据位的传输,空闲电平;通常由主机发出,最大频率为:标准模式100KHz、快速模式400KHz、超快速模式1MHz、高速模式3.4MHz;Ô SDA(serial data):串行数据,双向,用于传输数据位,空闲电平9 串行通9.4口及应用总通Â I2C总线工作原理ª 总线信号 所有器件的输出必须是漏极开路或集电极开路(线与)形式,总线要通过一个上拉电阻(R1、R2)连接到电源Vcc;L 主要电气规范:引脚最大输入电容10pF 低电平输入电压: . .高电平输

4、入电压:0.7Vcc Vcc(max) + 0.5 V或5.5 V,低电平输入电流:320mA,高电平输入电流:Ii 10µA9 串行通9.4口及应用总通ÂI2C总线工作原理ª数据传送数据传送总是以一个启始条件S开始、以一个停止条件P结束的;SDA上的数据只能在SCL处于低电稳定;ÔÔÔMSB;每个字节后必须跟一个响应位ACK,表示从机已接收到一个字节数据,方Ô法是:主机SDA(高电平),从机将SDA变为低电平;Ô传输完成1字节后,紧接着传输下一个字节,每次传输的字节数不受限制,直至结束。到SDA线上的数据必须以字

5、节(8 bit)为,首先传输的bit应该是才能改变,在SCL高电必须保持9 串行通9.4口及应用总通Â 串行E2PROM 24LC04B:Microchip Technology Inc.生产的、符合I2C总线标准的E2PROM器Ô 4 KBit512×8bit字节地址范围000H01FFH512Byte9 串行通9.4口及应用总通Â 串行E2PROM 24LC04B:内部结构Ô SDA:串行数据Ô SCL:串行时钟,最大频率400KHz。Ô 地址送入“Address Register and Counter”、通过“Y D

6、ecoder、X Decoder”选择器的Byte;数据送入“16 byte Data Buffer”;9 串行通9.4口及应用总通Â 串行E2PROM 24LC04B:内部结构Ô Control Logic完成I2C接口和器读写操作,ÔWP:写保护输入,=1时,对保护器区域进行与写相关的任何操作;Ô Vcc:电源正极输入、范围2.55.0VDC,Vss:电源负极,Ô HV Generator:产生数据写入需要的高电压。9 串行通9.4口及应用总通9 串行通9.4口及应用总通Â 串行E2PROM 24LC04B:写入数据字节写方式页写

7、方式ª 字节写方式时序Ô 1010B标识码Ô地;A2A1ÔÔ器地址最A8;512B个单元需要9位地址。P0R/W:读写位,0写入、1读出;Ô 发出停止条件P后,24LC04B内部启动数据写入操作。9 串行通9.4口及应用总通Â 串行E2PROM 24LC04B:写入数据ª 页写方式时序写入16个字节后、发出停止条件P,启动数据写入操作。L 24LC04B没有提供写入完成状态标志9 串行通9.4口及应用总通Â 串行E2PROM 24LC04B:读出数据读当前地址字节数据随机读字节数据顺序读字节数据Ô

8、; 读当前地址字节数据读出“地址计数器(Address Register and Counter)” 数据字节保存的地址的9 串行通9.4口及应用总通Â 串行E2PROM 24LC04B:读出数据Ô 随机读字节数据读任意地址的数据字节¬先¬接着¬写入读出字和地址,确定“Address Register and Counter”中的值;字,随后24LC04B输出1字节数据;停止条件而不ACK,终止随机读。L 读出字节数据后,“Address Register and Counter”自动加1,指向下一个字节。9 串行通9.4口及应用总通Â

9、; 串行E2PROM 24LC04B:读出数据Ô 顺序读字节数据在当前读和随机读中,若主机ACK,则从机继续输出数据。类似随机读字节数据,只要读出一个字节后应答ACK=0,系统将自动增加地址,并随时后面单元的数据读出。9 串行通9.4口及应用总通Â MCS51单片机的I2C接口软件模拟方法实现与24LC04B接口;、接收缓冲区BFDASCLSDAEQUEQUEQU56HP1.0P1.19 串行通9.4口及应用总通Â MCS51单片机的I2C接口;STC:启始条件子程序;SDA=1SETBNOPSDA;SCL=0CLRNOPSETBSCL;SCL=1SCL;,保证时

10、序要求NOP;SDA=1SETBSDA;,保证时序要求NOPCLR;SDA=0SDA NOP;SCL=0CLRSCLRET9 串行通9.4口及应用总通Â MCS51单片机的I2C接口;停止条件子程序SPC:;SDA=0CLRSDA NOP;SCL=0CLRNOPSETBSCL;SCL=1SCL;,保证时序要求NOP;SDA=0CLRSDA;,保证时序要求NOP SETBSDA NOP;SDA=1;SCL=0CLRRETSCL9 串行通9.4口及应用总通Â MCS51单片机的I2C接口;1字节子程序T1B:T1B1:R2,#8SCL;8bit计数;SCL=0MOVCLR;Cy

11、D7(要;SDACy的数据在A中)RLCMOV NOP NOPSETBASDA,C;,保证时序要求;SCL=1SCL;,保证时序要求NOPDJNZR2,T1B1RET9 串行通9.4口及应用总通Â MCS51单片机的I2C接口;接收1字节子程序;8bit计数;SCL=0:令24LC04B输出1 bitR1B:R1B1:R2,#8SCLMOVCLR;,保证时序要求NOPSETB SETB NOPNOP;设置P1.1为输入;SCL=1SDASCL;,保证时序要求C,SDAA R2,R1B1;Cy SDA;D0Cy (读出的数据在A中)MOVRLCDJNZRET9 串行通9.4口及应用总通

12、Â MCS51单片机的I2C接口;读出ACK子程序RACK:;SCL=0CLRNOPSCL;,保证时序要求NOPSETB MOV JCRET;SCL=1;Cy SDA;无确认,等待SCLC,SDA RAC1RAC1:9 串行通9.4口及应用总通Â MCS51单片机的I2C接口;写1字节数据子程序W1D:;开始条件LCALLMOVSTCA,#0A0H写入字和地址(000B);1字节子程序;读出ACKLCALLLCALLT1BRACKA,#10HT1BRACK;8位地址MOVLCALLLCALL;读出ACK;取要写入的数据A,BFDAT1BMOVLCALL;数据;读出ACKLC

13、ALLRACK;停止条件LCALLRETSPC9 串行通9.4口及应用总通;随机读1字节数据子程序R1D:;开始条件写入地址LCALLSTCA,#0A0HT1B RACK A,#10H;和字MOVLCALL LCALL MOV;读出ACK;低8位地址LCALLLCALL LCALLT1BRACK STC A,#0A1;读出ACK;开始条件读出字MOVLCALLLCALLT1BRACK;读出ACK;接收1字节LCALLLCALLR1BSPC;停止条件BFDA,A;保存数据MOVRET9 串行通9.4口及应用总通Â SPI工作原理Ô SPI (Serial Peripheral

14、 Interface):串行外设接口,一串行总线,Ô 采用3线连接1个主机(Master)管理多个从机(Slave)的,Ô用于单片机与多个器件之间、或多个单片机之间的高速同步数据传送。Ô 8Bit Shift Register:进行串入/并出与并入/串出的转换Ô MISO (MasterIn/SlaveOut):主入从出,串行数据;Ô MOSI (MasterOut /SlaveIn),主出从入,串行数据;Ô SPI Clock Generator:产生移位寄存器需要的移位时钟信号SCKÔ SS (Slave Select)

15、:主机输出选择从机,通信过程。 优点:数据传送速度高,缺点:需要I/O口线选择从机9 串行通9.4口及应用总通Â SPI工作原理为了配合主从机的移位时序,主机SCK极性CPOL(Clock Polarity)、SCK与MISO、 MOSI间的相位关系CPHA (Clock Phase)是可变的。Ô CPOL = 0CPHA=1SSSCK=0¬主机输出SS选择从机,主机MOSI、从机MISO输出MSB(b7)位;¬主机输出SCK,在SCK:主机将MISO上的数据位、从机将MOSI上的移入移位寄存器;¬ 主机输出SCK,在SCK:主机MOSI、从机

16、MISO移出1位数据;¬主机输出8个SCK后,b0(LSB)已经移出,主机MOSI保持逻辑1、从机MISO输出MSB;¬主机将SS变高,从机MISO变为高阻状态。9 串行通9.4口及应用总通Â SPI工作原理Ô CPOL =0CPHA=0SSSCK=0¬ 主机输出信号SS选择从机,从机MISO输出LSB(b0)位;¬ 主机输出SCK,在SCK:主机MOSI、从机MISO移出1位数据;¬ 主机输出SCK,在SCK:主机将MISO上的数据位、从机将MOSI上的移入移位寄存器;¬ 主机输出8个SCK后,b0(LSB)已经

17、移出,主机MOSI保持逻辑1、从机MISO输出其LSB;¬ 主机将SS变高,从机MISO变为高阻状态 。9 串行通9.4口及应用总通Â 串行闪存M25P1616 MBit闪存(Flash memory)采用串行接口SPI,最高时钟频率75MHzÔ 16 Mbit的组织2MByte32个区(sector) 64KByte/区HOLD256Byte为1页(page) WS字节地址范围000000H0FFFFFHÔ readonly memory area:Ô Status Register:包含状态位和标识码(ID)位9 串行通9.4口及应用总通&

18、#194; 串行闪存M25P16Ô D:串行数据输入,它通过I/O Shift Register接收指令、地址和数据Ô 指令送入Control Logic,工作状态,Ô 地址送入Address Register and Counter、通过Y Decoder、X Decoder选择存的Byte,Ô 数据通过“256 byte Data Buffer”写入Ô Q:串行数据输出器。HOLD WS9 串行通9.4口及应用总通Â 串行闪存M25P16Ô C:移位时钟,/S:选择输入Ô 支持SPI的模式规律:在时钟C移入数据

19、,在时钟C移出数据。Ô /W:写保护输入Ô /HOLD:暂停串行数据Ô Vcc:电源正极输入、范围2.73.6VDC,Vss:电源负极,Ô High voltage Generator:产生数据写入需要的高电压。9 串行通9.4口及应用总通Â 串行闪存M25P16Ô 按字节读出的指令时序读出数据有按字节读和按字节高速读2种方式S¬ /S选择M25P16;¬ 接收1 byte按字节读数据指令码(03H);¬ 接收24 bit地址A23A0,地址可以是000000H0FFFFFH中的任何值;¬ 输出

20、1 byte读数b7b0,输出后地址自动加1;¬ 若继续输出数据字节,保持/S低,继续输出;若不,使/S结束指令。9 串行通9.4口及应用总通Â 串行闪存M25P16Ô 页写入方式写入数据的指令时序即一次写入256字节数据,且页地址最好从00H开始。SS¬ /S选择M25P16;¬ 接收1 byte写入数据页指令码(02H);¬ 接收24 bit地址A23A0,地址可以是000000H0FFFFFH中的任何值;9 串行通9.4口及应用总通Â 串行闪存M25P16Ô 页写入方式写入数据的指令时序SS¬ 接收

21、第1 byte数据;接收第2 byte数据, ;¬ 接收256 byte数据后,使/S结束指令,M25P16开始写入数据。 在写入数据前必须先清除(Erase)器,清除就是把器内容写入1。一次可以清除1个区,也可一次清除整个器9 串行通9.4口及应用总通Â MCS51单片机扩展闪存当需要大量数据时,使用串行闪存扩展是一个合适的方法。Ô D3:线性集成稳压器,为D2提供3V电源;Ô D4:OC输出门(74LVC07),作用是转换逻辑电平。Ô AT89S53与MCS51单片机兼容,但内部含有SPI接口。 +5V+5V+3V+5VD1D2D3AT89

22、S53 D4M25P16TPS76030 P1.4SSSVcc +3V OutIn VccMOSI EN P1.5DHOLD P1.6 MISOQWGND VssSCKP1.7CVss9 串行通9.4口及应用总通Â MCS51单片机扩展闪存Ô 为了操作SPI设立了SPCR、SPSR和SPDR等SFR。Ô SPDR:SPI数据寄存器,与接收的同名、同地址。Ô SPCR:SPI寄存器9 串行通9.4口及应用总通Â MCS51单片机扩展闪存Ô SPSR:SPI状态寄存器9 串行通9.4口及应用总通Â MCS51单片机扩展闪存P1,

23、#0FFHSPCR,#0BFH SPCR,#0;初始化SPI;SPE=0;SPIE=0,SPE=0,MOVANL MOV;DORD=0,MSTR=1;CPOL=0,CPHA=0,;SPR1=1,SPR0=0SPCR,#12HORLNOPORLSPCR,#40H;SPE=1,打开SPIMOVS1BSPI:SPDR,A;写入1 Byte:A = 要写入的数据S1BSP1:MOVJNB RETA,SPSRACC.7,S1BSP1;读状态寄存器;完成?;是:返回9 串行通9.4口及应用总通Â MCS51单片机扩展闪存;写入256字节;M25P16写使能;缓冲区首地址WRDAT:LCALLMO

24、VWRMENDPTR,#2000H;选择M25P16CLRMOV LCALL MOVLCALLP1.4A,#02H S1BSPI A,#00HS1BSPI;页数据写入指令;24 Bit地址:A2316A,#08HS1BSPI;24 Bit地址:A158MOVLCALLA,#00HS1BSPI;24 Bit地址:A70MOVLCALL9 串行通9.4口及应用总通Â MCS51单片机扩展闪存;写入256字节;256字节计数;取1字节R6,#0A,DPTRMOVWRDA1:MOVXSPDR,AA,SPSR ACC.7,WRDA2 DPTR R6,WRDA1MOVWRDA2:MOVJNB I

25、NC DJNZ;读状态寄存器;1字节完成?;修改地址指针;256字节完成?A,SPDRP1.4;复位SPIE;启动M25P16页写入MOVSETB9 串行通9.4口及应用总通Â MCS51单片机扩展闪存;写入256字节WRDA3:NOPCLR;读M25P16状态寄存器P1.4A,#05HS1BSPI SPDR,#00H A,SPSRACC. ,WRDA5;指令MOVLCALL MOVWRDA5:MOVJNB;写入数据为00H或任意;读状态寄存器;接收完成?SETBMOVP1.4A,SPDR;是:状态寄存器ACC.0,WRDA3;页写入结束?;返回JBRET9 串行通9.4口及应用总通

26、Â MCS51单片机多机通信多个MCS51单片机之间可进行多机通信,一个级主从式总线分布式系统。Ô 只有1个单片机为主机,其它单片机均为从机;Ô 为了识别从机,必须给它们预先分别分配一个唯一的地址或编号1N。Ô 支持多机通信硬件条件在方式2、3时,SM2和RB8对RI的在SM2=1时,若RB8=0:则不置位RI 主机从机 1从机 N ··· ··· D TxDR TxDR Tx RxD MCS-51xD MCS-51xD MCS-51 P3.1 P3.09 串行通9.4口及应用总通Â

27、MCS51单片机多机通信Ô 多机¬ 主机首先法从机地址,且置RB8=1;数据时,置RB8=0;¬ 从机初始化后,均置SM2=1,通过RI等待接收的地址;¬ 从机接收1字节数据(地址)后,与预置的的地址进行比较;Ô相等:主机要与进行通信(被寻址);置SM2=0,以便后续数据的RB8=0能激活RI;Ô不相等:主机不是与通信的,保持SM2=1;主机后续数据时RB8=0,激活RI。9 串行通9.4口及应用总通Â MCS51单片机多机通信MCS51单片机的串行口是一个UART,那么如何传送一个数据包呢?Ô 自定义十六进制数据

28、包¬地址:从机地址,1个字节;¬数据1N:要传送的数据,均为1个字节;¬:占1或2个字节,可按照以前的方法得到。Ô 如何确定一个数据包开始和结束呢?¬连续数据包,一旦接收字节的时间间隔大于某个值(如5ms),就表明当前数据包已经完成,当然随后收到的数据也将是新的数据包。¬可以设立一个定时器监督接收字节的间隔,一旦间隔大于5ms就处理接收的数据包,处理完成后准备接收新的数据包。并9 串行通9.4口及应用总通Â MCS51单片机多机通信F 现有MCS51单片机的fosc =11.0592MHz,请编写程序实现主从式多机串行通信,

29、波特率为19200 bps。解:根据题意,设置串行口工作在方式3,使用CT1产生收发时钟,使用CT0监督接收字节的时间间隔。ª CT0 5mS定时:方式1计数脉冲频率=11059200/12 Hz,5mS需要脉冲数=5×103×(11059200/12)=4608初值:2164608=655364608=60536 =EE00H考虑中断响应及重置初值需要的时间,设初值=EE07Hª CT1方式219200 bps查表, 初值=FD H,SMOD=1注: 以方式3,11bit 需要时间 11/119200=13uS,故有可能正在接收一个字节时,发生5mS定

30、时中断。9 串行通9.4口及应用总通为了便于编程和提高程序执行效率,设立必要的标志和缓冲区。ª 主机程序;接收缓冲区 80HFFHBFSREQU80H;缓冲区FFH80HBFSTEQU0FFH;从机地址SADREQU30H;串行接收时间间隔定时器TSCREQU31H;正在串行接收标志MKSCEQU20H.0;接收到一个数据包标志MKSREQU20H.1;串行任务标志MKSTEQU20H.29 串行通9.4口及应用总通Â MCS51单片机多机通信主机程序ORG0000H;初始化LJMPORGSTR000BH;CT0溢出中断中断服务程序PUSHLJMP ORG PUSHPUSH

31、PSWT0INT 0023H ACCPSW;串行口中断服务程序地址LJMPSCINTSTR:P3,#01H;P3.0(RXD)为输入ORL MOV MOV MOVIE,#12HTCON,#00H IP,#10H;EA=0,ES=1,ET0=1;关闭CT0、CT1;串行口中断优先级最高9 串行通9.4口及应用总通Â MCS51单片机多机通信主机程序TMOD,#21HTH0,#0EEH TL0,#07H;CT1定时方式2,产生收发时钟;CT0定时方式1,5ms初值;要考虑中断响应和重装初值指令MOVMOV MOVTH1,#0FDHTL1,#0FDH;波特率=19200BPS的初值MOVM

32、OV20H,#0;复位各种标志MOVPCON,#80HSCON,#0C0H TCON,#50H EA;SMOD=1,波特率=19200bps;Mode 3/9bit,SM2=0;启动CT0、CT1;开中断;主机主程序ORLMOV ORL SETB MAIN:9 串行通9.4口及应用总通Â MCS51单片机多机通信主机程序MAIN:;主机主程序 MKST,MAN1MKST;有任务?JNBCLR ;组织数据到缓冲区R1,#BFSTR3,#N;缓冲区指针字节数,包括从机地址字节MOVMOVA,SADRTB8;取从机地址;TB8=1表示MOVSETB的是从机地址SBUF,A;启动串行MOVR

33、0,#BFSRMKSC;接收缓冲区指针;清除正在串行接收标志MOVCLRMAN1:MKSR,MAINMKSR;接收到一个数据包?JNBCLR;处理数据包 LJMPMAIN9 串行通9.4口及应用总通Â MCS51单片机多机通信主机程序SCINT:;主机RI+TI中断服务程序TI,SCISRI,SCIR;中断?JBJB;接收中断?SCIE:POPPOPPSWACC RETISCIS:;清除中断标志CLRDJNZSETB SJMPTIR3,SCIS1 RENSCIE;结束?;是:打开接收,等待响应SCIS1:A,R1TB8SBUF,A;否:继续;TB8=0表示;MOVCLR MOV的是数

34、据;修改缓冲区指针DECSJMPR1SCIE9 串行通9.4口及应用总通Â MCS51单片机多机通信主机程序SCIR:;清除接收中断标志CLRRITSCR,#0 MKSC A,SBUF;复位时间间隔定时器MOV;置位正在串行接收标志SETB;读接收的数据字节MOVR0,A;保存数据MOV;修改接收缓冲区指针INCR0SJMPSCIE9 串行通9.4口及应用总通Â MCS51单片机多机通信主机程序;主机CT0溢出中断中断服务;任务:数据包间隙超过5mS,认为是一个新的数据包T0INT:TL0,#0EEHTH0,#07H TSCR TSCR,#2,T0I9 TSCR,#0 MK

35、SC,T0I9 MKSRPSWMOVMOV INC CJNE MOV JNB SETB POP RETI;重装入初值;时间间隔计数(5ms计数);=10ms?;正在串行接收?;置位接收到一个数据包标志;恢复断点现场T0I9: 接收过数据MKSC=1,且间隔达到 10ms,认为接收完一个数据包9 串行通9.4口及应用总通Â MCS51单片机多机通信从机程序;接收缓冲区 80HFFH;与主机的相同;本机已被寻址标志BFSREQU EQU80HMKAD20H.0;接收到一个数据包标志MKSREQU20H.1ORGLJMPORG PUSH0000HSTR000BH PSW;初始化;CT0中断

36、中断服务程序LJMPORGT0INT0023H;串行口中断服务程序地址PUSHPUSH LJMPORLACCPSW SCINTP3,#01HSTR:;P3.0为输入9 串行通9.4口及应用总通Â MCS51单片机多机通信从机程序;与主机的相同;Mode 3/9bit,SM2=1;启动CT0、CT1 MOV ORLSCON,#0E0HTCON,#50H;打开串行口接收;开中断;从机主程序SETBSETB RENEAMAIN:MKSR,MAINMKSR;接收到一个完整数据包?JNBCLR;处理数据包,并响应数据 LJMPMAINSCINT:;从机RI+TI中断服务程序TI,SCISRI,SCIR PSW ACC;中断?JBJB POP POP RETI;接收中断?SCIE:9 串行通9.4口及应用总通Â MCS51单片机多机通信从机程序SCIS:;清除中断标志CLR SJMPTI;程序与主机的相同SCIESCIR:;清除接收中断标志;读接收的数据字节;本机已被寻址?;本机地址?;置位本机已被寻址标志CLRMOV JB CJNE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论