首页 第七章 80C51单片微机的串行口原理及应用

第七章 80C51单片微机的串行口原理及应用

举报
开通vip

第七章 80C51单片微机的串行口原理及应用nullnull普通高等教育“十一五”国家级规划教材 单片微型计算机原理与接口技术 (第二版) 高锋 编著 科学出版社 北京第七章 80C51单片微机的串行口 原理及应用 第七章 80C51单片微机的串行口 原理及应用 null 通信:计算机与外界的数据传送。 单台仪器仪表或控制器往往会带有不止一个的单片微机, 多个智能仪器仪表或控制器在单片微机应用系统中又常常会构成一个分布式采集、控制系统,上层由PC进行集中管理等。7.1 串行数据通信概述 7.1 串行数据通信概述 ⒈ 传送方...

第七章  80C51单片微机的串行口原理及应用
nullnull普通高等教育“十一五”国家级规划教材 单片微型计算机原理与接口技术 (第二版) 高锋 编著 科学出版社 北京第七章 80C51单片微机的串行口 原理及应用 第七章 80C51单片微机的串行口 原理及应用 null 通信:计算机与外界的数据传送。 单台仪器仪 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 或控制器往往会带有不止一个的单片微机, 多个智能仪器仪表或控制器在单片微机应用系统中又常常会构成一个分布式采集、控制系统,上层由PC进行集中管理等。7.1 串行数据通信概述 7.1 串行数据通信概述 ⒈ 传送方式  ⑴ 并行传送方式   在数据传输时,一个数据编码字符的所有各位都同时发送、并排传输,又同时被接收。 并行传送方式要求物理信道为并行内总线或者并行外总线。 null ⑵ 串行传送方式   在数据传输时,一个数据编码字符的所有各位按一定顺序,一位接着一位在信道中被发送和接收。 ◆串行传送方式的物理信道为串行总线。 计算机与外界的数据传送大多是串行的,其传送距离可以从几米直到几千公里。 null ⒉ 单工方式、半双工方式、全双工方式  ⑴ 单工方式  信号(不包括联络信号) 在信道中只能沿一个方向传送。  ⑵ 半双工方式  通信的双方均具有发送和接收信息的能力,信道也具有双向传输性能,通信的任何一方在指定的时刻,只能沿某一个方向传送信息。 ⑶ 全双工方式 若信号在通信双方之间沿两个方向同时传送,任何一方在同一时刻既能发送又能接收信息。 null ⒊ 异步传输和同步传输 在数据通信中,要保证发送的信号在接收端能被正确地接收,必须采用同步技术。 常用的同步技术有两种方式,一种称为异步传输也称起止同步方式,另一种称为同步传输也称同步字符同步方式。 null⑴ 异步传输  以字符为单位进行数据传输,每个字符都用起始位、停止位包装起来,在字符间允许有长短不一的间隙。  ⑵ 同步传输 对数据块进行传输,一个数据块中包含着许多连续的字符,在字符之间没有空闲。同步传输可以方便地实现某一通信协议要求的帧 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 。 null ⒋ 波特率(BAUD RATE)  串行通信的传送速率用于 说明 关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书 数据传送的快慢,“波特率”表示每秒种传输离散信号事件的个数,或每秒信号电平的变化次数,单位为band(波特)。“比特率”是指每秒传送二进制数据的位数,单位为比特/秒,记作bits/s或b/s或bps。 在二进制的情况下,波特率与比特率数值相等。 null串行通信常用的 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 波特率在RS-232C标准中已有规定,如波特率为600、1200、2400、4800、9600、19200等等。 假若数据传送速率为120字符/s,而每一个字符帧已规定为10个数据位,则传输速率为120×10=1200bit/s,即波特率为1200,每一位数据传送的时间为波特率的倒数: T=1÷1200=0.833ms 7.2 80C51串行口及控制 7.2.1 80C51串行口结构 7.2 80C51串行口及控制 7.2.1 80C51串行口结构 串行数据通信主要有两个技术问题,一个是数据传送,另一个是数据转换。 数据传送主要解决传送中的标准、数据帧格式及工作方式等。 数据转换要解决把数据进行串、并行的转换,这种转换通常由通用异步接收发送器(UART) 电路来完成。数据发送端,要把并行数据转换为串行数据,而在数据接收端,要把串行数据转换为并行数据。 80C51中已集成有UART。 8XC552中就增加了具有I2C总线功能的串行口。null 80C51中的串行口是一个全双工的异步串行通信接口,它可作UART(通用异步接收和发送器)用,也可作同步移位寄存器用。 口内的接收缓冲器和发送缓冲器在物理上是隔离的。 可以通过访问特殊功能寄存器SBUF,来访问接收缓冲器和发送缓冲器。接收缓冲器具有双缓冲的功能,即它在接收第一个数据字节后,能接收笫二个数据字节。但是在接收完第二个字节后,若笫一个数据字节还未取走,那么该数据字节将丢失。 80C51串行口基本结构如图7–1所示。 null ⒈ 波特率发生器  由T1、T2 及内部的一些控制开关和分频器所组成。它提供串行口的时钟信号为 TXCLOCK和 RXCLOCK。 ◆ 控制波特率发生器的特殊功能寄存器: TMOD、TCON、T2CON、PCON、TL1、TH1、TL2、TH2等。 null ⒉ 串行口内部  ⑴ 串行数据缓冲寄存器SBUF 有接收缓冲器SBUF和发送缓冲器SBUF,占用同一个地址(99H) 。 ⑵ 串行口控制寄存器SCON null ⑶ 串行数据输入/输出引脚 接收方式下,串行数据从RXD引脚输入,串行口内部在接收缓冲器之前还有移位寄存器,从而构成了串行接收的双缓冲结构,可以避免在数据接收过程中出现帧重叠错误。 在发送方式下,串行数据通过TXD引脚输出。null ⑷ 串行口控制逻辑 ·接受来自波特率发生器的时钟信号TXCLOCK和RXCLOCK; ·控制内部的输入移位寄存器将外部的串行数据转换为并行数据; ·控制内部的输出移位寄存器将内部的并行数据转换为串行数据输出; ·控制串行中断(RI和TI)。 7.2.2 80C51串行口控制 7.2.2 80C51串行口控制 ⒈ 串行口状态控制寄存器 SCON  控制串行通信的方式选择、接收,指示串行口的中断状态。 null⑴ SM0、SM1:串行口工作方式选择位。其功能见表7–1。 ⑵SM2 :允许方式2、3中的多处理机通信位。 方式0时,SM2=0。 方式1时,若SM2=l,只有接收到有效的停止位,接收中断RI才置1。 方式2和方式3时, ●SM2=1,则只有当接收到的第9位数据RB8为1时,才将接收到的前8位数据送入缓冲器SBUF中,并把RI置1、同时向CPU申请中断;如果接收到的第9位数据RB8为0,RI置0,将接收到的前8位数据丢弃。 ●SM2=0时,则不论接收到的笫9位数据是0或1,都将前8位数据装入SBUF中,并申请中断。 null⑶REN :允许串行接收位。 REN=1时,允许串行接收;REN=0时,禁止串行接收。 ⑷TB8 :方式2和方式3中要发送的第9位数据。 在通信协议中,常规定TB8作为奇偶校验位。在80C51多机通信中,TB8=0用来表示数据帧;TB8=1表示是地址帧。 ⑸RB8 :方式2和方式3中接收到的第9位数据。 方式1中接收到的是停止位。方式0中不使用这一位。 null ⑹TI :发送中断标志位。 方式 0中,在发送第 8位末尾置位;在其它方式时,在发送停止位开始时设置。 由硬件置位,用软件清除。 ⑺RI : 接收中断标志位。 方式 0中,在接收第 8位末尾置位;在其它方式时,在接收停止位中间设置。 由硬件置位,用软件清除。 null ⒉ 电源控制及波特率选择寄存器 PCON   最高位SMOD与串行口控制有关,其它位与低功耗工作方式有关。 SMOD:串行通信波特率系数控制位。 当SMOD=1时,使波特率加倍。 复位后,SMOD=0。 null ⒊ 串行数据寄存器SBUF  包含在物理上是隔离的两个8位寄存器:发送数据寄存器和接收数据寄存器,它们共用一个地址99H。 ★读SBUF(MOV A,SBUF),则访问接收数据寄存器; ★写SBUF(MOV SBUF,A),则访问发送数据寄存器。 7.3 串行口的工作方式 7.3 串行口的工作方式 在串行口控制寄存器SCON中,SM0和SM1位决定串行口的工作方式。80C51串行口共有4种工作方式。 7.3.1 串行口方式0 同步移位寄存器方式 7.3.1 串行口方式0 同步移位寄存器方式 SM0=0、SM1=0。同步移位寄器方式。 ·数据传输波特率固定为(1/12)fosc。 ·由RXD引脚输入或输出数据, ·由TXD引脚输出同步移位时钟。 ·接收/发送的是8位数据,传输时低位在前。帧格式如图7-2所示。 方式0时工作原理图的如图7-3所示。 null ⑴发送 当执行任何一条写SBUF的指令(MOV SBUF,A)时,就启动串行数据的发送。 在执行写入SBUF的指令时,选通内部D触发器置1 ,构成发送移位寄存器的第9位, 并使发送控制器开始发送。当发送脉冲有效之后,移位寄存器的内容由RXD引脚串行移位输出;移位脉冲由TXD引脚输出。 在发送有效的期间,每个机器周期,发送移位寄存器右移一位,在其左边补0。当数据最高位移到移位寄存器的输出位时,原写入第9位的 l正好移到最高位的左边一位,由此向左的所有位均为 0,零 检测 工程第三方检测合同工程防雷检测合同植筋拉拔检测方案传感器技术课后答案检测机构通用要求培训 器通知发送控制器要进行最后一次移位,并撤销发送有效,同时使发送中断标志TI置位,若CPU响应中断,则执行从0023H开始的串行口发送中断服务程序。 null ⑵接收 当REN=1 且RI位清除时,就会启动一次接收过程。 在下一机器周期的S6P2时刻,接收控制器将1111 1110写入接收移位寄存器,并在下一时钟周期S1P1使接收控制器的接收有效,打开“与非门” ,同时由TXD引脚输出移位脉冲。在移位脉冲控制下,接收移位寄存器的内容每一个机器周期左移一位,同时由RXD引脚接收一位输入信号。 每当接收移位寄存器左移一位,原写入的1111 1110也左移一位。当最右边的0移到最左边时,标志着接收控制器要进行最后一次移位。在最后一次移位即将结束时,接收移位寄存器的内容送入接收数据缓冲寄存器SBUF,然后在启动接收的第10个机器周期的S1P1时,清除接收信号,置位SCON中的RI,发出中断申请。完成一帧数据的接收过程。若CPU响应中断,则执行从0023H开始的串行口接收中断服务程序 7.3.2 串行口方式1 8位UART 7.3.2 串行口方式1 8位UART SM0=0、SM1=l。 · 数据传输波特率由T1和T2的溢出决定,可用程序设定。当T2CON寄存器中的RCLK和TCLK置位时,采用T2作为串行口接收和发送的波特率发生器。而当RCLK和TCLK都为零时,采用T1作为串行口接收和发送的波特率发生器。 ·由 TXD引脚发送数据。 ·由 RXD引脚接收数据。 null·发送或接收一帧信息为10位:1位起始位(0)、8位数据位(低位在前)和l位停止位(1)。 帧格式如图7-4所示。 null ⑴发送:方式1时,发送的工作原理图如图7-5所示。   当执行任何一条写 SBUF的指令时,就启动串行数据的发送。在执行写入SBUF的指令时,也将1写入发送移位寄存器的第9位(由SBUF和1个独立的D触发器构成),并通知发送控制器有发送请求。null 开始发送后的一个位周期,发送信号有效,开始将起始位送TXD引脚。一位时间后,数据信号有效。发送移位寄存器将数据由低位到高位顺序输出至TXD引脚。一位时间后,第一个移位脉冲出现将最低数据位从右边移出,同时0从左边挤入。当最高数据位移至发送移位寄存器的出端时,先前装入的第9位的l,正好在最高数据位的左边,而它的左边全部为0。这种状态被零检测器检测到,在第10个位周期(16分频计数器回0时),发送控制器进行最后一次移位,清除发送信号,同时使SCON寄存器中TI置位,完成了一帧数据发送的全过程。 若CPU响应中断,则执行从0023H开始的串行口发送中断服务程序。null ⑵接收 方式1时,接收的工作原理图如图7-6所示。  当REN=1且清除RI后,若在RXD引脚上检测到一个1到0的跳变,立即启动一次接收。同时,复位16分频计数器,使输入位的边沿与时钟对齐,并将1FFH(即9个l)写入接收移位寄存器。接收控制器以波特率的16倍的速率继续对RXD引脚进行检测, 计数器的16个状态把每一位的时间分为16份,对每一位时间的第7、8、9个计数状态,位检测器对RXD端的值采样,这3个状态理论上对应于每一位的中央值。若发送端与接收端的波特率有差异,就会发生偏移,只要这种差异在允许范围内,就不至于发生错位或漏码。在上述3个状态下,取得3个采样值,其中至少有两个值是一致的,即采用3取2的多数表决法,,可抑制噪声。 null 如果在第1个时钟周期中接收到的不是0,说明它不是一帧数据的起始位,则复位接收电路,继续检测RXD引脚上l到0的跳变。如果接收到的是起始位,就将其移入接收移位寄存器,然后接收该帧的其它位。接收到的位从右边移入,原来写入的1,从左边移出,当起始位移到最左边时,接收控制器将控制进行最后一次移位,把接收到的9位数据送入接收数据缓冲器SBUF和RB8,而且置位RI。 在进行最后一次移位时,能将数据送入接收数据缓冲器SBUF和RB8,而且置位RI的条件是: · RI=0 即上一帧数据接收完成时发出的中断请求已被响应,SBUF中数据已被取走。 · SM2=0或接收到的停止位=1。 若以上两个条件中有一个不满足,将不可恢复地丢失接收到的这一帧信息。 7.3.3 串行口方式2和3 9位UART 7.3.3 串行口方式2和3 9位UART SM0=1、SM1=0,选择方式2; SM1=1、SM0=1,选择方式3。 ·由TXD引脚发送数据。 ·由RXD引脚接收数据。 ·发送或接收一帧信息为11位:1位起始位(0)、8位数据位(低位在前) 、1位可编程位和1位停止位(l)。发送时可编程位TB8可设置为1或0,接收时可编程位进入SCON寄存器的RB8位。 ·方式2的波特率是固定的,为振荡器频率的1/32或1/64。.方式3的波特率则由T1和T2的溢出决定,可用程序设定。 null帧格式如如图 7-7所示。 方式 2时的工作原理图如图 7-8所示。null 在进行最后一次移位时,能将数据送入接收数据缓冲器SBUF和RB8,而且置位RI的条件是: ·RI=0; ·SM2=0或接收到的停止位=1。 若以上两个条件中有一个不满足,将不可恢复地丢失接收到的这一帧信息。 7.4 多处理机通信方式 7.4 多处理机通信方式 SM2:多处理机通信位。 当串行口以方式2或方式3接收时,若SM2=1,只有当接收到的第9位数据RB8为1时,才将数据送入接收缓冲器SBUF,并使RI置1,申请中断,否则数据将丢失;若SM2=0,则无论第9位数据RB8是1还是0,都能将数据装入SBUF,并且发中断。 利用这一特性,便可实现主机与多个从机之间的串行通信。图7-9为多机通信连线示意图,系统中左边的80C51为主机,其余的为1~n号从机,并保证每台从机在系统中的编号是惟一的。null 系统初始化时,将所有从机中的SM2位均设置为1,并处于允许串行口中断接收状态。 主机欲与某从机通信,先向所有从机发出所选从机的地址,从机地址符合后,接着才发送命令或数据。 ·在主机发地址时,置第9位数据(RB8)为1,表示主机发送的是地址帧; ·当主机呼叫某从机联络正确后,主机发送命令或数据帧时,将第9位数据(RB8)清0。 null各从机由于SM2置1,将响应主机发来的第9位数据(RB8)为1的地址信息。从机响应中断后,有两种不同的操作: ·若从机的地址与主机点名的地址不相同,则该从机将继续维持SM2为l,从而拒绝接收主机后面发来的命令或数据信息,等待主机的下一次点名。 ·若从机的地址与主机点名的地址相同,该从机将本机的SM2清0,继续接收主机发来的命令或数据,响应中断。 7.5串行口的应用 7.5.1串行口的波特率发生器及波特率计算 7.5串行口的应用 7.5.1串行口的波特率发生器及波特率计算 串行口的波特率发生器如图7-10所示。 ·方式0时的波特率由振荡器的频率(fosc)所确定:波特率为fosc/12。 ·方式2时的波特率由振荡器的频率(fosc)和SMOD位确定: 当SMOD位=1时,波特率=fosc/32;当SMOD=0时,波特率=fosc/64。  ·方式1和3时的波特率由定时器T1和T2的溢出率和SMOD确定。 null (1)用定时器T1(=0)产生波特率 ·定时器T1工作于方式0: T1为13位计数器。 式中:TC——13位计数器初值; X——中断服务程序的机器周期数,在中断服务程序中重新对定时器置数。 null·定时器T1工作于方式1: T1为16位的计数器。 式中:TC——16位计数器初值; X——中断服务程序的机器周期数,在中断服务程序中重新对定时器置数。 ·定时器Tl工作于方式2: T1为8位可重装的方式,用TL1计数,用TH1装初值。 7.5.2 方式0的编程和应用 7.5.2 方式0的编程和应用 例: 使用74LS164的并行输出端接8只发光二极管,利用它的串入并出功能,把发光二极管从左向右依次点亮,并不断循环之。发光二极管扩展连接路如图7-11所示。 null MOV SCON,#00H ;设串行口为方式0, CLR ES ;禁止串行口中断 MOV A,#80H ;先显示最左边发光二极管 LED: MOV SBUF,A ;串行输出 JNB TI,$ ;输出等待 CLR TI ;软件清中断标志 ACALL DELAY ;轮显间隔 RR A ;发光右移 AJMP LED ;循环 DELAY:…… ;延时子程序 RET7.5.3 方式1的编程和应用 7.5.3 方式1的编程和应用 例:试编写双机通信程序。甲、乙双机均为串行口方式1,并以定时器T1的方式2为波特率发生器,波特率为2400。 波特率的计算:这里使用6MHz晶振,以T1的方式2制定波特率。 计算定时器T1的计数初值: 波特率= 2smod × fosc × 1 32 12 28 -TH1 TH1=28-(2SMOD×fosc)÷(波特率×32×12) =256-(20×6×106)÷(2400×32×12) =256-6.5=249.5=FAH null ⑴ 甲机发送: 将以片内RAM的78H及77H的内容为首地址、以76H及75H的内容减1为末地址的数据块内容,通过串行口传至乙机。 例:(78H) =20H ;首地址高位 (77H)=00H (76H)=20H ;末地址高位 (75H)=20H 即要求程序将片外RAM的2000H~20lFH中的内容输出到串行口。对数据块首、末地址的传送以查询方式进行,而数据的传送以中断方式进行。 null ORG 0000H SJMP TRANS ORG 0023H ;串行口中断入口 AJMP SINT ORG 0030H TRANS:MOV TMOD,#20H ;置T1为定时器方式2 MOV TL1,#0FAH ;置T1定时常数(波特率为 ;2400) MOV TH1,#0FAH SETB EA ;允许中断 CLR ES ;关串行口中断 null MOV PCON,#00H ;波特率不倍增 CLR TI ;清发送中断 MOV SCON,#40H ;置串行口方式1 MOV SBUF,78H ;输出首地址 WAIT1:JNB TI,WAITI ;查询等待发送结束 CLR TI MOV SBUF,77H WAIT2:JNB TI,WAIT2 ;查询等待发送结束 CLR TI null MOV SBUF,76H ;输出末地址 WAIT3:JNB TI,WAIT3 CLR TI MOV SBUF,75H WAIT4:JNB TI,WAIT4 CLR TI SETB ES ;允许串行口中断 null MOV DPH,78H ;输出数据块中第1个数据 MOV DPL,77H MOVX A,@DPTR CLR TI MOV SBUF,A SJMP $ ;中断等待 null ORG 0200H ;串行口中断服务程序 SINT:PUSH DPL ;保护现场 PUSH DPH PUSH A INC 77H ;地址加1 MOV A,77H JNZ JP1 INC 78H nullJP1:MOV A,78H CJNE A,76H,END1 ;判数据传送是否结束,未 ;结束则转END1 MOV A,77H CJNE A,75H,END1 CLR ES ;结束,关串行口中断 nullESCOM:POP A ;恢复现场 POP DPH POP DPL RETI  END1:MOV DPH,78H;数据输出未结束,则继续发送 MOV DPL,77H MOVX A,@DPTR CLR TI MOV SBUF,A RETI null ⑵ 乙机接收 乙机通过RXD引脚接收甲机发来的数据,接收波特率与甲机一样。接收的第1、2字节是数据块的首地址,第3、4字节是数据块的末地址减1,第5字节开始是数据,接收到的数据依次存入数据块首地址开始的存储器中。 ORG 0000H SJMP RECEIVE ;乙机接收 ORG 0023H AJMP RSINT ;串行口中断入口 null ORG 0030H RECEIVE:MOV TMOD,#20H ;设T1为定时器方式2 MOV TL1,#0FAH ;置T1定时常数 MOV TH1,#0FAH SETB EA ;允许中断 SETB ES ;允许串行口中断 CLR TI ;清发送中断 MOV SCON,#50H ;置串行口方式1、接收 CLR 20H ;置地址标志(20H=0,为 ;地址;20H=1,为数据) null MOV 70H,#78H SJMP $ ;中断等待 ORG 0200H RSINT:PUSH DPL ;保护现场 PUSH DPH PUSH ACC MOV A,R0 PUSH ACC JB 20H,DATA ;判别接收的是地址还是数据, ;是数据,转移 null MOV R0,70H ;是地址,分别送入78H~75H中去 MOV A,SBUF MOV @R0,A DEC 70H CLR RI MOV A,# 74H CJNE A,70H,RETURN ;是地址,转结束 SETB 20H ;地址已接收完,置接收数据标志 nullRETURN:POP ACC ;恢复现场 MOV R0,A POP ACC POP DPH POP DPL RETI DATA:MOV DPH,78H ;接收数据 MOV DPL,77H null MOV A,SBUF MOVX @DPTR,A ;将数据送入片外RAM CLR RI INC 77H ;地址加 1 MOV A,77H JNZ DATA1 INC 78H nullDATA1∶MOV A,76H CJNZ A,78H,RETURN MOV A,75H CJNE A,77H,RETURN CLR ES ;结束,关串行口中断 AJMP RETURN 例 通过串行口发送带奇偶校验位的数据块 ASCII码由7位组成,其最高位可作为奇偶校验位用。数据块通过串行口发送和接收,采用8位异步通信,波特率为1200,已知fosc=11.0592MHz。 从内部RAM单元20H~3FH中取出ASCII码加上奇偶校验位之后发出。设串行口为方式1,T1为方式2作为串行口的波特率发生器。 ∵SMOD=0 ∴TH1=232=E8H 例 通过串行口发送带奇偶校验位的数据块null ORG 0000H MOV TMOD,#20H ;设T1为方式2 MOV TL1,#0E8H ;T1定时常数 MOV TH1,#0E8H MOV SCON,#01000000B ;设串行口为方式1 MOV R0,#20H ;设发送数据区首址 MOV R7,#32 ;发送32个ASCII码数据nullLOOP:MOV A,@R0 ;取ASCII码数据 ACALLSP-OUT ;调用串行口发送子程序 INC R0 ;未发送完,则继续 DJNZ R7,LOOP … null串行口发送子程序 SP-OUT:MOV C,P ;设奇校验位 CPL C MOV ACC.7,C MOV SBUF,A ;带校验位发送 JNB TI,$ ;发送等待 CLR TI RET 例 通过串行口接收带奇偶校验位的数据块 把接收到的32个字节数据存放到20H~3FH中,波特率为1200,若奇校验出错,将进位标志C置1 。 ORG 0000H MOV TMOD,# 23H ;置T1为定时方式2 ;T0为方式3 MOV TL1,#0E8H ;设T1时间常数 MOV TH1,#0E8H MOV R0,#20H ;接收缓冲区首址 MOV R7,#32 ;接收字节计数器 例 通过串行口接收带奇偶校验位的数据块nullLOOP:ACALL SP-IN ;调用带奇校验的串行口接 ; 收子程序 JC ERROR ;校验错,转出错处理 MOV @R0,A ;存入 INC R0 DJNZ R7,LOOP ;未接收完,则继续 ERROR:… ;校验错,处理nullSP-IN:MOV SCON,#01010000B ;设串行口为方式 ; 1,启动接收 JNB RI,$ CLR RI MOV A,SBUF ;接收一个字节 MOV C,P ;检查奇校验位,若出错,C=1 CPL C ANL A,#7FH ;去掉校验位后的ASCII码数据 RET7.5.4 方式2和3的编程和应用 7.5.4 方式2和3的编程和应用 方式2接收/发送的一帧信息是11位:第0位是起始位(0);第1~8位是数据位;第9位是程控位,可由用户置TB8决定;第10位是停止位。 · 方式2的波特率为: 波特率=振荡器频率/n 其中:当 SMOD=0时,n=64 ; 当 SMOD=l时,n=32。 方式2和方式3基本一样,仅波特率设置不同。例: 试编写串行接口以工作方式2发送数据的中断服务程序 工作方式2发送的一帧信息为11位:1位起始位,8位数据位,1位可编程为1或0的第9位(可用作奇偶校验位或数据/地址标志位)和1位停止位。 奇偶校验位的发送是在将发送数据写入发送缓冲器SBUF之前,先将奇偶标志写入SCON的TB8位。 例: 试编写串行接口以工作方式2发送数据的中断服务程序null ORG 0023H AJMP SPINT  SPINT:CLR EA ;关中断 PUSH PSW ;保护现场 PUSH ACC SETB EA ;开中断 SETB PSW.4 ;切换寄存器工作组 CLR TI ;清除发送中断请求标志 MOV A,@R0 ;取数据,置奇偶标志位 null MOV C,P ;奇偶标志位P送TB8 MOV TB8,C MOV SBUF,A ;数据写入发送缓冲器,启动发送 INC R0 ;数据地址指针加1 CLR 0AFH ;恢复现场 POP ACC POP PSW SETB 0AFH CLR PSW .4 ;切换寄存器工作组 RETI ;中断返回 null例: 方式3和方式1的不同在于接收/发送的信息位数不同,而与方式2的不同仅在于波特率设置不同。 这里以双机通信为例。串行口以方式3进行接收和发送,以T1为波特率发生器,选择定时器方式2。 程序首先发送数据存放地址,而地址的高位存放在78H中,地址的低位存放在77H中;然后发送00H,01H,02H,…,FEH,共255个数据以后结束。 null 甲机的发送程序: ORG 0023H CLR TI RETI TRANSFER:MOV TMOD,#23H ;置T1为定时方式2 ;T0为方式3 MOV TL1,# 0F0H ;置T1定时常数 MOV TH1,# 0F0H SETB EA ;允许中断 CLR ES ;禁止串行口中断 CLR ET1 ;禁止定时器T1中断 null MOV SCON,#0E0H ;置串行口方式 3 SETB TB8 ;表示发送的是地址 MOV SBUF,78H ;发送地址 JNB TI,$ CLR TI MOV SBUF,77H JNB TI,$ CLR TI MOV IE,#90H ;允许串行口中断 CLR SM2 ;以后发送的是数据 null MOV A,#00H ;发送数据 LOOP:MOV SBUF,A JNB TI,$ CLR TI INC A CJNZ A,#0FFH,LOOP ;判是否结束 CLR ES ;禁止串行口中断 CLR EA ;关中断 HERE:AJMP HERE null 乙机接收程序:把接收到的头两个字节作为存放数据的首地址,再接收到的255个字节的数据存放入相应的单元中。 ORG 0023H AJMP SINT ;串行口中断入口 RECEIVE:MOV TL1,# 0F0H ;置定时常数 MOV TH1,#0F0H MOV TMOD,# 20H ;置定时方式 2 SETB ES ;允许串行口中断 CLR ET1 ;禁止定时器T1中断 SETB EA ;开中断 MOV SCON,#0F0H ;置串行口方式 3 接收null MOV R0,#0FEH ;数据个数 RWAIT:AJMP RWAIT ORG 1000H SINT:MOV C,SM2 JNC PD+2 ;输入是否为地址 INC R0 NOP MOV A,R0 JZ PD MOV DPH,SBUF ;输入的是高位地址 AJMP PD+1nullPD: MOV DPL,SBUF ;输入的是低位地址 CLR SM2 ;下一次输入是数据 PD+l:CLR RI RETI PD+2: MOV A,SBUF ;是数据 MOVX @DPTR,A INC DPTR CLR RI CJNZ A,#0FEH,RETURN;判是否结束 CLR ES ;结束,关中断 RETURN:RETI END END 图7 - 1 80C51串行口结构图 图7 - 1 80C51串行口结构图 图7 - 2 串行口工作方式0工作原理图 图7 - 2 串行口工作方式0工作原理图 图7 - 3 串行口方式1发送工作原理图图7 - 3 串行口方式1发送工作原理图图7 - 4 串行口方式1接收工作原理图 图7 - 4 串行口方式1接收工作原理图 图7 - 5 串行口工作方式2工作原理图 图7 - 5 串行口工作方式2工作原理图 图7 -6 80C51多机分布式系统示意图 图7 -6 80C51多机分布式系统示意图 图7-7 串行口的波特率发生器 图7-7 串行口的波特率发生器 图7 -8 发光二极管扩展连接路 图7 -8 发光二极管扩展连接路 表7 - 1 串行口工作方式选择 表7 - 1 串行口工作方式选择
本文档为【第七章 80C51单片微机的串行口原理及应用】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_337026
暂无简介~
格式:ppt
大小:1MB
软件:PowerPoint
页数:0
分类:工学
上传时间:2011-01-01
浏览量:14