《最新单片机第六章幻灯片.ppt》由会员分享,可在线阅读,更多相关《最新单片机第六章幻灯片.ppt(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、一、一、串行通信的基本概念串行通信的基本概念 基本方式基本方式 : 并行:并行:8位或位或16位数据同时传送,速度快、传输位数据同时传送,速度快、传输 线多、传输距离近。线多、传输距离近。 串行:数据按位传输,速度慢、传输线少、传串行:数据按位传输,速度慢、传输线少、传 输距离远。输距离远。 SYN同步字符同步字符CRC终止字符终止字符开始开始终止终止数据块数据块同步通信数据格式同步通信数据格式二二、MCS51单片机的串行口单片机的串行口 1、功能与结构、功能与结构 : MCS51系列单片机内部有一个全双系列单片机内部有一个全双工的串行端口:工的串行端口:P3.0(RXD)、)、P3.1(TX
2、D),有),有4种工作方式种工作方式 。二二、MCS51单片机的串行口单片机的串行口 串行口有两个独立的接收、发送缓冲器:串行口有两个独立的接收、发送缓冲器:SBUF,占用同一地址(占用同一地址(99H)。发送时,只写不读;接收)。发送时,只写不读;接收时,只读不写;中断标志是时,只读不写;中断标志是RI/TI。二二、MCS51单片机的串行口单片机的串行口 串行口控制寄存器串行口控制寄存器SCON: 字节地址字节地址98H,可位寻址。,可位寻址。 SCON格式如下:格式如下:SM0SM1SM2RENTB8RB8TIRI9F9E9D9C9B9A9998 D7D6D5D4D3D2D1D0SCON位
3、地址位地址串行口控制寄存器串行口控制寄存器SCON: SM0、SM1:串行口工作方式设置位:串行口工作方式设置位 SM2:方式:方式2和方式和方式3的多机通讯控制位的多机通讯控制位 (方式(方式0不用)不用) REN:串行接收允许位,:串行接收允许位, 0禁止接收,禁止接收,1允许接收允许接收 TB8:在方式:在方式2、3中,是要发送的第中,是要发送的第9位数据。位数据。 RB8:在方式:在方式2、3中,是要接收的第中,是要接收的第9位数据。位数据。 (TB8和和RB8在方式在方式0中均不用)中均不用) TI:发送中断标志,须由软件清零。:发送中断标志,须由软件清零。 RI:接收中断标志,须由
4、软件清零。:接收中断标志,须由软件清零。 电源控制寄存器电源控制寄存器PCON 字节地址字节地址87H,无位地址。,无位地址。 其中与串行接口有关的只有其中与串行接口有关的只有D7位位 (PCON的最高位)的最高位)SMOD:波特率加倍位,:波特率加倍位,1加倍,加倍,0不加倍不加倍 2、串行口的四种工作方式、串行口的四种工作方式 SM0SMl工作方式工作方式方式简单描述方式简单描述波特率波特率000移位寄存器移位寄存器I/O振荡频率振荡频率1201110位位UART可变可变10211位位UART振荡频率振荡频率32或振荡频率或振荡频率6411311位位UART可变可变方式方式0 8位移位寄存
5、器输入输出方式位移位寄存器输入输出方式串行数据通过串行数据通过RXD端入、出,低位在前端入、出,低位在前TXD端输出同步移位脉冲,波特率为端输出同步移位脉冲,波特率为fosc/12方式方式0主要用于主要用于I/O口的扩展口的扩展方式方式1 10位异步通信方式:位异步通信方式:1个起始位(个起始位(0)、)、8个个数据位(低位在前)、数据位(低位在前)、1个停止位(个停止位(1)TXD端发送数据端发送数据,RXD端接收数据端接收数据方式方式1波特率可变波特率可变 :波特率波特率2SMOD/32(T1的溢出率)的溢出率)溢出率:每秒钟溢出的次数,定时时间的溢出率:每秒钟溢出的次数,定时时间的倒数。
6、倒数。 方式方式2、3 11位异步通信方式:位异步通信方式:1个起始位(个起始位(0)、)、8个个数据位(低位在前)、数据位(低位在前)、1个附加的第个附加的第9位和位和1个停止位(个停止位(1) TXD端发送数据端发送数据,RXD端接收数据端接收数据方式方式2只有两种波特率:只有两种波特率:fosc/32或或fosc/64。(。(2SMOD/64fosc) 。方式方式3波特率可变:波特率可变:波特率波特率2SMOD/32(T1的溢出率)的溢出率) 3、多机通信、多机通信 主从式多机通信系统如下图。利用主从式多机通信系统如下图。利用SM2控制位实现控制位实现 主机TXDRXDTXDRXDRXD
7、RXDTXDTXD从机2从机1从机n3、多机通信、多机通信 RB81 引起中断(地址)引起中断(地址) SM21 RB80 不引起中断(数据)不引起中断(数据)接收接收 RB81 SM20 均引起中断均引起中断 RB804 、注意:在串行通信中,定时器T1作为波特率发生器使用时,通常选用定时方式2。原因一是操作方便,二是避免了因为重装时间常数而带来定时误差(注意,T1应关中断)。三、串行口应用举例三、串行口应用举例 串行口信号发送流程串行口信号发送流程 :置串口方式(置串口方式(SCON)清中断标志清中断标志TI发送数据送发送数据送SBUF等待等待TI为为1(查询方式或中断方式)(查询方式或中
8、断方式)清清TI,重复发送数据,重复发送数据 三、串行口应用举例三、串行口应用举例 串行口信号接收流程串行口信号接收流程 :置串口方式(置串口方式(SCON)置置REN1,清中断标志,清中断标志RI等待等待RI为为1(查询方式或中断方式)(查询方式或中断方式)从从SBUF取数据取数据清清RI,重复接收数据,重复接收数据 例例1: 由串行口发送带偶校验位的由串行口发送带偶校验位的ASC码数码数据块。设数据块在片内据块。设数据块在片内30H3FH单元。单元。 解:设单片机采用解:设单片机采用12MHZ晶振,串行口工晶振,串行口工作于方式作于方式1,T1用作波特率发生器,工作于用作波特率发生器,工作
9、于方式方式2,PCON中的中的SMOD位为位为0,发送的波,发送的波特率为特率为1200。 例例1: 定时器计数器定时器计数器T1初值计算:初值计算:由:波特率由:波特率2SMOD/32(T1的溢出率)的溢出率) SMOD取取0值值有:有:T1的溢出率的溢出率12003238400T1的溢出率的溢出率: N=1/t=fosc/12x(256-x) T1初值初值 : X=230=0E6H 例例1: 另:根据题意,另:根据题意,TMOD的方式控制字为的方式控制字为 20H(方式(方式2)串行口串行口SCON方式控制字为方式控制字为40H(方式(方式1)相应的发送程序如下:相应的发送程序如下:例例1
10、: Tstart: Mov TMOD,#20H Mov TL1,#0E6H Mov TH1, #0E6H Mov SCON, #40h Mov R0,#30h Mov R7,#10H SETB TR1Loop: MOV A,R0 Mov c, p Mov ACC.7 , c Mov SBUF,A Wait:jnb TI,WaitClr TiInc R0 Djnz R7,loop Ret例例2: 由串行口接受带偶校验位的由串行口接受带偶校验位的ASC码数据码数据块。设接受的数据块共块。设接受的数据块共10H个字节,存放于个字节,存放于片内片内40H4FH单元中。单元中。 解:设单片机采用的晶振频
11、率、波特率、解:设单片机采用的晶振频率、波特率、SMOD位的值等均同上题。相应的接收子程位的值等均同上题。相应的接收子程序如下:序如下: 例例2: Rstart: Mov TMOD,#20H Mov TL1,#0E6H Mov TH1, #0E6H Mov R0,#40h Mov R7,#10H Setb TR1 Loop: Mov SCON, #50hWait: jnb RI,wait Mov A,SBUF Clr RI Mov c,p Jc error Anl A,#7Fh Mov R0,a Inc R0 Djnz R7,loop Ret error:出错处理,略。:出错处理,略。例例3:
12、设T1选工作方式2,fosc=11.0592MHz,SMOD=0,串行口工作于方式1,试设计一个波特率为2400的发生器。解:2400=n/32有 n=76800 T1的溢出率的溢出率: N=1/t=fosc/12x(256-x) 故 x=244D=0F4H MOV SCON , #40HMOV TMOD , #20HMOV PCON , #00HMOV TL1 , #0F4HMOV TH1 , #0F4HSETB TR1例例4:编写发送程序,将60H6FH的数据块从串行口输出。将串行口定义为工作方式2发送,TB8作奇偶校验位。 MOV SCON ,#80HMOVPCON ,#80HMOVR0
13、 , #60HMOVR7 , #10H LOOP:MOVA , R0MOVC , PSW.0MOVTB8 , CMOVSBUF , A WAIT: JBC TI , CONTSJMP WAIT CONT: INCR0DJNZ R7, LOOPRET例例5:设串行口外接一个串行输入设备,单片机和该设备采用11位异步通信方式,波特率2400,晶振为11.0592MHz,串行口选择工作方式3,定时器T1选工作方式2,SMOD=0时,计算得TL1初始值为0F4H。编制其接收程序。 PVE: MOVTMOD,#20HMOVPCON, #00HMOVTH1, #0F4HMOVTL1, #0F4HSETRT
14、R1MOVR0, #50HMOVR7, #10HMOVSCON, #0D0H WAIT:JBCRI, PRISJMPWAIT PRI:MOVA, SBUFJNB PSW.0,PNPJNB RB8, PERSJMPRIGHT PNP: JBRB8, PER RIGHT:MOVR0, AINCR0DJNZR7, WAITCLR PSW.5;奇偶校验正确RET PER: SETBPSW.5;奇偶校验出错RET四 串行扩展I/O接口:1.利用SPI扩展I/O接口:扩展并行输出口:利用SPI扩展并行输出口示意图,见图6-41。 图 6-41 利用SPI扩展并行输出口 RXD(DATA)P1.0TXD(C
15、LK)Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8QSQSSTRCLKOED4094QSQSOEQ8Q7Q64094CLKSTRQ4Q3Q2Q1Q5D+5V+5V80C51如图6-41,通过并行口输出片内RAM中20H和21H两个单元数据。 MOV R7,#2 ;置计数器 MOV R0,#20H ;缓冲区指针 MOV SCON,#00H ;设置串行口为方式0 CLR P1.0 ;允许串行接收OUT1:MOV A,R0 ;取数据 MOV SBUF,A ;启动发送过程 JNB TI,$ ;等待一帧发送结束 CLR TI INC R0 ;指向下一数据 DJNZ R7,OUT1 SETB P1.0
16、;送出并行数据 RET 扩展并行输入口: 利用SPI扩展并行输入口的示意图,见图6-42。 DS图 6-42 利用SPI扩展并行输入口(CLK)P1.0TXD RXD(DATA)Q8P/S4014CLKP8P4P7 P6 P5P3 P2 P180C51Q7Q6CLKQ6Q7Q8P/S4014DSP7P8P6 P5 P4 P3 P2 P1图6-42中,经串行口从16位的并行扩展口读入2个字节数据,并存入片内RAM的20H和21H单元中。 MOV R7,#2 ;置计数器 MOV R0,#20H ;缓冲区指针 CLR P1.0 ;置入并行数据 SETB P1.0 ;允许串行移位 MOV SCON,#
17、10H 串行口方式0,允许接收stop: JNB RI,$ ;等待一帧接收结束 CLR RI MOV A,SBUF ;读入数据 MOV R0,A ;送入缓存区 INC R0 ;调整指针 DJNZ R7,stop ;未完,继续 RET例例6.56.5:用中断法编写串行口方式1下发送程序。设单片机主频为6 MHz,定时器 T1用作波特率发生器,波特率为2400 bps,发送字符块在内部RAM的起始地址为BLOCK单元,字符块长度为LEN。要求奇校验位在数据的第7位发送,字符块长度LEN先发送。解:为使发送波特率为2400 bps,取SMOD=1,计算得TH1和TL1的时间常数初值为0F4H。 本程
18、序由主程序和发送子程序两部分组成。其流程图如图6-13所示。主程序用于定时器 T1和串行口初始化、发送字符块长度字节LEN、中断系统初始化;中断服务程序用于形成奇校验位并加到发送数据第7位和发送这个字符。ORG 2000H BLOCK DATA 20H LEN DATA 14H START:MOV TMOD, #20H ;定时器T1为方式2 M0V TL1, #0F4H ;波特率为2400 MOV TH1, #0F4H ;给TH1送重装初值 MOV PCON, #80H ;令SMOD=1 SETB TR1 ;启动T1 MOV SCON, #40H ;串行口为方式1 MOV R0, # BLOC
19、K ;字符块起始址送R0 MOV A, #LEN M0V R1, A ;字符块长度字节送R1 MOV SBUF, A ;发送LEN字节 SETB EA ;开CPU中断 SETB ES ;允许串行口中断 WAIT:SJMP WAIT ;等待中断发送子程序: ORG 0023H LJMP TXSVE ;转发送服务程序 ORG 2160TXSVE:CLR ES ;关串行口中断 CLR TI ;清TI MOV A, R0 ;发送字符送A MOV C, PSW.0 ;奇偶校验位送C CPL C ;形成奇校验位送C MOV ACC.7,C ;使A中最高位为奇校验位 MOV SBUF, A ;启动发送 DJ
20、NZ R1, NEXT ;所有字符发完停止发送 INC R0 ;未完,字符块指针加1 SJMP ENDT NEXT:CLR ES ENDT:RETI ;中断返回例例6.66.6:用查询法编写串行口在方式3下的接收程序。设单片机主频为6 MHz,波特率为2400 bps,接收数据区起始地址为RBLOCK(内部RAM),接收数据块长度由始发端发送。 解:本程序由主程序和接收子程序组成。 ORG 2000H TBLOCK DATA 40START: MOV TMOD, #20H ;T1工作于方式2 MOV TH1, #0F4H ;设置时间常数初值 MOV TL1, #0F4H SETB TR1 ;启
21、动T1 MOV SCON, #0D0H ;串行口工作于方式3接收 MOV PCON, #80H ;使SMOD=1 MOV R0, RBLOCK ;接收数据区起始址送R0 MOV R3, #00H ;累加和寄存器清零 ACALL RISV ;调接收子程序 : : SJMP $ ;动态暂停接收子程序:接收子程序流程图如图6-14 (b)所示。参考程序为:RISV: CLR RI ;清RI LEN: JNB RI, RXLEN ;等待接收数据块长度字节 CLR RI ;接收完后清RI MOV A, SBUF ;数据块长度字节送A MOV R2, A ;存入R2 ADD A, R3 ;开始求累加和 MOV R3, A ;累加和存入R3 RDS: JNB RI, RDS ;等待接收字符 CLR RI ;接收完后清RI MOV A, SBUF MOV R0, A ;接收字符存入内存 ADD A, R3 ;求累加和 MOV R3, A ;存入R3 INC R0 ;接收数据区指针加1 DJNZ R2, RDS ;若数据块未收完,则继续 RIV: JNB RI, RIV ;等待接收累加和送A CLR RI ;接收完后清RI MOV A, SBUF ;接收到的累加和送A XRL A, R3 ;比较两个累加和 JNZ ERROR ;若不等,则转出错处理 RET ;若相等,则返回