第五章 串行口.ppt_第1页
第五章 串行口.ppt_第2页
第五章 串行口.ppt_第3页
第五章 串行口.ppt_第4页
第五章 串行口.ppt_第5页
已阅读5页,还剩117页未读 继续免费阅读

下载本文档

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

文档简介

1、2020/9/8,1,第五章8051单片机的串行口原理及应用,2020/9/8,2,通信:在实际应用中,不但计算机与外部设备之间常常要进行信息交换,而且计算机之间也需要交换信息,所有这些信息的交换均称为“通信”。 随着8051应用范围的不断拓宽,单台仪器仪表或控制器往往会带有不止一个的单片机,而多个智能仪器仪表或控制器在单片机应用系统中又常常会构成一个分布式采集、控制系统,上层由PC进行集中管理等。 单片机的通信功能也随之得到发展。 通信的基本方式分为并行通信和串行通信两种。,数据通信概述,2020/9/8,3, 并行传送方式与串行传送方式 并行传送方式 在数据传输时,如果一个数据编码字符的所

2、有各位都同时发送、并排传输,又同时被接收,则称为并行传送方式。并行传送方式要求物理信道为并行内总线或者并行外总线。 特点:传送速度快、效率高。但由于需要的传送数据线多,因而传输成本高。并行数据传输的距离通常小于30米。而在计算机内部的数据传送都是并行传送的。,2020/9/8,4, 串行传送方式 在数据传输时,如果一个数据编码字符的所有各位不是同时发送,而是按一定顺序,一位接着一位在信道中被发送和接收,则称为串行传送方式。 串行传送方式的物理信道为串行总线。 串行数据传送方式的特点是成本低,但速度慢。 计算机与外界的数据传送大多是串行的,其传送距离可以从几米直到几千公里。,2020/9/8,5

3、,图51通信的两种基本方式 (a)并行通信; (b)串行通信,2020/9/8,6,打印机,计算机,网络,鼠标,扫描仪,硬盘,I2C SPI,RS232,USB,常见的串行通信接口:,2020/9/8,7,按照信号传输的方向和同时性,分为单工方式、半双工方式和全双工方式三种。 单工方式 信号(不包括联络信号) 在信道中只能沿一个方向传送,而不能沿相反方向传送的工作方式称为单工方式。 半双工方式 通信的双方均具有发送和接收信息的能力,信道也具有双向传输性能,但是,通信的任何一方都不能同时既发送信息又接收信息,即在指定的时刻,只能沿某一个方向传送信息。这样的传送方式称为半双工方式。 全双工方式 若

4、信号在通信双方之间沿两个方向同时传送,任何一方在同一时刻既能发送又能接收信息,称为全双工方式。双工方式大多采用双线制。, 单工方式、半双工方式、全双工方式,2020/9/8,8,图52串行通信的三种方式 (a)单工方式;(b)半双工方式;(c)全双工方式,2020/9/8,9,单工、双工、半双工方式,单工:广播,双工:电话,2020/9/8,10,在数据通信中,要保证发送的信号在接收端能被正确地接收,必须采用同步技术。常用的同步技术有两种方式,一种称为异步传输也称起止同步方式,另一种称为同步传输也称同步字符同步方式。 异步传输 异步传输以字符为单位进行数据传输,每个字符都用起始位、停止位包装起

5、来,在字符间允许有长短不一的间隙。 在单片机中使用的串行通信都是异步方式。, 异步传输和同步传输,2020/9/8,11,图53串行异步传送的字符格式 (a)字符格式; (b)有空闲位的字符格式,2020/9/8,12,图54 传送ASCII码字符5的波形图,2020/9/8,13,在串行异步传送中,CPU与外设之间事先必须约定: 字符格式。 双方要事先约定字符的编码形式、奇偶校验形式及起始位和停止位的规定。例如用ASCII码通信,有效数据为7位,加1个奇偶校验位、1个起始位和1个停止位共10位。当然停止位也可大于1位。 波特率(Baudrate)。 波特率就是数据的传送速率,即每秒钟传送的二

6、进制位数,单位为位/秒。它与字符的传送速率(字符/秒)之间存在如下关系: 波特率=位/字符字符/秒=位/秒 要求发送端与接收端的波特率必须一致。,2020/9/8,14, 同步传输 同步传输用来对数据块进行传输,一个数据块中包含着许多连续的字符,在字符之间没有空闲。同步传输可以方便地实现某一通信协议要求的帧格式。计算机网络通信基本上是这种。,2020/9/8,15,图55 同步传送,2020/9/8,16,串行通信的传送速率用于说明数据传送的快慢,波特率表示串行通信时每秒钟传送”位” 的数目,比如1s传送1bit,就是1波特。即1波特1bit/s (位/秒) 串行通信常用的标准波特率在RS-2

7、32C标准中已有规定,如波特率为600、1200、2400、4800、9600、19200等等。 假若数据传送速率为120字符/s,而每一个字符帧已规定为10个数据位,则传输速率为120101200bit/s,即波特率为1200,每一位数据传送的时间为波特率的倒数: T112000.833ms, 波特率(BAUD RATE),2020/9/8,17,计算机通信是一种数字信号的通信。 它要求传送线的频带很宽,而在长距离通讯时,通常是利用电话线来传送的,该线不可能有这样宽的频带。如果用数字信号经过传送线直接通讯,信号就会畸变。,信号的调制和解调,2020/9/8,18,因此要在发送端用调制器(Mo

8、dulator)把数字信号转换为模拟信号,在接收端用解调器(Demodulator)检测此模拟信号,再把它转换成数字信号。 FSK(FrequencyShiftKeying)是一种常用的调制方法,它把数字信号的“1”与“0”调制成不同频率的模拟信号。,图56调制与解调示意图,2020/9/8,19,图57 FSK调制法原理图,2020/9/8,20,数据终端与调制器的接口,图510 RS-232C的引脚图,2020/9/8,21,图511 计算机与远方终端和当地终端连接示意图,2020/9/8,22,调制解调器,15V:逻辑1 15V:逻辑0,RS232C标准,美国电子工业协会EIA公布的串行

9、总线标准,DB-25,DB-9,最少3根线,RxD (3) TxD (2) 地 (5),2020/9/8,23,一、 8051串行口结构,串行数据通信主要有两个技术问题,一个是数据传送,另一个是数据转换。 数据传送主要解决传送中的标准、数据帧格式及工作方式等。 数据转换要解决把数据进行串、并行的转换,这种转换通常由通用异步接收发送器(UART) 电路来完成。 数据发送端,要把并行数据转换为串行数据;数据接收端,要把串行数据转换为并行数据。80C51中已集成有UART,有的型号在内部还集成了两个UART。而在其它一些型号中又增加了新的串行口,如 8XC552中就增加了具有I2C总线功能的串行口。

10、,串行口及控制,2020/9/8,24,串行通信接口,(1)UART (Universal Asynchronous Receiver/Transmitter 通用异步接收器/发送器,(2)USRT (Universal Synchronous Receiver/Transmitter) 通用同步接收器/发送器,2020/9/8,25,8051中的串行口是一个全双工的异步串行通信接口,它可作UART(通用异步接收和发送器)用,也可作同步移位寄存器用。 所谓全双工的异步串行通信接口,是说该接口可以同时进行接收和发送数据,口内的接收缓冲器和发送缓冲器在物理上是隔离的,即是完全独立的。可以通过访问特

11、殊功能寄存器SBUF,来访问接收缓冲器和发送缓冲器。接收缓冲器具有双缓冲的功能,即它在接收第一个数据字节后,能接收笫二个数据字节。但是在接收完第二个字节后,若笫一个数据字节还未取走,那么该数据字节将丢失。,2020/9/8,26,图512 MCS-51串行口的原理结构图,2020/9/8,27, 波特率发生器: 主要由T1及内部的一些控制开关和分频器所组成。它提供串行口的时钟信号为 TXCLOCK(发送时钟)和 RXCLOCK(接收时钟)。相应的控制波特率发生器的特殊功能寄存器有 TMOD、TCON、TL1、TH1等。,2020/9/8,28, 串行口的内部 串行数据缓冲寄存器SBUF 有接收

12、缓冲器SBUF和发送缓冲器SBUF,以便80C51能以全双工方式进行通信。它们在物理上是隔离的,但是占用同一个地址(99H) 。 串行口控制寄存器SCON 串行数据输入输出引脚 接收方式下,串行数据从RXD(P3.0)引脚输入,串行口内部在接收缓冲器之前还有移位寄存器,从而构成了串行接收的双缓冲结构,可以避免在数据接收过程中出现帧重叠错误,即在下一帧数据来时,前一帧数据还没有读走。 发送方式下,串行数据通过TXD(P3.1)引脚输出。,2020/9/8,29, 串行口控制逻辑 接受来自波特率发生器的时钟信号TXCLOCK(发送时钟)和RXCLOCK(接收时钟); 控制内部的输入移位寄存器将外部

13、的串行数据转换为并行数据; 控制内部的输出移位寄存器将内部的并行数据转换为串行数据输出; 控制串行中断(RI和TI)。,2020/9/8,30,二、 80C51串行口控制, 串行口状态控制寄存器 SCON 串行口状态控制寄存器SCON用来控制串行通信的方式选择、接收,指示串行口的中断状态。寄存器SCON既可字节寻址也可位寻址,字节地址为98H,位地址为98H9FH。其格式如下:,2020/9/8,31, SM0(SCON.7),SM1(SCON.6)串行口工作方式选择位。,表51 串行口工作方式选择,2020/9/8,32,SM2(SCON.5)允许方式2、3中的多处理机通信位。 方式0时,S

14、M20。 方式1时,若SM2l,只有接收到有效的停止位,接收中断RI才置1。 方式2和方式3时,若SM21,则只有当接收到的第9位数据(RB8)为1时,才将接收到的前8位数据送入缓冲器SBUF中,并把RI置1、同时向CPU申请中断;如果接收到的第9位数据(RB8)为0,RI置0,将接收到的前8位数据丢弃。 而当SM20时,则不论接收到的笫九位数据是0 或1 ,都将前8位数据装入SBUF中,并申请中断。,2020/9/8,33,REN(SCON.4)允许串行接收位。 REN1时,允许串行接收;REN0时,禁止串行接收。 用软件置位清除。 TB8(SCON.3)方式2和方式3中要发送的第9位数据。

15、 在通信协议中,常规定TB8作为奇偶校验位。在80C51多机通信中,TB8=0用来表示数据帧;TB8=1表示是地址帧。 用软件置位清除。 RB8(SCON.2)方式2和方式3中接收到的第9位数据。 方式1中接收到的是停止位。方式0中不使用这一位。,2020/9/8,34,TI(SCON1)发送中断标志位。 方式 0中,在发送第 8位末尾置位;在其它方式时,在发送停止位开始时设置。 由硬件置位,用软件清除。 RI(SCON0)接收中断标志位。 方式 0中,在接收第8位末尾置位;在其它方式时,在接收停止位中间设置。 由硬件置位,用软件清除。 系统复位后,SCON中所有位都被清除。,2020/9/8

16、,35,其中最高位SMOD与串行口控制有关,其它位与掉电方式有关。其格式如下:,SMOD(PCON.7)串行通信波特率系数控制位。 当SMOD1时,使波特率加倍。复位后,SMOD0。, 电源控制寄存器 PCON,2020/9/8,36,包含在物理上是隔离的两个8位寄存器:发送数据寄存器和接收数据寄存器,它们共用一个地址99H。其格式如下:,读SBUF(MOVA,SBUF),访问接收数据寄存器; 写SBUF(MOV SBUF,A),访问发送数据寄存器。, 串行数据寄存器SBUF,系统复位后, SBUF中内容不确定。,2020/9/8,37,串行口的工作方式,在串行口控制寄存器SCON中,SM0和

17、SM1位决定串行口的工作方式。80C51串行口共有四种工作方式。,2020/9/8,38,1 、串行口方式0 同步移位寄存器方式,当SM00、SM10时,串行口选择方式0。这种工作方式实质上是一种同步移位寄存器方式。 数据传输波特率固定为(112)fosc。 由RXD(P30)引脚输入或输出数据。 由TXD(P31)引脚输出同步移位时钟。 接收发送的是8位数据,传输时低位在前。帧格式如下:,2020/9/8,39,图513 串行口工作方式0工作原理图,2020/9/8,40,发送 当执行任何一条写SBUF的指令(MOV SBUF,A)时,就启动串行数据的发送。 在执行写入SBUF的指令时,选通

18、内部D触发器置1 ,构成发送移位寄存器的第9位,并使发送控制器开始发送。当发送脉冲有效之后,移位寄存器的内容由RXD(P3.0)引脚串行移位输出;移位脉冲由TXD(P3l)引脚输出。 在发送有效的期间,每个机器周期,发送移位寄存器右移一位,在其左边补0。当数据最高位移到移位寄存器的输出位时,原写入第9位的 l正好移到最高位的左边一位,由此向左的所有位均为 0,零检测器通知发送控制器要进行最后一次移位,并撤销发送有效,同时使发送中断标志TI置位。至此,完成了一帧数据发送的全过程。若CPU响应中断,则执行从0023H开始的串行口发送中断服务程序。,2020/9/8,41,接收 当REN1(允许接收

19、)且RI位清除时,就会启动一次接收过程。 在下一机器周期的S6P2时刻,接收控制器将1111 1110写入接收移位寄存器,并在下一时钟周期S1P1使接收控制器的接收有效,打开“与非门” ,同时由TXD引脚输出移位脉冲。在移位脉冲控制下,接收移位寄存器的内容每一个机器周期左移一位,同时由RXD引脚接收一位输入信号。 每当接收移位寄存器左移一位,原写入的1111 1110也左移一位。当最右边的0移到最左边时,标志着接收控制器要进行最后一次移位。在最后一次移位即将结束时,接收移位寄存器的内容送入接收数据缓冲寄存器SBUF,然后在启动接收的第10个机器周期的S1P1时,清除接收信号,置位SCON中的R

20、I,发出中断申请。完成一帧数据的接收过程。若CPU响应中断,则执行从0023H 开始的串行口接收中断服务程序,2020/9/8,42,在方式0工作时,必须使SCON寄存器中的SM2位为“0”,这并不影响TB8位和RB8位。 方式0发送或接收完8位数据后由硬件置位TI或RI中断请求标志,CPU在响应中断后要用软件清除TI或RI标志。 若串行口要作为并行口输入输出,这时必须设置“串入并出”或“并入串出”的移位寄存器来配合使用(如CD4094或CD4014等)。,注意:,2020/9/8,43,图514 一种串行转换为并行的方法,2020/9/8,44,2 串行口方式110位UART,当 SM00、

21、SM11时,串行口选择方式1。 数据传输波特率由T1的溢出决定,可用程序设定。 由 TXD(P3.1)引脚发送数据。 由 RXD(P3.0)引脚接收数据。 发送或接收一帧信息为10位:1位起始位(0)、8位数据位(低位在前)和l位停止位(1)。帧格式如下:,2020/9/8,45,发送: 当执行任何一条写 SBUF的指令时,就启动串行数据的发送。在执行写入SBUF的指令时,也将1写入发送移位寄存器的第9位(由SBUF和1个独立的D触发器构成),并通知发送控制器有发送请求。实际上发送过程开始于16分频计数器下次满度翻转(由全1变全0)后的那个机器周期的开始。每位的发送过程与16分频计数器同步,而

22、不是与“写SBUF”同步。,2020/9/8,46,图515 串行口方式1发送工作原理图,2020/9/8,47,开始发送后的一个位周期,发送信号有效,开始将起始位送TXD引脚。一位时间后,数据信号有效。发送移位寄存器将数据由低位到高位顺序输出至TXD引脚。一位时间后,第一个移位脉冲出现将最低数据位从右边移出,同时0从左边挤入。当最高数据位移至发送移位寄存器的出端时,先前装入的第9位的l,正好在最高数据位的左边,而它的右边全部为0。这种状态被零检测器检测到,在第10个位周期(16分频计数器回0时),发送控制器进行最后一次移位,清除发送信号,同时使SCON寄存器中TI置位,完成了一帧数据发送的全

23、过程。若CPU响应中断,则执行从0023H开始的串行口发送中断服务程序。,2020/9/8,48,接收 当REN1且清除RI后,若在RXD引脚上检测到一个1到0的跳变,立即启动一次接收。同时,复位16分频计数器,使输入位的边沿与时钟对齐,并将1FFH(即9个l)写入接收移位寄存器。接收控制器以波特率的16倍的速率继续对RXD(P30)引脚进行检测, 计数器的16个状态把每一位的时间分为16份,对每一位时间的第7、8、9个计数状态,位检测器对RXD端的值采样,这三个状态理论上对应于每一位的中央值。若发送端与接收端的波特率有差异,就会发生偏移,只要这种差异在允许范围内,就不至于发生错位或漏码。在上

24、述三个状态下,取得三个采样值,其中至少有两个值是一致的,即采用3取2的多数表决法,可抑制噪声。,2020/9/8,49,图516 串行口方式1接收工作原理图,2020/9/8,50,如果在第1个时钟周期中接收到的不是0,说明它不是一帧数据的起始位,则复位接收电路,继续检测RXD引脚上l到0的跳变。如果接收到的是起始位,就将其移入接收移位寄存器,然后接收该帧的其它位。接收到的位从右边移入,原来写入的1,从左边移出,当起始位移到最左边时,接收控制器将控制进行最后一次移位,把接收到的9位数据送入接收数据缓冲器SBUF和RB8,而且置位RI。 在进行最后一次移位时,能将数据送入接收数据缓冲器SBUF和

25、RB8,而且置位RI的条件是: RI0 即上一帧数据接收完成时发出的中断请求已被响应,SBUF中数据已被取走。 SM20或接收到的停止位1。 若以上两个条件中有一个不满足,将不可恢复地丢失接收到的这一帧信息。,2020/9/8,51,3 串行口方式2和3 11位UART,当SM01、SM10时,串行口选择方式2;当SM11、SM01时,串行口选择方式3。 由TXD(P3l)引脚发送数据。 由RXD(P30)引脚接收数据。 发送或接收一帧信息为11位:1位起始位(0)、8位数据位(低位在前) 、1位可编程位和1位停止位(l)。 发送时可编程位TB8可设置为1或0,接收时可编程位进入SCON寄存器

26、的RB8位。 方式2的波特率是固定的,为振荡器频率的1/32或1/64。方式3的波特率则由T1的溢出决定,可用程序设定。,2020/9/8,52,帧格式如下:,发送 当执行任何一条写SBUF的指令时,就启动串行数据的发送。在执行写入SBUF的指令时,也将 1写入发送移位寄存器的第 9位,并通知发送控制器有发送请求。实际上发送过程开始于16分频计数器下次满度翻转(由全1变全0)后的那个机器周期的开始。所以每位的发送过程与16分频计数器同步,而不是与“写SBUF”同步。,2020/9/8,53,图517 串行口工作方式2工作原理图,2020/9/8,54,开始发送后的一个位周期,发送信号有效,开始

27、将起始位送TXD引脚。一位时间后,数据信号有效。发送移位寄存器将数据由低位到高位顺序输出至 TXD引脚。一位时间后,第一个移位脉冲出现将最低数据位从右边移出,同时0从左边挤入。当最高数据位移至发送移位寄存器的输出端时,先前装入的第 9位的 1,正好在最高数据位的左边,而它的右边全部为0。在第10个位周期间 (16分频计数器回0时),发送控制器进行最后一次移位,清除发送信号,同时使TI置位。,2020/9/8,55,接收 当RENl且清除RI后,若在RXD引脚上检测到一个l到0的跳变,立即启动一次接收。同时,复位16分频计数器,使输入位的边沿与时钟对齐,并将1FFH(即9个1)写入接收移位寄存器

28、。接收控制器以波特率的16倍的速率继续对 RXD引脚进行检测,对每一位时间的第7、8、9个计数状态的采样值用多数表决法,当两次或两次以上的采样值相同时,采样值予以接受。 如果在第1个时钟周期中接收到的不是0,就复位接收电路,继续检测RXD引脚上 1到 0的跳变。如果接收到的是起始位,就将其移入接收移位寄存器,然后接该帧的其它位。接收到的位从右边移入,原来写入的1,从左边移出,当起始位移到最左边时,接收控制器将控制进行最后一次移位,把接收到的9位数据送入接收数据缓冲器SBUF和RB8,而且置位RI。,2020/9/8,56,在进行最后一次移位时,能将数据送入接收数据缓冲器SBUF和RB8,而且置

29、位RI的条件是: RI0; SM20或接收到的停止位1。 若以上两个条件中有一个不满足,将不可恢复地丢失接收到的这一帧信息。,2020/9/8,57,多处理机通信方式,某些应用系统中,往往需要对多个对象进行控制,采用一个单片机来控制系统中一个对象,然后采用多处理机通信方式实现应用系统的整个功能。 在串行口控制寄存器SCON中,设有多处理机通信位SM2(SCON5)。 当串行口以方式2或方式3接收时,若SM21,只有当接收到的第9位数据(RB8)为1时,才将数据送入接收缓冲器SBUF,并使RI置1,申请中断,否则数据将丢失;若SM20,则无论第9位数据(RB8)是1还是0,都能将数据装入SBUF

30、,并且发中断。利用这一特性,便可实现主机与多个从机之间的串行通信。,2020/9/8,58,图518 80C51多机分布式系统示意图,2020/9/8,59,系统初始化时,将所有从机中的SM2位均设置为1,并处于允许串行口中断接收状态。 主机欲与某从机通信,先向所有从机发出所选从机的地址,从机地址符合后,接着才发送命令或数据。 在主机发地址时,置第9位数据(TB8)为1,表示主机发送的是地址帧; 当主机呼叫某从机联络正确后,主机发送命令或数据帧时,将第9位数据(TB8)清0。,2020/9/8,60,各从机由于SM2置1,将响应主机发来的第9位数据(RB8)为1的地址信息。从机响应中断后,有两

31、种不同的操作: 若从机的地址与主机点名的地址不相同,则该从机将继续维持SM2为l,从而拒绝接收主机后面发来的命令或数据信息,等待主机的下一次点名。 若从机的地址与主机点名的地址相同,该从机将本机的SM2清0,继续接收主机发来的命令或数据,响应中断。,2020/9/8,61,1、串行口的波特率发生器及波特率计算,方式0时的波特率由振荡器的频率(fosc)所确定:波特率为fosc/12。 方式2时的波特率由振荡器的频率(fosc)和SMOD位(PCON7)所确定:,当SMOD位1时,波特率fosc/32;当SMOD0时,波特率fosc/64。 方式1和3时的波特率由定时器T1的溢出率和SMOD(P

32、CON7)所确定。,串行口的应用,2020/9/8,62,(1)用定时器T1产生波特率,定时器T1的溢出率与它的工作方式有关: 定时器T1工作于方式0:此时定时器T1相当于一个13位的计数器。,式中:TC13位计数器初值; X中断服务程序的机器周期数,在中断服务程序中重新对定时器置数。,2020/9/8,63,式中:TC16位计数器初值; X中断服务程序的机器周期数,在中断服务程序中重新对定时器置数。 定时器Tl工作于方式2:此时定时器T1工作于一个8位可重装的方式,用TL1计数,用TH1装初值。,定时器T1工作于方式1:此时定时器T1相当于一个16位的计数器。,定时器T1的溢出率=fosc/

33、(12(2nTC) ),2020/9/8,64,表52 串行口常用波特率及初值,2020/9/8,65,串行通信应用,方式0 【应用一】流水灯 采用80C51的串行口外接CD4094扩展8位并行口,如图所示,CD4094的各个输出端均接一发光二极管,要求发光二极管从左到右流水显示。,2020/9/8,66,ORG 0000H LJMP MAIN ORG 2000H MAIN:MOV SCON,#00H ;置串行口工作方式0 MOV A,#01H :最高位灯先亮 CLR P1.1 ;关闭并行输出(避象传输过程中, ;各LED的“暗红”现象) OUT0:MOV SBUF,A ;开始串行输出 OUT

34、1:JNB TI,OUT1 ;输出完否? CLR TI ;完了,清TI标志,以备下次发送 SETB P1.1 ;打开并行口输出 ACALL DELAY ;延时一段时间 RL A ;循环右移 CLR P1.1 ;关闭并行输出 SJMP OUT0 ;循环 DELAY: ;延时子程序,不再重复 END,2020/9/8,67,【应用二】点对点通信 单片机1中有5个存放在30H34H单元中数据发送给单片机2,单片机2收到该5个数据要存放在50H54H单元中,要求采用4.8k波特率进行传送,两台单片机振荡频率均为6MHz。 两台单片机发送和接收数据之前需要一“握手”信号“55H”,互相询问对方是否准备好

35、。任一单片机接收到对方的“握手”信号“55H”,均置本机的F0(PSW.5)标志位为“1”,表明本机已经知道对方准备就绪,可以进行发送和接收操作。,方式1的编程和应用,2020/9/8,68,两台单片机的定时器T1采用工作方式2,可以避免计数溢出后用软件重装定时初值。 先计算定时器T1的初值,取SMOD=0 : 定时器T1的溢出率=波特率32/2SMOD =480032/20 =153600 然后求出其对应的计数初值为: X=2nfosc/(T1的溢出率12) =286106/(15360012)253=0FDH 为了简便起见,采用10位的串口方式1进行异步通信。,2020/9/8,69,单片

36、机1的程序: ORG 0000H LJMP START ORG 1000H START:MOV TMOD,#20H ;T1工作模式2 MOV SCON,#50H ;置串行口工作方式 MOV PCON,#00H ;SMOD=0,该语句也可不要 MOV TL1,#0FDH MOV TH1,#0FDH ;初始化波特率 SETB TR1 ;T1开始工作,2020/9/8,70,LAB0 :MOV SBUF,#55H;发送出“握手”信号 JNB TI,$ CLR TI JNB RI,$ CLR RI MOV A,SBUF CJNE A,#55H,LAB0 SETB F0 LAB1: MOV R0,#30

37、H LAB2: MOV SBUF, R0 INC R0 JNB TI,$ CLR TI CJNE R0,#34H,LAB2 END,2020/9/8,71,单片机2的程序: ORG 0000H LJMP START ORG 0023H LJMP INPUT ORG 1000H START:MOV TMOD,#20H ;T1工作模式2 MOV SCON,#50H ;置串行口工作方式 MOV PCON,#00H ;SMOD=0,该语句也可不要 MOV TL1,#0FDH MOV TH1,#0FDH ;初始化波特率 MOV R0,#50H SETB EA ;开中断 SETB ES ;允许串行口中断

38、SETB TR1 ;T1开始工作 LJMP $,2020/9/8,72,INPUT:JNB RI,LAB3 JB F0, LAB1 MOV A,SBUF; CJNE A,#55H,LAB0 SETB F0; MOV SBUF,#55H;发送出“握手”信号 LAB0:CLR RI RETI LAB1:MOV R0,SBUF INC R0 CJNE R0,#55H,LAB2 CLR ES LAB2:CLR RI; RETI LAB3:CLR TI; RETI END,2020/9/8,73,例:试编写双机通信程序。甲、乙双机均为串行口方式1,并以定时器T1的方式2为波特率发生器,波特率为2400。

39、 波特率的计算:这里使用6MHz晶振,以T1的方式2制定波特率。此时T1相当于一个8位的计数器。 计算定时器T1的计数初值: 2smod fosc 1 波特率= 32 12 28TH1 TH1=28(2SMODfosc)(波特率3212) =256(206106)(24003212) =2566.5=249.5=FAH,2020/9/8,74, 甲机发送: 将以片内RAM的78H及77H的内容为首地址、以76H及75H的内容减1为末地址的数据块内容,通过串行口传至乙机。 例:(78H) 20H;首地址高位 (77H)00H (76H)20H;末地址高位 (75H)20H 即要求程序将片外RAM

40、的2000H20lFH中的内容输出到串行口。对数据块首、末地址的传送以查询方式进行,而数据的传送以中断方式进行。,2020/9/8,75,ORG0000H SJMPTRANS ORG 0023H ;串行口中断入口 AJMP SINT ORG0030H TRANS:MOV TMOD,20H;置T1为定时器方式2 MOVTL1,0FAH ;置T1定时常数 MOV TH1,0FAH SETB EA ;允许中断 CLR ES ;关串行口中断 MOVPCON,#00H;波特率不倍增 CLR TI ;清发送中断 MOV SCON,40H ;置串行口方式1 MOV SBUF,78H ;输出首地址,2020/

41、9/8,76,WAIT1:JNB TI,WAITI ;查询等待发送结束 CLR TI MOVSBUF,77H WAIT2:JNB TI,WAIT2 ;查询等待发送结束 CLR TI MOV SBUF,76H ;输出末地址 WAIT3:JNB TI,WAIT3 CLR TI MOV SBUF,75H WAIT4:JNB TI,WAIT4 CLR TI SETB ES ;允许串行口中断,2020/9/8,77,MOV DPH,78H;输出数据块中第1个数据 MOV DPL,77H MOVX A,DPTR CLR TI MOV SBUF,A SJMP$;中断等待 ORG0200H;串行口中断服务程序

42、 SINT:PUSH DPL ;保护现场 PUSH DPH PUSH A INC77H;地址加1 MOVA,77H JNZJP1 INC78H,2020/9/8,78,JP1:MOV A,78H CJNE A,76H,END1 ;判数据传送是否结束,未;结束则转END1 MOV A,77H CJNE A,75H,END1 CLR ES ;结束,关串行口中断 ESCOM:POP A;恢复现场 POP DPH POP DPL RETI END1:MOV DPH,78H;数据输出未结束,则继续发送 MOV DPL,77H MOVX A,DPTR CLR TI MOV SBUF,A RETI,2020

43、/9/8,79, 乙机接收 乙机通过RXD引脚接收甲机发来的数据,接收波特率与甲机一样。接收的第1、2字节是数据块的首地址,第3、4字节是数据块的末地址减1,第5字节开始是数据,接收到的数据依次存入数据块首地址开始的存储器中。,ORG0000H SJMPRECEIVE;乙机接收 ORG0023H AJMPRSINT;串行口中断入口,2020/9/8,80,ORG0030H RECEIVE:MOV TMOD,#20H;设T1为定时器方式2 MOVTL1,0FAH ;置T1定时常数 MOV TH1,0FAH SETB EA ;允许中断 CLR ES ;关串行口中断 CLR TI ;清发送中断 MO

44、V SCON,50H ;置串行口方式1、接收 CLR 20H ;置地址标志(20H0,为;地址;20H1,为数据) MOV 70H,78H SJMP$;中断等待 ORG0200H,2020/9/8,81,RSINT:PUSH DPL ;保护现场 PUSH DPH PUSH ACC MOV A,R0 PUSH ACC JB 20H,DATA ;判别接收的是地址还是数据,是数 ;据,转移 MOV R0,70H ;是地址,分别送入78H75H中去 MOV A,SBUF MOV R0,A DEC 70H CLR RI MOV A, 74H CJNE A,70H,RETURN ;是地址,转结束 SETB

45、 20H;地址已接收完,置接收数据标志,2020/9/8,82,RETURN:POP ACC ;恢复现场 MOV R0,A POP ACC POP DPH POP DPL RETI DATA:MOV DPH,78H;接收数据 MOV DPL,77H MOV A,SBUF MOVX DPTR,A ;将数据送入片外RAM CLR RI,2020/9/8,83,INC 77H ;地址加 1 MOV A,77H JNZ DATA1 INC 78H DATA1MOV A,76H CJNZ A,78H,RETURN MOVA,75H CJNE A,77H,RETURN CLR ES ;结束,关串行口中断

46、AJMP RETURN,2020/9/8,84,方式3,【应用三】主、从机通信 设有一多机通信系统,该系统由一个主机和3个从机组成。主机和从机之间可双向通信,从机和从机之间通信必须经过主机,此时主机仅仅相当于一数据收发器。,2020/9/8,85,主机只发送自己内存单元40H43H四个数据给从机2,从机2将接收到的数据存到内存单元50H53H中,则参考程序如下:,主机的程序: ORG 0000H LJMP START ORG 0023H;串口中断入口地址 LJMP SEND ORG 1000H START:MOV TMOD,#20H;T1工作模式2 MOV SCON,#0F8H;置串行口工作方

47、式 MOV TL1,#0FDH MOV TH1,#0FDH;初始化波特率 SETB EA;开中断 SETB ES;允许串行口中断 SETB TR1;T1开始工作,2020/9/8,86,INT: MOV SBUF,#02H;发送从机号 MOV R0,#40H; LJMP $ SEND: CLR TB8;准备发送数据 MOV SBUF,R0 INC R0 CJNE R0,#44H,LAB; CLR ES;串口中断完成 LAB: CLR TI;为下次发送数据作准备 RETI END,2020/9/8,87,从机2的程序: ORG 0000H LJMP START ORG 0023H LJMP IN

48、PUT NAME EQU #2 ORG 1000H START:MOV TMOD,#20H ;T1工作模式2 MOV SCON,#0F8H ;置串行口工作方式 MOV TL1,#0FDH MOV TH1,#0FDH ;初始化波特率 MOV R0,#50H SETB EA ;开中断 SETB ES ;允许串行口中断 SETB TR1 ;T1开始工作 LJMP $,2020/9/8,88,INPUT:JNB RB8,LAB1;判接收的是地址还是数据 MOV A,SBUF; CJNE A,NAME,LAB0;不是本机号,则返回 CLR SM2;准备接收主机数据 LAB0:CLR RI;为下次接收作准

49、备 RETI LAB1:MOV R0,SBUF INC R0 CJNE R0,#54H,LAB2 SETB SM2; CLR ES; LAB2:CLR RI; RETI END,2020/9/8,89,【应用四】PC机与单片机通信 单片机异步通信的一个重要应用实例是与PC机进行通信。上位机PC机的串口通信软件多采用高级语言来编写(如VC+6.0等),可以在许多资料或网络上方便地查阅。由于PC机的串行口为RS232接口,所以通信时可以选用RS232接口芯片。下面主要介绍单片机每隔一段时间向PC机轮流送数55H和AAH,并接收PC机送来的数据,且转送到P1口。,2020/9/8,90,ORG 00

50、00H LJMP START ORG 1000H START:MOV TMOD,#20H;T1工作模式2 MOV PCON,#80H;SMOD=1 MOV TL1,#0FDH MOV TH1,#0FDH;初始化波特率 MOV SCON,#50H;置串行口工作方式 MOV R0,#0AAH;准备送出的数 SETB TR1;T1开始工作,2020/9/8,91,WAIT:MOV A,R0 CPL A MOV R0,A MOV SBUF,A LCALL DELAY JBC TI,WAIT1 ;如果TI等于1,则清TI并转WAIT1 AJMP WAIT WAIT1:JBC RI,READ ;如果RI等

51、于1,则清RI并转READ AJMP WAIT1 READ:MOV A,SBUF ;将取得的数送P1口 MOV P1,A LJMP WAIT DELAY:MOV R7,#0FFH ;延时子程序 DJNZ R7,$ RET END,2020/9/8,92,例: 通过串行口发送带奇偶校验位的数据块 ASCII码由7位组成,其最高位可作为奇偶校验位用。数据块通过串行口发送和接收,采用8位异步通信,波特率为1200,已知fosc11.0592MHz。 从内部RAM单元20H3FH中取出ASCII码加上奇偶校验位之后发出。设串行口为方式1,定时器/计数器T1为方式2作为串行口的波特率发生器。 SMOD0

52、TH1232E8H,2020/9/8,93,ORG0100H MOVTMOD,#20H;设T1为方式2 MOVTL1,#0E8H;T1定时常数 MOVTH1,#0E8H CLR ES SETBTR1;启动T1 MOVSCON,#01000000B;设串行口为方式1 MOVR0,#20H;设发送数据区首址 MOVR7,#32;发送32个ASCII码数据 LOOP:MOV A,R0;取ASCII码数据 ACALL SP-OUT;调用串行口发送子程序 INCR0;未发送完,则继续 DJNZR7,LOOP ,2020/9/8,94,串行口发送子程序 SP-OUT:MOV C,P;设奇校验位 CPLC

53、MOVACC.7,C MOVSBUF,A;带校验位发送 JNBTI,$;发送等待 CLRTI RET,2020/9/8,95,例 通过串行口接收带奇偶校验位的数据块。把接收到的32个字节数据存放到20H3FH中,波特率仍为1200,若奇校验出错,将进位标志C置1 。 ORG0100H MOVTMOD,#20H;设T1为定时器方式2 MOVTL1,#0E8H;设T1时间常数 MOVTH1,#0E8H SETBTR1;启动T1 MOV SCON,#01010000B;设串行口为方式1 CLR ES MOVR0,#20H;接收缓冲区首址 MOVR7,#32;接收字节计数器,2020/9/8,96,L

54、OOP:ACALLSP-IN;调用带奇校验的串行口接; 收子程序 JCERROR;校验错,转出错处理 MOVR0,A;存入 INCR0 DJNZR7,LOOP;未接收完,则继续 ERROR:;校验错,处理 SP-IN:JNBRI,$ CLRRI MOVA,SBUF;接收一个字节 MOVC,P;检查奇校验位,若出错,C=1 CPLC ANLA,#7FH;去掉校验位后的ASCII码数据 RET,2020/9/8,97,例:串行口方式2时, 附加的第9位数据为SCON中的TB8,它由软件置位或清0, 作为数据的奇偶校验位,试对其发送和接收进行编程。 PIPL:PUSH PSW ;保护现场 PUSH

55、A CLR TI ;清0发送中断标志 MOV A,R0 ;取数据 MOV C,P ;奇偶位送C MOV TB8,C ;奇偶位送TB8 MOV SBUF,A ;数据写入发送缓冲器,启动发送 INC R0 ;数据指针加1 POP A ;恢复现场 POP PSW RETI ;中断返回,2020/9/8,98,PIPL: PUSH PSW ;保护现场 PUSH A CLR RI ;清0接收中断标志 MOV A,SUBF ;接收数据 MOV C,P ;取奇偶校验位 JNC L1 ;偶校验时转L1 JNB RB8,ERR ;奇校验时RB8为0转出错处理 SJMP L2 L1: JB RB8,ERR ;偶校验时RB8为1转出错处理 L2: MOV R0,A ;奇偶校验对时存入数据 INC R0 ;修改指针 POP A ;恢复现场 POP PSW RETI ;中断返回 ERR: ;出错处理 RETI ;中断返回,2020/9/8,99,例:设有甲、乙两台单片机,以工作方式2、全双工串行通信、每帧为11位、可程控的第9位数据位用于奇偶校验的补偶位。编出能实现如下功能的程序: 甲机:每发送1帧信息,乙机对接收的数据进行奇偶校验,若补偶正确

温馨提示

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

评论

0/150

提交评论