chap7单片机串行通信系统_第1页
chap7单片机串行通信系统_第2页
chap7单片机串行通信系统_第3页
chap7单片机串行通信系统_第4页
chap7单片机串行通信系统_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

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

文档简介

chap7单片机串行通信系统第一页,共84页。内容概要串行通信基本概述串行口的基本工作原理与串行口有关的特殊功能寄存器串行口的4种工作方式串行口通信的应用编程第二页,共84页。重点内容:MCS-51单片机串行接口的工作原理及工作方式MCS-51单片机串行接口应用程序设计方法难点内容:MCS-51单片机串行接口的工作原理及工作方式MCS-51单片机串行接口应用程序设计方法第三页,共84页。

概述单片机应用于数据采集或工业控制时,往往作为前端机安装在工业现场,远离主机,现场数据采用串行通信方式发往主机进行处理,以降低通信成本,提高通信可靠性。如下图所示。第四页,共84页。什么是通信?计算机通信是指计算机与外部设备或计算机与计算机之间的信息交换。通信方式并行通信串行通信第五页,共84页。并行通信

通常是将数据字节的各位用多条数据线同时进行传送。并行通信特点:控制简单、传输速度快;由于传输线较多,长距离传送时成本高且通信线路复杂。适合于近距离传输。例如:计算机并口,打印机,8255等第六页,共84页。串行通信

串行通信使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。

串行通信的特点:传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,但数据的传送控制比并行通信复杂。合适于远距离通信。例如:微型机与计算中心之间,单片机之间,单片机与PC之间第七页,共84页。同步串行通信方式串行通信的两种基本方式串行通信有同步和异步两种方式同步通信时要建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步;一般一次传送一个数据块,每一个数据块的开头以同步字符SYN加以指示;每次传送的一帧数据由同步字符、数据字符和校验字符三部分组成;SYN字符1SYN字符2数据1数据2….数据n连续传送n个数据校验7.1串行通信基础第八页,共84页。同步串行通信方式串行通信的两种基本方式串行通信有同步和异步两种方式传输数据块的各字符之间没有起始位和停止位,不留间隙。空闲位需发送同步字符。SYN字符1SYN字符2数据1数据2….数据n连续传送n个数据校验7.1串行通信基础第九页,共84页。同步串行通信方式串行通信的两种基本方式串行通信有同步和异步两种方式同步通信传输速度较快,但要求有准确的时钟来实现收发双方的严格同步,对硬件要求较高,适用于成批数据传送。SYN字符1SYN字符2数据1数据2….数据n连续传送n个数据校验7.1串行通信基础第十页,共84页。异步串行通信方式异步通信对硬件要求较低,实现起来比较简单、灵活,适用于数据的随机发送/接收,但因每个字节都要建立一次同步,即每个字符都要额外附加两位,所以工作速度较低,在单片机中主要采用异步通信方式。异步串行通信是指通信的发送与接收设备使用各自的时钟控制数据的发送与接收过程。以字符(构成的帧)为单位进行传输,字符与字符之间的间隙(时间间隔)是任意的;每个字符中的各位是以固定的时间传送的,即字符之间是异步的,但同一字符内的各位是同步的。第十一页,共84页。数据帧(一帧数据):在异步传送中的一个字符称为数据帧数据帧由4部分组成:

起始位(“0”电平)、数据位、奇偶校验位、停止位(“1”电平)1/01/01/01/01/01/01/01/01/001一帧数据起始位数据位奇偶位停止位01/01/01/0起始位数据位11/0停止位第n个字符第n+1个字符LSBMSB第十二页,共84页。为逻辑“0”信号,占用一位,用来通知接收设备,一个新的字符开始了数据位:起始位:奇偶位:5~8位。传输时数据的最低位在前,最高位在后。紧跟在最高位之后,占用一位,奇偶校验时,根据协议置“1”或“0”,可省略。停止位:为逻辑“1”信号,占用1位、1位半或2位,当接收端收到停止位时,表示一帧数据结束。第十三页,共84页。在异步串行通信中,通信双方事先应该做好以下约定:字符格式双方要实现约定字符的编码形式、奇偶校验形式及起始位和停止位的规定。波特率波特率:串行通信中数据的传送速率,其含义为每秒传送的二进制位数,单位为位/s(b/s).注:在异步通信中,发送端与接收端的波特率必须一致。第十四页,共84页。串行通信的校验奇偶校验在发送数据时,数据位尾随的1位为奇偶校验位(1或0)。奇校验时,数据中“1”的个数与校验位“1”的个数之和应为奇数;偶校验时,数据中“1”的个数与校验位“1”的个数之和应为偶数。接收字符时,对“1”的个数进行校验,若发现不一致,则说明传输数据过程中出现了差错。数据在串行传输过程中,由于干扰可能使传输的数据发生错误,这种情况称为出现了“误码”。为了使系统能够可靠、稳定地通信,在编程时应当设计通信协议,并应考虑数据的纠错,一般在通信时采取数据校验的办法,可有效保证数据传输的可靠性,目前较为流行的方法有奇偶校验、累加和校验、循环冗余码校验几种:第十五页,共84页。循环冗余校验这种校验是通过某种数学运算实现有效信息与校验位之间的循环校验,常用于对磁盘信息的传输、存储区的完整性校验等。这种校验方法纠错能力强,广泛应用于同步通信中。代码和校验代码和校验是发送方将所发数据块求和(或各字节异或),产生一个字节的校验字符(校验和)附加到数据块末尾。接收方接收数据同时对数据块(除校验字节外)求和(或各字节异或),将所得的结果与发送方的“校验和”进行比较,相符则无差错,否则即认为传送过程中出现了差错。第十六页,共84页。单工通信一方固定发送,一方固定接收;半双工通信双方都可以收发,但是只能收或者发,不能同时进行;全双工通信双方可以同时进行收发;——串行通信的传输方向串行通信模式第十七页,共84页。在串行传输中,通信的双方都按通信协议进行,所谓通信协议就是通信双方必须共同遵守的一种约定,约定包括数据的格式、同步的方式、传送的步骤、检纠错方式及控制字符的定义等。第十八页,共84页。串行接口的基本任务:第十九页,共84页。串口主要功能2)格式信息的插入和滤除格式信息:异步通信格式中,启始位、奇偶校验位、停止位等。串化过程:将格式信息插入,和数据位一起构成完整数据帧。反串化过程:滤除格式信息,保留数据位。3)错误检验检验数据通信过程是否正确。1)数据的串化、反串化数据串化:将并行数据变为串行数据;(发送器)数据反串化:将串行数据变为并行数据;(接收器)所有串行接口电路都是以并行数据形式和CPU接口;以串行数据形式和外部通信接口。第二十页,共84页。7.2MCS-51的串行口简介

51系列单片机内有一个全双工的异步串行通信接口,它可作UART(通用异步收发器)用,也可作同步移位寄存器。通过对串行接口写控制字可以选择其数据格式,同时内部有波特率发生器,提供可选的波特率,可完成双机通信或多机通信。51单片机异步串行口特点:可编程的全双工的异步通讯串行口4种工作方式,波特率由片内定时器/计数器控制每发送或接收一帧数据,均可发出中断请求除用于串行通讯,还可用来扩展并行I/O口第二十一页,共84页。有两个物理上独立的串行数据缓冲寄存器SBUF(属于特殊功能寄存器):

发送控制器接收控制器输入移位寄存器串行控制寄存器SCON若干控制门电路7.2.1MCS-51串行口结构第二十二页,共84页。串行数据缓冲器SBUF:发送缓冲器:接收缓冲器:7.2.1MCS-51串行口结构两个缓冲器共用一个特殊功能寄存器字节地址(99H)只能写入不能读出,用于存储发送信息只能读出不能写入,用于存储接收到的信息第二十三页,共84页。数据的发送与接收:7.2.1MCS-51串行口结构MOVSBUF,A

将A中的数据送入发送缓冲寄存器SBUF,并启动一次数据发送;MOVA,SBUF

将接收缓冲寄存器SBUF

中的数据送入A中,完成一次数据接收;第二十四页,共84页。shiftMOVA,SBUF串行数据CPUCPUSBUFSBUFshiftMOVSBUF,A并行数据并行数据甲方(发送)乙方(接收)

甲方发送时,CPU执行指令MOVSBUF,A

,启动了发送过程,数据并行送入SBUF

,在发送时钟shift的控制下由低位到高位一位一位通过TXD引脚发送,甲方一帧数据发送完毕,置位发送中断标志TI为1,该位可作为查询标志(或引起中断)。串行通信的传送过程用下面简图说明第二十五页,共84页。shiftMOVA,SBUF串行数据CPUCPUSBUFSBUFshiftMOVSBUF,A并行数据并行数据甲方(发送)乙方(接收)乙方接收时,在接收时钟shift的控制下通过RXD引脚由低位到高位顺序进入移位寄存器,然后再并行送入接收SBUF

。乙方一帧数据到齐即接收缓冲器满,置接收中断标志RI为1,该位可作为查询标志(或引起接收中断),通过MOVA,SBUF,

CPU将这帧数据并行读入。串行通信的传送过程用下面简图说明第二十六页,共84页。shiftMOVA,SBUF串行数据CPUCPUSBUFSBUFshiftMOVSBUF,A并行数据并行数据甲方(发送)乙方(接收)由上述可知:甲、乙方的移位时钟频率应相同,即应具有相同的波特率,否则会造成数据丢失。发送方是先发数据再查标志,接收方是先查标志再收数据。CPU通过指令和SBUF并行交换数据,并不能控制数据的串行移位,它只能查询标志位来确定数据的移位是否完成。串行通信的传送过程用下面简图说明第二十七页,共84页。shiftMOVA,SBUF串行数据CPUCPUSBUFSBUFshiftMOVSBUF,A并行数据并行数据甲方(发送)乙方(接收)由上述可知:在进行下一帧数据的接受(或发送)时,一定要先将RI(或TI)用软件清0;串行通信的传送过程用下面简图说明第二十八页,共84页。SBUF:串行数据缓冲寄存器SCON:串行口控制寄存器PCON:电源控制寄存器7.2.2相关寄存器第二十九页,共84页。SBUF(99H)发送时:数据写入SBUF,经过TXD引脚发送出去接收时:存储的是从RXD接收到的数据第三十页,共84页。串行通信控制寄存器SCON(98H)字节地址为98H,可位寻址,位地址为98H~9FHSM0SM1SM2RENTB8RB8TIRISCON(98H)D7D0SM0、SM1:串行口工作方式选择位,如表所示

000移位寄存器方式(用于I/O扩展)波特率为fosc/12

0118位UART,波特率可变(由定时器控制)

1029位UART,波特率为fosc/32或fosc/64

1139位UART,波特率可变(由定时器控制)SM0SM1方式功能表

串行口工作方式第三十一页,共84页。SM0SM1SM2RENTB8RB8TIRISCON(98H)D7D0允许接收控制位。由软件置“1”时,允许接收,置“0”时,禁止接收。REN:TB8:在方式2和方式3中作为要发送的第9位数据;在通信协议中,可作为奇偶校验位使用;在多机通信中,作为地址帧或数据帧的标志:1:地址帧,发送的是地址0:数据帧,发送的是数据需要时由软件置位或复位。第三十二页,共84页。TI:发送中断标志。在方式0串行发送第8位结束时由硬件置“1”,或在其他方式中串行发送停止位后置“1”,必须由软件清“0”。RI:接收中断标志。在方式0接收数据第8位结束时由硬件置“1”,或在其他方式中接收到停止位时置“1”,必须由软件清“0”SM0SM1SM2RENTB8RB8TIRISCON(98H)D7D0RB8:在方式2和方式3中要接收的第9位数据;在方式1时,如SM2=0,RB8是接收到的停止位;在方式0中,不使用RB8。第三十三页,共84页。SM0SM1SM2RENTB8RB8TIRISCON(98H)D7D0SM2:

多机通信控制位主要用于方式2或方式3中。当串口以方式2或方式3接收时,如果SM2

=

1,则只有当接收到的第9位数据(RB8)为“1”时,才使RI置“1”,产生中断请求,并将接收到的前8位数据送入SBUF。当接收到的第9位数据(RB8)为“0”时,则将接收到的前8位数据丢弃。当SM2

=

0时,则不论第9位数据是1还是0,都将前8位数据送入SBUF中,并使RI置1,产生中断请求。在方式1时,如果SM2

=

1,则只有收到有效的停止位时才会激活RI。在方式0时,SM2必须为0。第三十四页,共84页。其字节地址87H,没有位寻址功能。PCON(87H)SMODSMOD:波特率选择位。在串行口方式1、方式2、方式3时,当SMOD=1时,波特率提高一倍。当SMOD=0时,波特率不加倍。电源控制寄存器PCON(87H)第三十五页,共84页。7.3串行通信工作方式及应用SM0、SM1:串行口工作方式选择位,由软件置位或清零。

000移位寄存器方式(用于I/O扩展)波特率为fosc/12

0118位UART,波特率可变(由定时器控制)

1029位UART,波特率为fosc/32或fosc/64

1139位UART,波特率可变(由定时器控制)SM0SM1方式功能第三十六页,共84页。7.3.1串行通信工作方式移位寄存器方式,可外接同步移位寄存器,以扩展I/O口,也可外接同步输入输出设备。RXD:为串行数据的发送端或接收端,TXD:移位脉冲输出端数据格式:8位数据为一帧,不设起始位和停止位,先发送或接收最低位。1、工作方式0方式0的波特率为:波特率=fosc/12第三十七页,共84页。7.3.1串行通信工作方式1、工作方式08051RXDTXD⑴方式0发送74LS164345610111213数据输出移位脉冲D7D0数据写入SBUF后,TXD输出移位脉冲,串口将数据从RXD以fosc/12波特率输出,一帧数据发送完TI置1。若要再次发送,必须用指令将TI清0。图

方式0扩展I/O口硬件逻辑图第三十八页,共84页。7.3.1串行通信工作方式1、工作方式0图

方式0发送时序第三十九页,共84页。7.3.1串行通信工作方式1、工作方式0⑵方式0接收将REN置1,TXD输出移位脉冲,串口将数据由低到高从RXD输入(波特率fosc/12),一帧数据接收完后RI置1。8051RXDTXD74LS165345614111213数据输入移位脉冲D7D0图

方式0扩展I/O口硬件逻辑图第四十页,共84页。7.3.1串行通信工作方式1、工作方式0图

方式0接收时序注:若要再次接收一帧数据,应先将上一帧数据取走,同时将RI清零。第四十一页,共84页。使用方式0,进行数据移位输入、输出时,是将串行口作为并行口使用是一种并行口扩展应用通过外接串入并出移位寄存器扩展输出接口;通过外接并入串出移位寄存器扩展输入接口。方式0时,移位操作的波特率固定,为单片机晶振频率的1/12。晶振fosc=6MHz,波特率为500K/秒,2s移位一次;晶振fosc=12MHz,波特率为1M/秒,1s移位一次;第四十二页,共84页。7.3.1串行通信工作方式2、工作方式1波特率可变的8位异步通信接口方式。一帧数据为10位,1个起始位(0),8个数据位,1个停止位(1),先发送或接收最低位。第四十三页,共84页。⑴数据发送7.3.1串行通信工作方式2、工作方式1CPU执行一条写SBUF指令,就启动了串口发送。数据从TXD输出。一帧数据送完后硬件自动置TI为1。注:1)数据写入SBUF后,在串行口由硬件自动加入起始位和停止位,构成完整的字符帧。2)再次发送数据前,用指令将TI清零。第四十四页,共84页。7.3.1串行通信工作方式2、工作方式1⑵数据接收REN=1,串行口采样RXD端,当采样到由1到0跳变时,认定接收到起始位。在移位脉冲作用下,开始接收数据。数据接收:REN=1,串行口采样RXD端,当采样到由1到0跳变时,认定接收到起始位,启动一次接收过程。在8位数据接收完,并检测到高电平停止位后,把接收到的数据装入SBUF,停止位进入RB8中,置位RI,通知CPU从SBUF取走接收到的数据。第四十五页,共84页。7.3.1串行通信工作方式3、工作方式29位异步通信接口方式。一帧数据为11位,1个起始位(0),9个数据位,1个停止位(1),先发送或接收最低位。发送的第9位数据放于TB8中,接收的第9位数据放于RB8中。波特率=(2SMOD/64)×fosc第四十六页,共84页。7.3.1串行通信工作方式3、工作方式2注:发送前,先根据通信协议由软件设置TB8(如奇偶校验位或多机通信的地址/数据标志位),然后将要发送的数据写入SBUF,即启动发送。TB8自动装入第9位数据位,逐一发送。发送完毕,使TI位置“1”。⑴数据发送数据由TXD端输出,附加的第9位数据由SCON中的TB8提供。CPU执行一条写SBUF指令,就启动了串口发送,发送完TI置1第四十七页,共84页。7.3.1串行通信工作方式3、工作方式2⑵数据接收与方式1相似,REN被置“1”后,串行口采样RXD端的电平,RXD引脚上发生由“1”到“0”的跳变,接收器开始接收数据。第四十八页,共84页。

在接收完第9位数据后,需满足以下两个条件,才能将接收到的数据送入SBUF(接收缓冲器)。(1)RI

=

0,意味着接收缓冲器为空。(2)SM2

=

0或接收到的第9位数据位RB8

=

1。当满足上述两个条件时,收到的数据送SBUF(接收缓冲器),第9位数据送入RB8,且RI置“1”。若不满足这两个条件,接收的信息将被丢弃。7.3.1串行通信工作方式3、工作方式2⑵数据接收第四十九页,共84页。7.3.1串行通信工作方式4、工作方式39位异步通信接口方式,波特率可变。其他与方式2类似波特率与工作方式1相同第五十页,共84页。四种工作方式比较工作方式帧格式波特率方式08位全是数据位,没有起始位、停止位固定,即每个机器周期传送一位数据方式110位,其中1位起始位,8位数据位,1位停止位不固定,取决于T1溢出率和SMOD方式211位,其中1位起始位,9位数据位,1位停止位固定,即2SMOD×fosc/64方式3同方式2同方式17.3.1串行通信工作方式四种工作方式的区别主要表现在帧格式及波特率两个方面。第五十一页,共84页。7.3.2串行通信波特率设置波特率是串行通信中数据传输速率的单位,其含义为每秒传送多少位二进制数(B/S)例:数据传送的速率为120个字符每秒,每个字符有1个起始位、8个数据位和一个停止位组成,则其传送波特率为:第五十二页,共84页。波特率计算⑴方式0的波特率是固定的:波特率=fosc/12⑵方式2波特率取决于SMOD波特率=(2SMOD/32)×定时器T1的溢出率方式2波特率=(2SMOD/64)×foscSMOD=0时,波特率=fosc/64,SMOD=1时,波特率=fosc/32⑶方式1、3波特率取决于T1的溢出率SMOD=0时,波特率=T1的溢出率/32,SMOD=1时,波特率=T1的溢出率/16第五十三页,共84页。溢出率计算定时器溢出率:单位时间(1s)定时器溢出的次数;溢出率为溢出周期的倒数。溢出周期:定时器溢出一次所需要的时间。当定时器1作为波特率发生器时,通常选用定时工作方式2(8位自动加载)。第五十四页,共84页。T1溢出一次所需要的时间为:T1每秒所溢出的次数为:设X为计数初值,则:波特率为:第五十五页,共84页。计数初值计算通常,是知道波特率,求计数初值X实际使用时:首先确定波特率;再计算定时器1的计数初值;然后进行定时器的初始化。第五十六页,共84页。【例】若fosc=6MHz,波特率为2400波特,设SMOD=1,则定时/计数器T1的计数初值为多少?若fosc=11.0592MHz,波特率为2400,设SMOD=0,则第五十七页,共84页。

解决的方法只有调整单片机的时钟频率fosc,通常采用11.0592MHz晶振。常用波特率及其产生条件

常用波特率通常按规范取1200、2400、4800、9600、…,若采用晶振12MHz和6MHz,则计算得出的T1定时初值将不是一个整数,产生波特率误差而影响串行通信的同步性能。第五十八页,共84页。第五十九页,共84页。第六十页,共84页。7.3.3串行通信应用串行口初始化设定SCON的SM0、SM1;对工作方式2或3,应根据需要在TB8中写入待发送的第9位数据;除模式0外,还需设定接收/发送的波特率;设定SMOD状态,以控制波特率是否加倍;若工作在方式1或3,则应对定时器T1进行初始化,设定其工作方式和初值;串行口在中断方式工作时,要进行中断设置(编程IE、IP寄存器)。第六十一页,共84页。初始化后,设置串口工作。发送:直接写SBUF,查询TI/中断接收:REN置1,查询RI/中断第六十二页,共84页。工作方式0应用例:74LS165芯片的输入端接八个开关,利用单片机串行方式0将开关的状态串行输入单片机,并在LED上显示。第六十三页,共84页。74LS165芯片资料74LS165是8位并入串出移位寄存器。各引脚功能如下:高电平表示移位,低电平表示置位。SH/LD(shift/load移位/置位):移位与置位控制端。在开始移位之前,需要先从并行输入端口读入数据,这时应将SH/LD置0,并行口的8位数据将被置入74LS165内部的8个触发器;在SH/LD为1时,并行输入被封锁,移位操作开始。第六十四页,共84页。74LS165芯片资料74LS165是8位并入串出移位寄存器。各引脚功能如下:INH(clockinhibit时钟抑制):时钟禁止端。当INH为低电平时,充许时钟输入。CLK(clock):时钟输入端D0~D7:并行输入端SI(serialinput串行输入):串行输入端,用于扩展多个74LS165的首尾连接端。SO(serialoutput):串行输出端.QH:也是串行输出端,它与SO是反相的关系.VCC:接+5V电源端.GND:接地第六十五页,共84页。编程思路:让SH/LD引脚产生一个低电平,输入并锁存开关状态;让SH/LD引脚产生一个高电平,以串行方式0将开关状态移位传送给单片机,通过P2口输出;C语言参考程序:#include<reg51.h>#defineuintunsignedint#defineucharunsignedcharsbitP3_2=P3^2;voiddelay(uintx){ uchari; while(x--) { for(i=0;i<120;i++); }}第六十六页,共84页。voidmain(){

SCON=0x10;//串口方式0,允许接收数据

while(1) { P3_2=0;//并行输入数据

P3_2=1;//允许串行移位操作

while(RI==0);//循环等待接收完毕

RI=0;//清中断标志

P2=SBUF;//送P2口

delay(20);//延时

}}第六十七页,共84页。工作方式1应用【例】设甲乙两机以串行方式1进行数据传送,fosc=11.0592MHz,波特率为1200b/s。甲机发送的1、2、3、4、5、6、7、8个数据存在内部RAM40H~4FH单元中,乙机接收后在数码管中显示。第六十八页,共84页。设SMOD=0,PCON=0x00;T1工作在方式2,T1内启动,定时,故TMOD=0x20T1用于波特率发生器,故禁止中断,ET1=0;TR1=1启动T1计数寄存器初始化:T1计数初值设置:=232=E8HTL1=TH1=0xE8第六十九页,共84页。串口设置串口工作在方式1,SM1SM0=01查询方式传送,禁止串口中断,ES=0。甲机发送,不允许接收,REN=0;SCON=40H;乙机接收,REN=1;SCON=50H第七十页,共84页。甲机发送程序#include<reg51.h>#defineucharunsignedcharucharidatabuf[8]={1,2,3,4,5,6,7,8};//定义要发送的数据uchari;voidmain(){ TMOD=0x20;//设置T1工作方式2 TL1=0xe8; TH1=0xe8;//赋初值

PCON=0x00;//设置SMOD=0 SCON=0x40;//设置串口工作方式1,不允许接收

IE=0x00; TR1=1;//启动T1 for(i=0;i<8;i++)//循环接收

{ SBUF=buf[i]; while(TI==0); TI=0; }}第七十一页,共84页。#include<reg51.h>#defineucharunsignedcharuchari;constunsignedcharLED_TAB[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段码表voiddelay(unsignedintx)//延时函数{ ucharj; while(x--) { for(j=0;j<123;j++) { ; } } }乙机接收程序第七十二页,共84页。voiddisplay(void)//显示函数{ unsignedchark,*DATA;//定义字符变量k,指针变量DATA DATA=0x50;//地址赋初值

for(k=0;k<8;k++)//循环显示8个数字

{ P2=LED_TAB[*DATA];//间接寻址送显示字形到P2口

DATA++;//地址值加1 delay(300); }}第七十三页,共84页。voidmain(){ unsignedchar*P;//定义指针变量

P=0x50;//赋初值

TMOD=0x20;//T1工作在定时器方式2 TL1=0xe8; TH1=0xe8;//置初值

PCON=0x00;//SMOD=0 SCON=0x50;//工作在方式1,允许接收

IE=0x00;//关中断

TR1=1;//启动定时器T1 for(i=0;i<8;i++)//循环接收8个数据

{ while(RI==0);//等待接收8个数据

RI=0; *P=SBUF;//接收数据送指定单元

P++;//单元地址加1,存放下一个数据

}while(1)//循环显示

{ display(); }}第七十四页,共84页。【例】设计一个串行方式2收发程序,设SMOD=1,波特率固定为fosc/32。甲机串行发送片内RAM50H-5FH中的数据,第9位数据作为奇偶校验位,接到接收方核对正确的回复信号(用FFH表示)后,再发送下一字节数据,否则再重发一遍。乙机将接收到的数据存在首址为40H的内RAM中,并核对奇偶校验位。核对正确,发出回复信号FFH;发现错误,发出回复信号00H,并等待重新接收。工作方式2应用第七十五页,共84页。C语言参考程序:甲机发送:#include<reg51.h>//包含特殊功能寄存器库#defineucharunsignedchar//定义uchar为无符号字符数据类型ucharidatabuf[16];//定义数组,设将要发送的16个数据存放在buf数组中.uchardat;uchari;//定义变量dat,i.dat作为要发送数据的缓存器,i作为循环此时的计数。sbitp=PSW^0;//定义PSW^0位变量voidmain()//主函数{PCON=0x80;//置SMOD=1SCON=0x90;//串行口工作在方式2,允许接收第七十六页,共84页。for(i=0;i<16;i++)//循环体,连续发送16个数据

{do{dat=buf[i]//取要发送的数据

ACC=dat;//将所发数据送累加器A,为得到奇偶位

TB8=p;//奇偶位作为第9位输出

SBUF=dat;//发送数据

while(TI==0);//等待发送完毕

TI=0;//发送完后清中断标志

while(RI==0);//等待乙机应答

RI=0;//收到后清中断标志

}while(SBUF!=ff)//出错,重新发送

}}第七十七页,共84页。乙机接收:#include<reg51.h>//包含特殊功能寄存器库#defineucharunsignedchar//定义uchar为无符号字符

温馨提示

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

评论

0/150

提交评论