串口与串行通讯.ppt_第1页
串口与串行通讯.ppt_第2页
串口与串行通讯.ppt_第3页
串口与串行通讯.ppt_第4页
串口与串行通讯.ppt_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

,第六章:单片机串口及应用,本讲重点: 51单片机的串行口结构; 与串行口相关的特殊功能寄存器; 串行通讯的波特率设置; 串行口的 4种工作方式及其编程.,串行通讯应用示意图,TXD RXD,RXD TXD,TXD RXD,RXD TXD,RS-232 或485,RS-232 或485,TXD RXD,RS-232,PC机 COM1,COM2,单片机甲、乙之间近距离通讯,单片机甲乙两地之间远距离通讯,单片机与PC机之间的数据通讯,串行通信的基本特征是数据逐位顺序进行传送 串行通信的格式及约定(如:通讯速率、数据块格式、信号电平等)不同,形成了多种串行通信的协议与接口标准。 常见的有: 通用异步收发器(UART)本课程介绍的串口 通用串行总线(USB) I2C总线 CAN总线 SPI总线 RS-485,RS-232C,RS422A标准等等,串行通信,全双工串行接口(UART),数据通信的几个术语: 并行:数据各位同时进行传送 串行:数据逐位顺序进行传送,全双工:(串行通信)收/发可同时进行 半双工:(串行通信)收/发不可同时进行,异步串行通信:以字符为单位进行传送 同步串行通信:以数据块为单位进行传送 波特率(bps.):单位时间传送的位数,51单片机的串行接口,SBUF(发),SBUF(收),发送控制器 TI,接收控制器 RI,移位寄存器,波特率发生器T1,1,A累加器,(门),RxD,TxD,去申请中断,引脚,引脚,CPU内部,串行口的结构,两个同名的接收/发送缓冲寄存器SBUF 指令 MOV SBUF,A 启动一次数据发送,可向SBUF 再发送下一个数 指令 MOV A,SBUF 完成一次数据接收,SBUF可再 接收下一个数,接收/发送数据,无论是否采用中断方式 工作,每接收/发送一个数据都必须用指 令对 RI/TI 清0,以备下一次收/发。,串行口相关的SFR(SCON,PCON),SM0 SM1 SM2 REN TB8 RB8 TI R1,SCON, SM0,SM1:串行口4种工作方式的选择位。 0 0 方式0:8位移位寄存器I/O,波特率固定为 fosc/12 0 1 方式1:10位UART(1+8+1位), 波特率可变,按公式计算 1 0 方式2:11位UART(1+8+1+1位), 波特率固定=fosc x1/32或1/64 1 1 方式3:11位UART(1+8+1+1位), 波特率可变,按公式计算, SM2:串行口多机通信控制位 (作为方式2、方式3的附加控制位),串行口控制寄存器SCON(98H), RI,TI:串行口收/发数据申请中断标志位 1 申请中断; 0 不申请中断, TB8:方式2、3中,是要发送的第9位数据。 多机通信中,TB8=0 表示发送的是数据; TB8=1 表示发送的是地址。(奇偶校验), RB8:在方式2、3中,是收到的第9位数据。 在多机通信中,用作区别地址帧/数据帧的 标志。(奇偶校验),SM0 SM1 SM2 REN TB8 RB8 TI RI, REN:串行口接收允许控制位 = 1 表示允许接收; = 0 禁止接收。,SCON,SMOD GF1 GF0 PD 1DL,电源控制寄存器 PCON(97H) 特殊功能寄存器PCON不能按位寻址, SMOD:在串行口工作方式 1、2、3 中, 是波特率加倍位 =1 时,波特率加倍 =0 时,波特率不加倍。 (在PCON中只有这一个位与串口有关), GF1,GF0:用户可自行定义使用的通用标志位,PCON, PD:掉电方式控制位 =0:常规工作方式。 =1:进入掉电方式: 振荡器停振 片内RAM和SRF的值保持不变 P0P3口维持原状。 程序停止 只有复位能使之退出掉电方式。,SMOD GF1 GF0 PD IDL,PCON, IDL:待机方式(空闲方式)控制位 =0:常规工作方式。 =1:进入待机方式: 振荡器继续振荡 中断、定时器、串口功能继续有效 片内RAM和SRF保持不变 CPU状态保持、P0P3口维持原状 程序停顿。 中断和复位能退出待机,继续后面的程序。,SMOD GF1 GF0 PD IDL,PCON, PD:掉电控制位 =0:常规方式。 =1:掉电方式: 振荡器停振 片内RAM和SRF不变 P0P3口维持原状 程序停止 只有复位能退出掉电, IDL:待机控制位 =0:常规方式。 =1:待机方式: 振荡器继续振荡 中断,定时器,串口有效 片内RAM和SRF不变 CPU状态,P0P3维持原状 程序停顿。 中断和复位能退出待机,继续后面的程序。,SMOD GF1 GF0 PD IDL,PCON,串行口工作方式 0,工作方式0:10位移位寄存器I/O方式,发送:SBUF中的串行数据由RxD逐位移出; TxD输出移位时钟,频率=fosc1/12; 每送出8位数据 TI就自动置1; 需要用软件清零 TI。,接收:串行数据由RxD逐位移入SBUF中; TxD输出移位时钟,频率=fosc1/12; 每接收 8位数据RI就自动置1; 需要用软件清零 RI。,经常配合“串入并出”“并入串出”移位 寄存器一起使用扩展接口。,方式0工作时,多用查询方式编程: 发送:MOV SBUF,A 接收:JNB RI,$ JNB TI,$ CLR RI CLR TI MOV A, SBUF,工作方式0:8位移位寄存器I/O方式(续),复位时,SCON 已经被清零,缺省值: 方式0。,接收前,务必先置位 REN=1 允许接收数据。,串行口方式0的扩展应用经常用到,串行口常用工作方式0扩展出并行I/O口, 工作方式1、2、3则常用于串行通信,AB,CLK,h g f e d c b a,CLR,AB,CLK,CLR,AB,CLK,CLR,+5V,74LS164,74LS164,74LS164,74LS164是串入并出芯片;74LS165是并入串出芯片,h g f e d c b a,h g f e d c b a,+5V,共阳LED 数码管,VCC,TxD,RxD,51单片机,共阳极,h g f e d c b a,a,b,c,d,g,e,f,h,共阳LED数码管 公共端(字位) 接高电平, 笔划(字段) 置为低电平 就被点亮了,h g f e d c b a,累加器 A,1 1 0 0 0 0 0 0,0C0H = “0”,比如要显示“0” 须令a b c d e f 为“0” 电平,g h为“1”电平。,再比如要显示“3” 须令a b c d g 为“0” 电平,e f h为“1”电平。,1 0 1 1 0 0 0 0,0B0H = “3”,例:利用串行口工作方式0扩展出8位并行I/O口,驱动共阳LED数码管显示09。,AB,CLK,h g f e d c b a,CLR,+5V,VCC,TxD,RxD,51单片机,74LS164,共阳LED数码管,根据上图编写的通过串行口和 74LS164 驱动共阳LED数码管 (查表)显示0-9数字的子程序: DSPLY:MOV DPTR, #TABLE MOVC A, A+DPTR MOV SBUF, A JNB TI, $ CLR TI RET TABLE:DB 0C0H,0F9H,0A4H DB 0B0H,99H,92H DB 82H,0F8H,80H,90H,h g f e d c b a,累加器 A,1 1 0 0 0 0 0 0,0C0H = “0”,1 0 1 1 0 0 0 0,0B0H = “3”,共阳极,h g f e d c b a,a,b,c,d,g,e,f,h,C51程序如下: #include void main( ) unsigned char table=0xC0,0xF9,0xA4,0xB0,0x99, 0x92,0x82,0xF8,0x80,0x90; SCON=0x00; SBUF=table5; /显示数字5 while (TI=0); TI=0; while(1); ,常用于串行通讯。除发/收8位数据外,还 在D0位前有一个起始位“0”; 在D7位后有一个停止位“1”。,方式1工作时: 发送端自动添加一个起始位和一个停止位; 接收端自动去掉一个起始位和一个停止位。,工作方式1:10位UART(1+8+1位)波特率可变,波特率可变 用定时器T1作波特率发生器: 公式:波特率 =(2SMOD/32)T1的溢出率,波特率=(2SMOD/32)T1的溢出率, 溢出率:T1溢出的频繁程度 即:T1溢出一次所需时间的倒数。, 初值 X = 2n -,2SMOD fosc 32 波特率 12, 波特率 =,2SMOD fosc 32 12(2n - X),其中:X 是定时器初值, 初值 X = 2n -,2SMOD fosc 32 波特率 12, 例 题目要求用T1工作于方式2来产生波特率1200, 已知晶振频率=6MHz。要求出T1的初值:,初值 X = 28 -,20 6106 32 1200 12,= 256 - = 256 - 13.02,6106 460800, 243 = 0F3H 结果后面要用到,表格有多种, 晶振也不止一种,常用波特率和T1初值查表,RxD引脚为接收端,TxD引脚为发送端,由波特率 发生器T1控制发送速度,不同于方式0:收/发都 需要由TxD送出移位时钟。,T1作波特率发生器时初始化包括: 选定时器工作方式2(TMOD选8位自动重装); 将计算(或查表)出的初值X赋给TH1,TL1; 启动T1 (SETB TR1); 对T1不要开中断 !,工作方式1的接收/发送,串行口的初始化包括: 对SCON选工作方式 对PCON设波特率加倍位“SMOD”(缺省值=0) 如果是接收数据,仍要先置“1”REN位,SM0 SM1 SM2 REN TB8 RB8 TI RI,SCON, SM0,SM1:串行口工作方式选择位。 0 1 :方式1,8位UART(1+8+1位), REN:串行口接收允许位。 REN=1 允许接收,串行口控制寄存器SCON,0 1 0 1 0 0 0 0, TB8,RB8,TI,RI等位由运行中间的情况 决定,可先写成 “0”, SM2:串行口多机通信控制位,作为方式2、3 的附加控制位,此处不用,可写成“0”,MAIN: ORG 0023H MOV TMOD,#20H SBR1:JNB RI,SEND MOV TL1,#0F3H LCALL SIN MOV TH1,#0F3H SJMP NEXT SETB TR1 SEND:LCALL SOUT MOV SCON, #50H NEXT:RETI SETB EA SIN: SETB ES RET LCALL SOUT SOUT: SJMP $ RET,例:串行通信方式1应用 用T1工作于方式2,产生波特率1200bps,发送子程序 接收子程序 SOUT: SIN: MOV A,R0 MOV A,SBUF MOV C,P MOV C, P CPL C JNC ERR MOV ACC.7, C ANL A, #7FH INC R0 MOV R1, A MOV SBUF, A INC R1 CLR TI CLR RI RET RET,例 (续),删除,删除,由于波特率固定,常用于单片机间通讯。 数据由8+1位组成,通常附加的一位 (TB8/RB8)用于“奇偶校验”。,工作方式2: 11位UART(1+8+1+1位)两种波特率,方式2的波特率 = fosc 2SMOD/64 即: fosc 1/32 或 fosc 1/64 两种,奇偶校验是检验串行通信双方传输的数据正确与否的一个措施,并不能保证通信数据的传输一定正确。 换言之:如果奇偶校验发生错误,表明数据传输一定出错了;如果奇偶校验没有出错,绝不等于数据传输完全正确。,奇校验:8位有效数据连同1位附加位中, 二进制“1”的个数为奇数 偶校验:8位有效数据连同1位附加位中, 二进制“1”的个数为偶数,约定接收采用奇校验 若接收到的9位数据中“1”的个数为奇数, 则表明接收正确,取出8位有效数据即可; 若接收到的9位数据中“1”的个数为偶数, 则表明接收出错!应当进行出错处理。,约定发送采用奇校验 若发送的8位有效数据中“1”的个数为偶数, 则要人为添加一个附加位“1”一起发送; 若发送的8位有效数据中“1”的个数为奇数, 则要人为添加一个附加位“0”一起发送。,采用偶校验时,处理方法与奇校验相反,回顾: 程序状态字寄存器PSW中有一个奇偶状态位 P,CY,AC,F0,RS0,OV,P,RS1,PSW.7,PSW.0,P (PSW.0):奇偶状态位。 P=1 表示目前累加器中 “1”的个数为奇数 P=0 表示目前累加器中 “1”的个数为偶数 CPU随时监视着Acc的“1”的个数并自动反映在 P,工作方式2 的奇偶校验用法, 选用偶校验方式发送 PIPL: PUSH PSW ;保护现场 PUSH ACC CLR TI ;清发送中断标志以备下次发送 MOV A,R0 ;取由R0所指向的单元中的数据 MOV C, P ;将奇偶标志位通过C放进TB8 MOV TB8, C ;一起发送出去 MOV SBUF,A ;启动发送 INC R0 ;指针指向下一个数据单元 POP ACC ;恢复现场 POP PSW RETI ;中断返回,串口方式2 的奇偶校验用法:, 选用偶校验方式发送 如果 A 中的数的1的个数是奇数(P=1), 将TB8写成“1”一起发出去; 反之:若(P=0)则写TB8=“0”发出去。 选用偶校验方式接收 若收到的数中P=0,且检查到RB8=0就可能对了 若收到的数中P=1,且检查到RB8=1就可能对了 若P=0且RB8=1或P=1且RB8=0就一定出错了!,串口方式2 的奇偶校验用法:,SM0 SM1 SM2 REN TB8 RB8 TI R1,SCON,串行口控制寄存器SCON,TB8 RB8, 选用偶校验方式接收: PIPL:PUSH PSW ;保护现场 PUSH ACC CLR RI ;清发送中断标志以备下次发送 MOV A,SBUF;读进收到的数据 MOV C, P ;奇偶标志位C =JNB P,L1 JNC L1 ;C=0时转到L1 P=0时转到L1 JNB RB8,ERR;P=1时转到L2,若RB8=0“出错” SJMP L2 ;RB8=1 则表明接收正确,转L2 L1: JB RB8,ERR;P=0且RB8=1表明“出错” L2: MOV R0, A ;P=0且RB8=0表明接收正确 INC R0 ;指针指向下一个数据单元 POP ACC ;恢复现场 POP PSW ERR:出错处理 RETI ;中断返回 RETI,例:编程将甲机片内RAM中30H3FH中的16个数据发送给乙机,串行口工作在方式2,波特率固定,TB8作为奇偶校验位。,分析:两台单片机应用系统在进行通信时,如果距离较近,接口只需三根导线,将它们的串行口直接相连,即可实现双机通信,如图所示。,甲机发送程序(汇编) 编程将甲机片内RAM中30H3FH中的16个数据发送给乙机,串行口工作在方式2,波特率固定,TB8作为奇偶校验位,程序如下: ORG 0050H MOV SCON,#80H ;设定串行口为工作方式2 MOV PCON,#00H ;波特率为fOSC/64 MOV RO,#30H ;设置发送数据指针 MOV R3,#10H ;设置存放的数据块长度 XHA: MOV A,R0 ;取出待发送的数据 MOV C,P ;将A中的奇偶位送C MOV TB8,C ;奇偶位送TB8 MOV SBUF,A ;发送数据 LOOP:JBC TI,ZZ1 ;判断一帧数据是否发送完成 AJMP LOOP ;没有发送完继续发送 ZZ1: INC R0 ;发送完一字节取下一个数据 DJNZ R3,XHA ;判断16个数据是否发送完成 END,乙机接收程序(汇编):接收甲机发送的16个数据并存放在本机内部RAM(30H3FH)中,串行口工作在方式2,核对奇偶校验位,并对接收数据的正确性进行判断,如果数据有错,转出错处理程序。 ORG 0050H MOV SCON,#90H ;设定串行口为工作方式2,并允许接收 MOV PCON,#00H ;波特率为fOSC/64 MOV RO,#30H ;设置接收数据指针 MOV R3,#10H ;设置存放的数据块长度 LOOP: JBC RI,JSH ;判断一帧数据是否接收完成 AJMP LOOP ; JSH: MOV A,SBUF ;将接收数据送A中 JB PSW.0,OHT ;判断接收到的数据的奇偶性 JB RB8,ERR ;如果与发送的奇偶性不同,转错误处理 AJMP RTH ;转正确处理 OHT: JNB RB8,ERR RTH: MOV R0,A ;接收数据送内部RAM INC R0 ;内存指针加1 DJNZ R3,LOOP ;判断16个数据是否接收完成 JS1: AJMP JS1 ERR: END,甲机发送端程序(C51): #include #define uchar unsigned char void send(void); uchar code tr16=0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17, 0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f; void main(void) TMOD=0x20; TH1=0xf4; TL1=0xf4; /*晶振频率为12MHz,波特率为2400*/ SCON=0xd0; PCON=0x00; TR1=1; send(); void send() uchar i; for(i=0;i16;i+) SBUF=tri; while(!TI); TI=0; ,接收端C51程序: #include #define uchar unsigned char void rece( ); uchar re16; void main(void) TMOD=0x20; TH1=0xf4; TL1=0xf4; SCON=0xd0; PCON=0x00; TR1=1; rece( ); void rece() uchar m; for(m=0;m16;m+) while(RI=0); rem=SBUF; RI=0; ,工作方式3:当SM0,SM1为11时,串行口工作于方式3 11位UART(1+8+1+1位) 波特率可变,串口方式3和方式2唯一的区别是波特率机制不同。 方式2的波特率固定为时钟周期的32或64分频,不可变。此工作方式与其他串行通讯设备连接困难,因此不常用。 方式3的波特率可变,按前面的公式计算:,波特率=(2SMOD/32)T1的溢出率, 波特率 =,2SMOD fosc 32 12(2n - X),其中:X 是定时器初值,模式2、3的应用:多机通讯,在方式2或方式3下,TB8是发送的第9位数据,可用软件置1和清0;RB8是接收到的第9位数据;这两位可以作为奇偶校验位。,SM2 :多机通信使能位. 1,模式0、1时: SM2不用,应设为0。时RI才能被正常激活并引发中断; 2,模式2、3时: 若SM2=0时,无论接收到的第9位RB8是1还是0,只要收到数据,RI就置1。 若SM2=1,收到的第9位(RB8)=0时,则RI不会被激活; 若SM2=1且RB8=1时,RI才能被激活=1并引发中断。,用在多机通信时,TB8和RB8位可作为地址与数据帧的标志位,一般约定地址帧为“1”,数据帧为0。,利用第9位数据作为单片机之间通信的联络位,其关键在于巧妙地使用SM2位和接收到的第9个附加数据位(接收后放在RB8中)。通常主机与从机之间通信应做如下约定。 1)主机向从机发送地址信息时,其第9位数据必须为1,而向从机发送或接收从机送来的数据信息(包括命令)时,其第9位数据均应规定为0且主机的SM2也应设为0。 2)所有从机在建立与主机通信之前,均应处于对通信线路的监听状态。在监听状态下必须使SM2=1,此时只能收到主机发出的地址信息(第9位为1),非地址信息不接受。 3)所有从机收到地址后均应进行识别,判断是否是主机呼叫本从机,如果收到的地址与本从机的地址相符合,即为呼叫本从机。当确认是主机呼叫本从机后,该从机应解除监听状态,使SM2=0,同时把本从机的地址发回主机作为应答信息,只有这样才能收到主机发送的有效数据或向主机发送数据。其它从机由于地址不符,仍保持监听状态,

温馨提示

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

评论

0/150

提交评论