单片机原理与应用-基于汇编、C51及混合编程第8章串行口通信教材_第1页
单片机原理与应用-基于汇编、C51及混合编程第8章串行口通信教材_第2页
单片机原理与应用-基于汇编、C51及混合编程第8章串行口通信教材_第3页
单片机原理与应用-基于汇编、C51及混合编程第8章串行口通信教材_第4页
单片机原理与应用-基于汇编、C51及混合编程第8章串行口通信教材_第5页
已阅读5页,还剩91页未读 继续免费阅读

下载本文档

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

文档简介

1、1 第第8章章 串行口通信串行口通信2主要内容主要内容 8.1 串行通信的概念串行通信的概念 8.2 串行口串行口1的相关寄存器的相关寄存器 8.3 串行口串行口1的工作方式的工作方式 8.4串行口串行口1通信中波特率的设置通信中波特率的设置 8.5 串行口串行口2的相关寄存器的相关寄存器 8.6串行口串行口2的工作方式的工作方式 8.7 串行口的应用串行口的应用 8.8 RS-232串行标准串行标准 8.9 RS485串行接口串行接口 8.10 SPI串行接口概述串行接口概述 8.11 SPI串行数据通信串行数据通信 8.12 SPI接口的应用接口的应用38.1 串行通信的概念串行通信的概念

2、 串行通信是按一位一位的顺序传送数据,串行通信方式又串行通信是按一位一位的顺序传送数据,串行通信方式又分为分为同步通信同步通信和和异步通信异步通信两种。两种。同步通信同步通信:发送方和接收方用同一个时钟控制信号发送方和接收方用同一个时钟控制信号同步字符同步字符N个字节的连续数据校验字符校验字符48.1 串行通信的概念串行通信的概念异步通信是一种将数据以一个字符为单位进行传送的通信方式异步通信是一种将数据以一个字符为单位进行传送的通信方式传送一个字符又称为一帧信息传送一个字符又称为一帧信息发送与接收之间无时钟信号控制,发送与接收之间无时钟信号控制,发送和接收的速率要求相同发送和接收的速率要求相同

3、起始位起始位:位于一帧数据的:位于一帧数据的开头,逻辑开头,逻辑“0”电平信电平信号,用来通知接收设备开号,用来通知接收设备开始接收一帧信息始接收一帧信息数据位数据位:紧跟起始位:紧跟起始位之后的是数据位,对之后的是数据位,对51内核单片机来说,内核单片机来说,低位在前,高位在后低位在前,高位在后第第9位:常用于对串行位:常用于对串行通信数据进行奇偶校验通信数据进行奇偶校验停止位停止位:逻辑:逻辑“1”电平信号,电平信号,应大于应大于或等于一个位数据的时间或等于一个位数据的时间。在发送完。在发送完一帧信息后,用于发送的数据线一直一帧信息后,用于发送的数据线一直处于高电平状态,等待再次发送处于高

4、电平状态,等待再次发送58.1 串行通信的概念串行通信的概念串行通信可分为单工、半双工和全双工串行通信可分为单工、半双工和全双工3种方式种方式单工方式只有一根数据线,数据只能按照一个固定的方向传送单工方式只有一根数据线,数据只能按照一个固定的方向传送 半双工方式的数据可以由甲向乙传送,也可以由乙向甲传半双工方式的数据可以由甲向乙传送,也可以由乙向甲传送,但是不能在两个方向上同时传送送,但是不能在两个方向上同时传送全双工方式可以在同一时刻实现双向传送。全双工方式可以在同一时刻实现双向传送。在串行通信中,用波特率衡量通信速度的快慢。波特率是指每在串行通信中,用波特率衡量通信速度的快慢。波特率是指每

5、秒钟传送的二进制数的位数秒钟传送的二进制数的位数单位:单位:位位/秒秒(bps) 字节字节/秒秒(Bps)波特率(波特率(bps)=1个字符的二进制位数个字符的二进制位数 Bps68.1 串行通信的概念串行通信的概念STC12C5A60S2单片机具有2个UART工作方式的串行口接收缓冲器接收缓冲器SBUF地址:地址:99H发送缓冲器发送缓冲器SBUF地址:地址:99H串行口串行口1接收缓冲器接收缓冲器S2BUF地址:地址:9BH发送缓冲器发送缓冲器S2BUF地址:地址:9BH串行口串行口278.2 串行口串行口1的相关寄存器的相关寄存器STC12C5A60S2单片机的串行口单片机的串行口1 与

6、与8个特殊功能寄存器相关个特殊功能寄存器相关串行控制寄存器串行控制寄存器SCON电源控制寄存器电源控制寄存器PCON辅助寄存器辅助寄存器AUXR独立波特率发生器寄存器独立波特率发生器寄存器BRT唤醒控制寄存器唤醒控制寄存器WAKE_CLKO中断寄存器中断寄存器IE、IP、IPH。88.2 串行口串行口1的相关寄存器的相关寄存器1.串行控制寄存器串行控制寄存器SCON,地址为,地址为98H,可进行位寻址,可进行位寻址D7D6D5D4D3D2D1D0SM0/FESM1SM2RENTB8RB8TIRISM0/FE:寄存器:寄存器PCON中的中的SMOD0位为位为1时,时,该位用于帧错误检测该位用于帧

7、错误检测(FE)。当检测到停止位当检测到停止位无效时,硬件会将该位无效时,硬件会将该位置置1,必须由软件清零,必须由软件清零SMOD0位为位为0时,时,SM0、SM1两位一起确定串行口两位一起确定串行口1的工作方式的工作方式SM0SM1工作方式功能说明波特率00方式0同步串行移位寄存器方式当AUXR寄存器中的位UART_M0 x6=0时,波特率等于fosc/12;UART_M0 x6=1时,波特率等于fosc/201方式18位异步通信(2SMOD/32)(定时/计数器T1的溢出率或独立波特率发生器的溢出率)10方式29位异步通信(2SMOD/32) fosc11方式39位异步通信与方式1相同S

8、M2:在方式在方式0中,该位必须为中,该位必须为0;在方式在方式2和方式和方式3中,该位为中,该位为1时,时,只有接收到的第只有接收到的第9位数据位数据RB8位为位为1时,接收才能有效。时,接收才能有效。在方式在方式1中,该中,该位为位为1时,只有正确接收到停止位时,时,只有正确接收到停止位时,接收才能有效接收才能有效REN:允许串行接收控:允许串行接收控制位。制位。当该位为当该位为1时,允时,允许接收信息;许接收信息;当该位为当该位为0时,禁止接收信息。时,禁止接收信息。TB8:发送数据的第:发送数据的第9位位RB8:接收数据的第:接收数据的第9位位TI:串行口:串行口1发送中发送中断请求标

9、志位断请求标志位RI:串行口:串行口1接收中接收中断请求标志位断请求标志位98.2 串行口串行口1的相关寄存器的相关寄存器2.电源控制寄存器电源控制寄存器PCON,地址为,地址为87HD7D6D5D4D3D2D1D0SMODSMOD0LVDFPOFGF1GF0PDIDLSMOD:波特率倍频选择位。:波特率倍频选择位。该位置该位置1,串行口,串行口1工作在方式工作在方式1、2、3时波特率加倍;时波特率加倍;该位为该位为0,各工作方式的波特,各工作方式的波特率不加倍率不加倍SMOD0:帧错误检测有效控制位。:帧错误检测有效控制位。该位置该位置1,SCON寄存器中的寄存器中的SM0/FE位用于位用于

10、FE功能;功能;该位为该位为0,SCON寄存器中的寄存器中的SM0/FE位用于方式选择。位用于方式选择。108.2 串行口串行口1的相关寄存器的相关寄存器3.辅助寄存器辅助寄存器AUXR,地址为,地址为8EHD7D6D5D4D3D2D1D0T0 x12T1x12UART_M0 x6BRTRS2SMODBRTx12EXTRAMS1BRSUART_M0 x6:串行口:串行口1方式方式0的的通信速度控制位。通信速度控制位。UART_M0 x6=0,方式,方式0的波特的波特率为系统时钟频率的率为系统时钟频率的12分频;分频;UART_M0 x6=1,方式,方式0的波特的波特率为率为fosc/2。BRT

11、R:独立波特率发生器运行控制位。:独立波特率发生器运行控制位。BRTR=0时,不允许独立波特率发生器工时,不允许独立波特率发生器工作;作;BRTR=1时时,允许独立波特率发生器工作允许独立波特率发生器工作BRTx12:独立波特率发生器计数控制位。:独立波特率发生器计数控制位。BRTx12=0时,独立波特率发生器的计数时,独立波特率发生器的计数时钟源为系统时钟频率时钟源为系统时钟频率fosc的的12分频;分频;BRTx12=1,独立波特率发生器的计数时,独立波特率发生器的计数时钟源为系统时钟频率。钟源为系统时钟频率。S1BRS:串行口:串行口1的波特率发生器选择位。的波特率发生器选择位。S1BR

12、S=0时,选择定时时,选择定时/计数器计数器T1作为串作为串行口行口1的波特率发生器;的波特率发生器;S1BRS=1时,选择独立波特率发生器作为时,选择独立波特率发生器作为串行口串行口1的波特率发生器的波特率发生器118.2 串行口串行口1的相关寄存器的相关寄存器4.独立波特率发生器寄存器独立波特率发生器寄存器BRT,地址为,地址为9CH 独立波特率发生器是专门用于控制串行通信速度的定时独立波特率发生器是专门用于控制串行通信速度的定时器,与定时器,与定时/计数器计数器T1工作于方式工作于方式2的情况相似。的情况相似。BRT用于保用于保存重装时间常数的一个存重装时间常数的一个8位寄存器位寄存器

13、注意:注意:串行口串行口2 2:只能使用独立波特率发生器控制发送与接收,只能使用独立波特率发生器控制发送与接收,串行口串行口1 1:既可以选择既可以选择T1T1作为波特率发生器,也可以选择独立波作为波特率发生器,也可以选择独立波特率发生器。特率发生器。串行口串行口1 1和串行口和串行口2 2不能同时使用独立波特率发生器,不能同时使用独立波特率发生器,128.2 串行口串行口1的相关寄存器的相关寄存器5. 唤醒控制寄存器唤醒控制寄存器WAKE_CLKO,地址为,地址为8FHD7D6D5D4D3D2D1D0PCAWAKEUPRXD_PIN_IET1_PIN_IET0_PIN_IELVD_WAKEB

14、RTCLKOT1CLKOT0CLKORXD_PIN_IE=0时,禁止时,禁止P3.0/RxD引脚的引脚的下降沿置位下降沿置位RI,也禁止,也禁止RxD引脚唤醒掉电引脚唤醒掉电模式;模式;RXD_PIN_IE=1时,允许时,允许P3.0/RxD引脚的引脚的下降沿将下降沿将RI置置1,并且,并且RxD引脚的下降沿能引脚的下降沿能够唤醒掉电模式够唤醒掉电模式138.3 串行口串行口1的工作方式的工作方式8.3.1方式方式0串行口串行口1工作在方式工作在方式0,作同步移位寄存器使用,作同步移位寄存器使用D7D6D5D4D3D2D1D0T0 x12T1x12UART_M0 x6BRTRS2SMODBRT

15、x12EXTRAMS1BRSUART_M0 x6:串行口:串行口1方式方式0的的通信速度控制位。通信速度控制位。UART_M0 x6=0,方式,方式0的波特的波特率为系统时钟频率的率为系统时钟频率的12分频;分频;UART_M0 x6=1,方式,方式0的波特的波特率为率为fosc/2。148.3 串行口串行口1的工作方式的工作方式8.3.1方式方式0 串行口数据由串行口数据由RxD引脚输入或输出引脚输入或输出,同步移位脉冲通过同步移位脉冲通过TxD引脚输出引脚输出, 发送、接收均为发送、接收均为8位数据位数据发送过程:发送过程:在TI=0的条件下,执行MOV SBUF,A指令,启动发送 注意:

16、注意:发送顺序:发送顺序:低位在前,高位在后低位在前,高位在后发送完一帧数据后,由发送完一帧数据后,由硬件将发送中断标志位硬件将发送中断标志位TITI置置1 1,向,向CPUCPU发发出中断请求。出中断请求。若要再次发送数据,若要再次发送数据,必须先通过程序将必须先通过程序将TITI位清位清0 0。158.3 串行口串行口1的工作方式的工作方式8.3.1方式方式0 串行口数据由串行口数据由RxD引脚输入或输出引脚输入或输出,同步移位脉冲通过同步移位脉冲通过TxD引脚输出引脚输出, 发送、接收均为发送、接收均为8位数据位数据接收过程:接收过程:在RI=0的条件下,接收允许控制位REN置1时,处于

17、接收状态接收完一帧数据后,硬件将接收到的数据存入接收缓冲器SBUF,并将中断标志位RI置1,向CPU发出中断请求 注意:注意:接收顺序:顺序:先收到的是低位,后收到的是高位先收到的是低位,后收到的是高位若要继续接收数据,若要继续接收数据,必须先通过程序将必须先通过程序将RIRI位清位清0 0。168.3 串行口串行口1的工作方式的工作方式8.3.2方式方式18位数据位数据,低位在前高位在后,低位在前高位在后发送过程:发送过程:在在TI为为0的条件下的条件下,执行将数据写入,执行将数据写入SBUF的指令的指令时,启动发送过程。时,启动发送过程。在内部移位脉冲的控制下在内部移位脉冲的控制下,TxD

18、引脚首先发送起始位、引脚首先发送起始位、8位数据、停止位,位数据、停止位,发发送完毕后送完毕后TI置置1,向,向CPU发出中断请求发出中断请求178.3 串行口串行口1的工作方式的工作方式8.3.2方式方式1接收过程:接收过程:在在RI为为0、接收允许控制位、接收允许控制位REN被置被置1的条件下,的条件下,CPU处于接收状态。当硬件检测到处于接收状态。当硬件检测到RxD引脚由高引脚由高电平变为低电平时,开始接收一帧数据,并同步波电平变为低电平时,开始接收一帧数据,并同步波特率发生器。特率发生器。188.3 串行口串行口1的工作方式的工作方式8.3.2方式方式1接收过程:接收过程:(1)RI=

19、0(2)SM2=0或接收到的停止位为或接收到的停止位为1时时 硬件自动将接收到的数据装入接收缓冲器硬件自动将接收到的数据装入接收缓冲器SBUF,同时将停止位写入同时将停止位写入RB8,置中断标志位,置中断标志位RI为为1,向,向CPU提出中断请求。提出中断请求。若不满足两个条件,接收到的数据无法装入接收缓冲器SBUF,数据丢失。 注意:注意:无论满足这两个条件与否,接收控制器将继续检测无论满足这两个条件与否,接收控制器将继续检测RxDRxD引脚,接收下一帧数据,所以在接收的过程中,应及时清接收引脚,接收下一帧数据,所以在接收的过程中,应及时清接收中断标志位中断标志位RIRI,以免数据丢失,以免

20、数据丢失198.3 串行口串行口1的工作方式的工作方式8.3.3方式方式2 、方式、方式3 方式方式2 与方式与方式3唯一的区别唯一的区别在于方式在于方式2的波特率是固定的,的波特率是固定的,而方式而方式3的波特率与波特率发生器有关的波特率与波特率发生器有关 方式方式1与方式与方式3的区别是:的区别是:方式方式1是是8位的串行异步通信、位的串行异步通信、 方式方式3是是9位串行异步通信位串行异步通信208.3 串行口串行口1的工作方式的工作方式8.3.3方式方式2 、方式、方式3发送过程:发送过程: 将发送中断标志位将发送中断标志位TI清清0,并通过位传送指令将,并通过位传送指令将第第9位数据

21、写入位数据写入TB8中,然后执行中,然后执行MOV SBUF,A指令,指令,启动发送过程。一帧数据发送完毕,硬件将发送中断启动发送过程。一帧数据发送完毕,硬件将发送中断标志位标志位TI置置1218.3 串行口串行口1的工作方式的工作方式8.3.3方式方式2 、方式、方式3接收过程:接收过程: 允许控制位允许控制位REN被置被置1后处于接收状态。接收到后处于接收状态。接收到的第的第9位(而不是停止位)装入到位(而不是停止位)装入到RB8位中位中 注意:注意:在方式在方式2 2和方式和方式3 3中,中,SM2SM2为为1 1时,只有接收到的第时,只有接收到的第9 9位数位数据据RB8RB8位为位为

22、1 1时,接收才能有效时,接收才能有效228.3 串行口串行口1的工作方式的工作方式8.3.4 多机通信多机通信在多机通信中在多机通信中方式方式2和和方式方式3更适合主从通信更适合主从通信主机的SM2位清0从机的SM2位置1通信过程举例 (1) 主机向从机发送某一从机的地址,发送前将主机向从机发送某一从机的地址,发送前将TB8位置位置1,然后进入接收状态然后进入接收状态 (2) 各从机接收到主机送出的地址信息后,各从机接收到主机送出的地址信息后, 与本机地址相符时与本机地址相符时,表示被选中,将本机地址回发给主机,表示被选中,将本机地址回发给主机(TB8位为位为0),执行),执行CLR SM2

23、指令。指令。 未被选中的从机未被选中的从机,SM2位依然为位依然为1,接收不到,接收不到TB8位为位为0的数的数据信息。据信息。238.3 串行口串行口1的工作方式的工作方式8.3.4 多机通信多机通信在多机通信中在多机通信中方式方式2和和方式方式3更适合主从通信更适合主从通信主机的SM2位清0从机的SM2位置1通信过程举例 (3)主机收到从机回发的地址后,检验是否与主机先前发主机收到从机回发的地址后,检验是否与主机先前发送的地址一致,若不同,说明发送过程出现错误,再回到第(送的地址一致,若不同,说明发送过程出现错误,再回到第(1)步,步,若相同,可以发出指令或数据信息若相同,可以发出指令或数

24、据信息(TB8位为位为0)。 (4)从机正确地接收到主机所发送到的指令或数据信息后,从机正确地接收到主机所发送到的指令或数据信息后,回发先前约定好的应答信号给主机,同时将回发先前约定好的应答信号给主机,同时将SM2位重新置位重新置1,以,以便从机能够接收主机再次发送地址信息,本次主机与从机通信便从机能够接收主机再次发送地址信息,本次主机与从机通信过程结束。过程结束。 理论上,一个主机可以与理论上,一个主机可以与256个个从机通信从机通信,但由于每个单片机引脚,但由于每个单片机引脚的输入阻抗及总线上阻抗的存在,的输入阻抗及总线上阻抗的存在,总线上所允许并联从机的数量要受总线上所允许并联从机的数量

25、要受到限制。如果主机与过多的从机连到限制。如果主机与过多的从机连接时,波特率应设置的低一些以减接时,波特率应设置的低一些以减少通信错误少通信错误248.4串行口串行口1通信中波特率的设置通信中波特率的设置(1)方式)方式0D7D6D5D4D3D2D1D0T0 x12T1x12UART_M0 x6BRTRS2SMODBRTx12EXTRAMS1BRS辅助寄存器AUXRUART_M0 x6=0时,时,波特率是波特率是fosc/12UART_M0 x6=1时,时,波特率是波特率是fosc/2258.4串行口串行口1通信中波特率的设置通信中波特率的设置(2)方式)方式2D7D6D5D4D3D2D1D0

26、SMODSMOD0LVDFPOFGF1GF0PDIDL电源控制寄存器PCON波特率波特率=(2SMOD/64) foscD7D6D5D4D3D2D1D0SMODSMOD0LVDFPOFGF1GF0PDIDLSMOD=0时,时,波特率波特率= fosc/64当当SMOD=1时,时,波特率波特率=fosc/32268.4串行口串行口1通信中波特率的设置通信中波特率的设置(3)方式)方式1和方式和方式3波特率波特率=2SMOD (定时定时/计数器计数器T1的溢出率的溢出率 /32)D7D6D5D4D3D2D1D0SMODSMOD0LVDFPOFGF1GF0PDIDLSMOD=0时,时,波特率波特率=

27、 T1的溢出率的溢出率/32当当SMOD=1时,时,波特率波特率= T1的溢出率的溢出率/16D7D6D5D4D3D2D1D0T0 x12T1x12UART_M0 x6BRTRS2SMODBRTx12EXTRAMS1BRST1x12=0时,时,T1的溢出率的溢出率= (fosc/12)/( 256 - THl)T1x12=1时,时,T1的溢出率的溢出率= fosc/( 256 - TH1)278.4串行口串行口1通信中波特率的设置通信中波特率的设置(3)方式)方式1和方式和方式3波特率波特率=2SMOD (独立波特率发生器的溢出率独立波特率发生器的溢出率 /32)D7D6D5D4D3D2D1D

28、0T0 x12T1x12UART_M0 x6BRTR S2SMODBRTx12EXTRAMS1BRSBRTx12 = 0时,时,独立波特率发生器独立波特率发生器的溢出率的溢出率=(fosc/12)/( 256-BRT )BRTx12 = 1时,时,独立波特率发生独立波特率发生器的溢出率器的溢出率=fosc/( 256-BRT)288.4串行口串行口1通信中波特率的设置通信中波特率的设置(3)方式)方式1和方式和方式3T1x12=0,T1工作在方式工作在方式2时,几种波特率所对应时,几种波特率所对应T1的重装初的重装初值值波特率系统时钟(MHz)SMODT1重装初值1920011.05921FD

29、H960011.05921FAH960011.05920FDH480011.05921F4H480011.05920FAH240011.05921E8H240011.05920F4H120011.05921D0H120011.05920E8H298.5 串行口串行口2的相关寄存器的相关寄存器与串行口与串行口2相关的寄存器有:相关的寄存器有:1.串行口串行口2的控制寄存器的控制寄存器S2CON,地址为地址为9AH,不能位寻址,不能位寻址D7D6D5D4D3D2D1D0S2SM0S2SM1S2SM2S2RENS2TB8S2RB8S2TIS2RI2.辅助寄存器辅助寄存器AUXR波特率加倍控制位波特率

30、加倍控制位S2SMODD7D6D5D4D3D2D1D0T0 x12T1x12UART_M0 x6BRTR S2SMODBRTx12EXTRAMS1BRSS2SMOD位为位为0时,时,串行口串行口2的波特率不加倍的波特率不加倍S2SMOD位为位为1时,时,串行口串行口2的波特率加倍的波特率加倍308.5 串行口串行口2的相关寄存器的相关寄存器与串行口与串行口2相关的寄存器有:相关的寄存器有:3.辅助寄存器辅助寄存器AUXR14.独立波特率发生器寄存器独立波特率发生器寄存器BRT5.中断寄存器中断寄存器IE、IE2、IP2、IP2HD7D6D5D4D3D2D1D0-PCA_P4SPI_P4S2_P

31、4GF2ADRJ -DPSS2_P4位为位为0时,时,TxD2为为P1.3,RxD2为为P1.2S2_P4位为位为1时,时,TxD2为为P4.3,RxD2为为P4.26.发送缓冲器发送缓冲器S2BUF与接收缓冲器与接收缓冲器S2BUF 共用同一个地址共用同一个地址9BH318.6串行口串行口2的工作方式的工作方式8.6.1 方式方式0当当S2SM0、 S2SM1为为00时,串行口时,串行口2工作在方式工作在方式0波特率波特率=fosc/12 仅有这一种情况仅有这一种情况8位数据低位在前,高位在后位数据低位在前,高位在后通过通过RxD2 引脚接收或发送引脚接收或发送数据数据TxD2引脚输出同步移

32、位时钟引脚输出同步移位时钟328.6串行口串行口2的工作方式的工作方式8.6.2 方式方式1当当S2SM0、 S2SM1为为01时,串行口时,串行口2工作在方式工作在方式1TxD2引脚发送、引脚发送、RxD2引脚接收引脚接收一帧数据包含一个起始位、一帧数据包含一个起始位、8个数据位个数据位和一个停止位和一个停止位停止位存放在停止位存放在S2CON寄存器的寄存器的S2RB8位位338.6串行口串行口2的工作方式的工作方式8.6.2 方式方式1波特率波特率=(2S2SMOD / 32) 独立波特率发生器的溢出率独立波特率发生器的溢出率D7D6D5D4D3D2D1D0T0 x12T1x12UART_

33、M0 x6BRTR S2SMODBRTx12EXTRAMS1BRSBRTx12 = 0时,时,独立波特率发生器独立波特率发生器的溢出率的溢出率=(fosc/12)/( 256-BRT )BRTx12 = 1时,时,独立波特率发生独立波特率发生器的溢出率器的溢出率=fosc/( 256-BRT)348.6串行口串行口2的工作方式的工作方式8.6.3 方式方式2当当S2SM0、 S2SM1为为10时,串行口时,串行口2工作在方式工作在方式2TxD2引脚发送、引脚发送、RxD2引脚接收引脚接收一帧数据包含一个起始位、一帧数据包含一个起始位、9个数据位个数据位和一个停止位和一个停止位发送时发送时,第,

34、第9位数据位来自位数据位来自S2CON寄存器中的寄存器中的S2TB8位,位,接收时接收时,第,第9位数据装入位数据装入S2CON寄存器中的寄存器中的S2RB8位位D7D6D5D4D3D2D1D0T0 x12T1x12UART_M0 x6BRTR S2SMODBRTx12EXTRAMS1BRSS2SMOD位为位为0时,时,波特率波特率= fosc /64S2SMOD位为位为1时,时,波特率波特率=fosc /32358.6串行口串行口2的工作方式的工作方式8.6.4 方式方式3当当S2SM0、 S2SM1为为11时,串行口时,串行口2工作在方式工作在方式3TxD2引脚发送、引脚发送、RxD2引脚

35、接收引脚接收一帧数据包含一个起始位、一帧数据包含一个起始位、9个数据位个数据位和一个停止位和一个停止位发送时发送时,第,第9位数据位来自位数据位来自S2CON寄存器中的寄存器中的S2TB8位,位,接收时接收时,第,第9位数据装入位数据装入S2CON寄存器中的寄存器中的S2RB8位位波特率的设定与方式波特率的设定与方式1相同相同368.7 串行口的应用串行口的应用1. 串行口串行口1的初始化的初始化(1)设置设置SCON寄存器中各个相关位,由寄存器中各个相关位,由SM0、SM1两位确两位确定工作方式,将定工作方式,将TI、RI清清0,如果需要接收,将,如果需要接收,将REN位置位置1;(2)设置

36、合适的波特率,即设置定时设置合适的波特率,即设置定时/计数器计数器T1的工作方式、的工作方式、给给TL1、TH1赋初值,启动赋初值,启动T1工作;使用独立波特率发生器工作;使用独立波特率发生器时,给时,给BRT赋初值,并初始化赋初值,并初始化AUXR寄存器的寄存器的BRTR及及BRTx12两位;两位;(3)根据需要确定是否需要开放中断及中断优先级;根据需要确定是否需要开放中断及中断优先级;(4)编写相应的中断或查询方式的服务程序。编写相应的中断或查询方式的服务程序。378.7 串行口的应用串行口的应用2. 串行口串行口2的初始化的初始化(1)即设置即设置S2CON寄存器中的各个相关位的值,由寄

37、存器中的各个相关位的值,由S2SM0、S2SM1两位确定工作方式,两位确定工作方式,S2RI、S2TI两位清两位清0。如果允许接。如果允许接收,将收,将S2REN位置位置1;(2)设置独立波特率发生器。初始化设置独立波特率发生器。初始化AUXR寄存器中的寄存器中的BRTx12、S2SMOD等位,将初值装入等位,将初值装入BRT寄存器;寄存器;(3)将将AUXR中的中的BRTR位置位置1,启动独立波特率发生器工作;,启动独立波特率发生器工作;(4)根据需要设置中断优先级,开放中断根据需要设置中断优先级,开放中断 ES2、 EA;(5)编写相应的中断或查询方式的服务程序。编写相应的中断或查询方式的

38、服务程序。38 【例【例81】STC12C5A60S2单片机的串行口单片机的串行口1与一片与一片8位串位串入并出的芯片入并出的芯片74HC164连接,驱动一组发光二极管,使发光二连接,驱动一组发光二极管,使发光二极管从右至左延时轮流显示。极管从右至左延时轮流显示。MR分析:分析:74HC164是一是一个串行输入并行输出个串行输入并行输出的移位寄存器,的移位寄存器,Q0Q7是并行输出是并行输出端,端,Dsa、Dsb为串行输为串行输入端。入端。CP为时钟输入端。为时钟输入端。 复位端复位端 ,低电平,低电平有效,当复位端输入有效,当复位端输入低电平时清除移位寄低电平时清除移位寄存器的值,强制所有存

39、器的值,强制所有的输出为低电平的输出为低电平 设设STC12C5A60S2单片机的系单片机的系统时钟频率为统时钟频率为12MHz, 串行口串行口1工作在方式工作在方式0。对。对SCON寄存器赋初值为寄存器赋初值为00H39(1)汇编程序:)汇编程序: ORG 0000H LJMP MAIN ORG 0100HMAIN: MOV SP,#0BFH ;初始化堆栈指针;初始化堆栈指针 MOV SCON,#00H ;串行口;串行口1工作在方式工作在方式0 MOV A,#0FEH ;LED显示码存显示码存A寄存器寄存器START:MOV SBUF,A ;启动发送过程;启动发送过程LOOP:JNB TI,

40、LOOP ;判断发送是否完毕;判断发送是否完毕 CLR TI ;发送完毕,将;发送完毕,将TI位清位清0 ACALL DELAY ;延时;延时 RL A ;发光二极管显示码左移一位;发光二极管显示码左移一位 SJMP START 40DELAY: MOV R7,#0BDH ;500ms的延时程序的延时程序DL1: MOV R6,#0E6HDL0: MOV R5,#21H DJNZ R5,$ DJNZ R6,DL0 DJNZ R7,DL1 RET END41(2)C语言程序:语言程序:#include #include/声明本征函数库声明本征函数库void DELAY();();/延时函数延时函

41、数void main( )unsigned char j;SCON=0 x00;/串行口串行口1工作在方式工作在方式0j=0 xFE; /LED显示码显示码for (; ;) SBUF=j;/启动发送过程启动发送过程 while (!TI);/等待发送完毕等待发送完毕 TI=0; DELAY( );/延时延时500ms j=_crol_(j,1);/循环左移一位循环左移一位 42void DELAY( ) /延时延时500ms函数函数 unsigned char a,b,c; for(c=189;c0;c-) for(b=230;b0;b-) for(a=33;a0;a-);43【例【例82】

42、利用】利用STC12C5A60S2单片机的串行口单片机的串行口1外接一片外接一片8位位的并入串出芯片的并入串出芯片74HC165,用于扩展并行输入,如图所示。,用于扩展并行输入,如图所示。 分析:分析:74HC165是一是一种并入串出的芯片,其种并入串出的芯片,其中中D0D7为并行数据输为并行数据输入端,入端,DS为串行数据输为串行数据输入端,入端,Q7为串行输出端。为串行输出端。 当并行输入允许引脚当并行输入允许引脚 输入为低时输入为低时,从,从D0至至D7引脚并行输引脚并行输入的数据被输入到内部移位寄存器内,入的数据被输入到内部移位寄存器内, 而当而当 为高时为高时,并行输入禁止,移位寄存

43、器的数据在,并行输入禁止,移位寄存器的数据在CP引引脚输入的时钟脉冲上升沿的控制下,向右移动一位脚输入的时钟脉冲上升沿的控制下,向右移动一位DSQ0 Q1 Q7,Q7的状态出现在第的状态出现在第9引脚上。引脚上。设串行口设串行口1工作在方式工作在方式0,SCON寄存器的内容为寄存器的内容为00H。44(1)汇编程序段如下:)汇编程序段如下: MOV SCON, #00000000B CLR P1.7 ; 并行输入允许并行输入允许 NOP ;等待引脚状态稳定;等待引脚状态稳定 NOP NOP NOP NOP NOP SETB P1.7 ;禁止并行输入;禁止并行输入 NOP ;等待引脚状态稳定;等

44、待引脚状态稳定 NOP NOP NOP NOP NOP CLR RI ; 清除中断标志清除中断标志RI SETB REN ;允许接收;允许接收LOOP:JNB RI, LOOP ;等待;等待 CLR RI MOV A,SBUF 45 (2)C语言程序语言程序#include #includesbit P1_7=P17;void main( )unsigned char temp;SCON=0 x00;P1_7=0; /并行输入允许并行输入允许 _nop_( ); /等待引脚状态稳定等待引脚状态稳定 _nop_( ); _nop_( ); _nop_( ); _nop_( ); _nop_( )

45、;P1_7=1; /并行输入禁止并行输入禁止_nop_( ); _nop_( );_nop_( );_nop_( );_nop_( );_nop_( );RI=0; /清除接收中断标志清除接收中断标志RIREN=1;/允许接收允许接收while (!RI);/等待接收数据等待接收数据RI=0; /清除接收中断标志清除接收中断标志RItemp=SBUF; /读入数据读入数据while(1););46【例【例83】在图】在图810所示的甲、所示的甲、乙两机间的串行通信中,单片机系乙两机间的串行通信中,单片机系统的时钟频率为统的时钟频率为11.0592MHz,要,要求波特率为求波特率为1200bps

46、,编程实现将,编程实现将甲机片内的甲机片内的30H3FH单元的数据单元的数据传送到乙机片内传送到乙机片内40H4FH单元中。单元中。(1)汇编子程序:)汇编子程序:分析:甲、乙两机都选择串行口分析:甲、乙两机都选择串行口1工作在工作在方式方式3,9位异步通信位异步通信方方式,式,TB8用作奇偶校验位用作奇偶校验位,甲机串口控制寄存器,甲机串口控制寄存器SCON的初值为的初值为0C0H,乙机的控制字,乙机的控制字0D0H。D7D6D5D4D3D2D1D0SM0/FESM1SM2RENTB8RB8TIRI47【例【例83】在图】在图810所示的甲、所示的甲、乙两机间的串行通信中,单片机系乙两机间的

47、串行通信中,单片机系统的时钟频率为统的时钟频率为11.0592MHz,要,要求波特率为求波特率为1200bps,编程实现将,编程实现将甲机片内的甲机片内的30H3FH单元的数据单元的数据传送到乙机片内传送到乙机片内40H4FH单元中。单元中。(1)汇编子程序:)汇编子程序:分析:甲、乙两机都选择串行口分析:甲、乙两机都选择串行口1工作在工作在方式方式3,9位异步通信位异步通信方方式,式,TB8用作奇偶校验位用作奇偶校验位,甲机串口控制寄存器,甲机串口控制寄存器SCON的初值为的初值为0C0H,乙机的控制字,乙机的控制字0D0H。定时定时/计数器计数器T1工作在方式工作在方式2作为波特率发生器,

48、作为波特率发生器,TMOD为为20H;波特率波特率2SMOD(定时定时/计数器计数器T1的溢出率的溢出率) /32,T1的溢出率的溢出率=(波特率(波特率 32)/ 2SMOD ,T1的重装初值的重装初值=256-(fosc /12)/T1的溢出率的溢出率=256-(fosc/12) 2SMOD/(波特率(波特率32)=256-(11059200/12) /(120032)=232=E8H甲机的发送子程序:甲机的发送子程序:48TRA_UART:MOV TMOD,#20H ;T1工作在方式工作在方式2 ANL AUXR,#0BFH ;T1计数工作在系统时钟的计数工作在系统时钟的12分频分频 M

49、OV TL1,#0E8H ;给;给T1的低的低8位赋初值位赋初值 MOV TH1,#0E8H ;给;给T1的高的高8位赋初值位赋初值 ANL PCON,#7FH ;波特率不加倍;波特率不加倍 MOV SCON,#0C0H ;串行口;串行口1工作在方式工作在方式3 MOV R0,#30H ;R0作为片内作为片内RAM指针指针 MOV R7,#10H ;R7作为发送计数器作为发送计数器 SETB TR1 ;波特率发生器开始工作;波特率发生器开始工作LOOP:MOV A,R0 ;读取片内;读取片内30H3FH单元的内容单元的内容 MOV C,P MOV TB8,C ;将奇偶校验位写入;将奇偶校验位写

50、入TB8 MOV SBUF,A ;启动发送过程;启动发送过程WAIT: JNB TI,WAIT ;等待发送完毕;等待发送完毕CLR TI ;发送完毕,将;发送完毕,将TI清清0INC R0 ;指向下一个单元地址;指向下一个单元地址DJNZ R7,LOOP ;如果数据未发送完,将继续发送如果数据未发送完,将继续发送RET49乙机接收子程序:乙机接收子程序:RES_UART:MOV TMOD,#20H ;T1的初始化的初始化 MOV TL1,#0E8H MOV TH1,#0E8H ANL AUXR ,#0BFH ;系统时钟的;系统时钟的12分频分频 ANL PCON,#7FH;波特率不加倍;波特率

51、不加倍 MOV SCON,#0D0H ;方式;方式3,且允许接收,且允许接收 MOV R0,#40H ;R0作为片内作为片内RAM指针指针 MOV R7,#10H ;R7作为计数器作为计数器 SETB TR1 ;波特率发生器开始工作;波特率发生器开始工作LOOP: NOPWAIT: JNB RI,WAIT CLR RI MOV A,SBUF; 50;P与与RB8位异或位异或,出错时跳转出错时跳转, MOV C,P ANL C, / RB8 MOV F0 , C MOV C, RB8 ANL C,/ P ORL C, F0 JC ERROR MOV R0,A;数据正确,存放进;数据正确,存放进4

52、0H开始的单元开始的单元 INC R0 ;R0指向下一个单元指向下一个单元 DJNZ R7,LOOP ;数据未接收完,则继续;数据未接收完,则继续 RETERROR: ;错误处理,此处略;错误处理,此处略 RET 51(2)C语言程序:语言程序: 分析:为了保持通信的通畅与准确,通信中做如下约定:分析:为了保持通信的通畅与准确,通信中做如下约定: 通信开始时,甲机(主机)首先发送乙机(从机)的地址通信开始时,甲机(主机)首先发送乙机(从机)的地址0AAH,并且,并且TB8位为位为1, 乙机接收后与自己的地址比较,回发地址乙机接收后与自己的地址比较,回发地址0AAH,并将自,并将自己的己的SM2

53、位清位清0。 甲机收到甲机收到0AAH后,说明地址发送正确开始发送后,说明地址发送正确开始发送16个字节个字节的数据。数据缓冲区为数组的数据。数据缓冲区为数组buf,数据发送完成后发送校验和,数据发送完成后发送校验和的低字节。的低字节。 乙机接收到数据后,存入乙机的缓冲区乙机接收到数据后,存入乙机的缓冲区buf中,并用接收中,并用接收的数据产生校验和与接收的校验和相比较,如相同,乙机发送的数据产生校验和与接收的校验和相比较,如相同,乙机发送00H,回答接收正确;如不同,则发送,回答接收正确;如不同,则发送0FFH,请求甲机重发。,请求甲机重发。 根据以上约定,利用串行口根据以上约定,利用串行口

54、2的工作方式的工作方式3,实现甲机作主,实现甲机作主机,乙机作从机的通信方式。由于甲、乙两机都要发送和接收机,乙机作从机的通信方式。由于甲、乙两机都要发送和接收信息,所以甲、乙两机的串口控制寄存器的信息,所以甲、乙两机的串口控制寄存器的S2REN位都应该位都应该为为1,方式控制字都是,方式控制字都是0D0H。52甲机的发送程序:甲机的发送程序:#include STC12C5A.hunsigned char idata buf16; /定义定义16字节的缓冲区字节的缓冲区unsigned char pf; /校验和的低字节校验和的低字节void main( )unsigned char i,j

55、;S2CON=0 xD8; /串行口串行口2的初始化的初始化 ,S2TB8位为位为1BRT=0 xE8;/独立波特率发生器寄存器装入初值独立波特率发生器寄存器装入初值AUXR= AUXR |0 x10; /独立波特率发生器开始工作独立波特率发生器开始工作53for(;)(;)do S2BUF=0 xAA; /发送乙机地址发送乙机地址do j=S2CON; while (j&0 x02)!=0 x02); /等待发送完毕等待发送完毕 S2CON= (S2CON &0 xFD); /S2TI位清位清0do j=S2CON; while (j&0 x01)!= 0 x01)

56、; /等待接收应答信号等待接收应答信号S2CON= (S2CON &0 xFE); /S2RI位清位清0while (S2BUF0 xAA)!=0); /如果地址有误;继续联络如果地址有误;继续联络54do pf=0; /校验和变量赋初值校验和变量赋初值0 S2CON= (S2CON &0 xF7); /S2TB8位写入位写入0for (i=0;i16;i+) /发送发送16个字节的数据个字节的数据 S2BUF=bufi; /发送数据发送数据 pf+=bufi; /求校验和的低求校验和的低8位字节位字节do j=S2CON; while (j&0 x02)!=0 x02

57、); /等待发送完毕等待发送完毕 S2CON= (S2CON &0 xFD);55S2BUF=pf; /发送校验和的低发送校验和的低8位字节位字节do j=S2CON; while (j&0 x02)!=0 x02); /等待发送完毕等待发送完毕 S2CON=( S2CON &0 xFD); /S2TI位清位清0do j=S2CON;while (j&0 x01)!= 0 x01) ; /等待接收应答信号等待接收应答信号S2CON=( S2CON &0 xFE);/S2RI位清位清0while(S2BUF! =0 x00) break;/收到正确应答,退

58、出循环收到正确应答,退出循环 /否则再重发否则再重发while(1););乙机接收程序:乙机接收程序:#include STC12C5A.hunsigned char idata buf16; /定义定义16字节的缓冲区字节的缓冲区unsigned char pf; /校验和的低校验和的低8位字节位字节void main()()unsigned char i,j;BRT=0 xE8;/独立波特率发生器寄存器装入初值独立波特率发生器寄存器装入初值AUXR= AUXR |0 x10; /波特率发生器开始工作波特率发生器开始工作do S2CON=0 xF0; /串行口串行口2的初始化的初始化do j

59、=S2CON;while (j&0 x01)!=0 x01); /等待接收等待接收S2CON=( S2CON &0 xFE); /S2RI标志位清标志位清0 while (S2BUF0 xAA)!=0); /判断接收到的是否是乙机地址判断接收到的是否是乙机地址S2BUF=0 xAA; /回送地址回送地址do j=S2CON; while (j&0 x02)!=0 x02); /等待发送完毕等待发送完毕 S2CON=0 xD0;/将将S2SM2位清位清0while (1) pf=0; /校验和变量赋初值为校验和变量赋初值为0 for (i=0;i16;i+) /接收接收1

60、6个字节的数据个字节的数据 do j=S2CON;while (j&0 x01)!= 0 x01) ; /等待接收等待接收 S2CON=(S2CON &0 xFE);/将将S2RI位清位清0 buf i=S2BUF; /保存接收数据保存接收数据 pf+=bufi; /求校验和的低求校验和的低8位字节位字节 do j=S2CON; while (j&0 x01)!= 0 x01) ; /等待接收校验和的低等待接收校验和的低8位位S2CON=S2CON&0 xFE;if (S2BUFpf)= =0) /比较校验和比较校验和 S2BUF=0 x00; do j=S2CON; while (j&0 x02)!=0 x02); /等待发送完毕等待发送完毕 S2CON= (S2CON &0 xFD);break;

温馨提示

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

评论

0/150

提交评论