单片机原理与应用课件 第3章 MCS-51单片机的内部资源及应用.ppt_第1页
单片机原理与应用课件 第3章 MCS-51单片机的内部资源及应用.ppt_第2页
单片机原理与应用课件 第3章 MCS-51单片机的内部资源及应用.ppt_第3页
单片机原理与应用课件 第3章 MCS-51单片机的内部资源及应用.ppt_第4页
单片机原理与应用课件 第3章 MCS-51单片机的内部资源及应用.ppt_第5页
已阅读5页,还剩135页未读 继续免费阅读

下载本文档

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

文档简介

第3章 mcs-51单片机的内部资源及应用,主要内容: mcs-51单片机内部各器件的具体结构、组成原理、工作方式的设置及典型应用,为读者后续学习单片机应用系统设计、充分利用单片机内部资源解决工程实际问题奠定基础。重点在于各器件工作方式的设置及灵活应用,难点在于中断系统和定时器/计数器的应用。,第3章 mcs-51内部资源及应用,4个并行i/o接口; 中断系统; 串行通信接口; 定时器/计数器;,3.2 mcs-51单片机的中断系统,外部设备是微机的重要组成部分,而微机和外部设备之间不是直接相连的,而是通过不同的接口电路来达到彼此间的信息专送的。,cpu与外部交换信息的方式: (1)程序控制传送方式 (2)中断传送方式 (3)直接存储器存取(dma)方式,3.2.1 中断的基本概念,中断是指计算机在执行某段程序的过程中, 由于计算机系统内、外的某种原因, 暂时中止原程序的执行, 转去执行相应的处理程序, 并中断服务程序执行完后, 再回来继续执行被中断的原程序的过程。,3.2.2 mcs-51单片机中断系统,中断系统是指能实现中断功能的那部分硬件电路和软件程序。 中断系统机构需要完成的工作: 1.自动、及时响应中断(异常事件) 2 . 进行中断优先权的排队 3.实现中断嵌套 4.实现中断返回,mcs-51单片机中断系统结构,ie0,tcon,scon,tf0,ie1,tf1,t0,t1,ti,ri,txd,rxd,es,et0,ex0,ex1,et1,ea,自然优先级,矢量地址,高级中断请求,自然优先级,矢量地址,低级中断请求,px0,pt0,px1,pt1,ps,ie,ip,中断标志位,中断源允许,总允许,中断优先级,中断控制,mcs-51单片机中涉及中断控制的有3个方面4个特殊功能寄存器:, 中断请求:定时和外中断控制寄存器tcon; 串行控制寄存器scon; 中断允许控制寄存器ie; 中断优先级控制寄存器ip。,tcon中的中断标志位,中断请求标志,(msb) 8fh 8eh 8dh 8ch 8bh 8ah 89h 88h(lsb),t0溢出中断标志(tcon.5): t0启动计数后,计满溢出由硬件置位tf0=1,向cpu请求中断,此标志一直保持到cpu响应中断后,才由硬件自动清0。,外部中断int0中断标志位(tcon.1) : ie01,外部中断1向cpu申请中断, cpu响应中断后,才由硬件自动清0。,中断请求标志,tcon中的中断标志位,(msb) 8fh 8eh 8dh 8ch 8bh 8ah 89h 88h(lsb),外部中断int0触发方式控制位(tcon.0): it0=0,电平触发方式 it0=1, 下降沿触发方式,中断请求标志,scon的中断标志位,9fh 9eh 9dh 9ch 9bh 9ah 99h 98h,ti (scon.1)串行发送中断标志。 ri (scon.0)串行接收中断标志。,cpu响应中断后,不能由硬件清除ti和ri位,必须在中断服务程序中由指令清0。,中断允许控制,中断源的允许和屏蔽由中断允许寄存器ie控制。,afh aeh adh ach abh aah a9h a8h,中断允许寄存器ie对中断的开放和屏蔽实行两级控制。,ea0时,则屏蔽所有的中断申请,即任何中断源申请都不接受;当ea1时,cpu开放中断,但五个中断源还要由ie的低5位的各对应控制位的状态进行中断允许控制。,中断允许控制,例:如果我们要设置外中断1、定时器1中断允许,其它不允许,请设置ie的相应值。,(a)用字节操作指令实现 mov ie,8ch 或 mov a8h,8ch,(b)用位操作指令实现 setb ea ;使 ea1,cpu开中断 setb et1 ;使et11,定时/计数器1允许中断 setb ex1 ;使ex11,外中断t1允许中断,中断优先级控制,中断优先级寄存器ip,bfh beh bdh bch bbh bah b9h b8h,相应位为1,对应的中断源被设置为高优先级,相应位为0,对应的中断源被设置为低优先级。 系统复位时,均为低优先级 该寄存器可以位寻址,中断优先级控制,自然优先权顺序:,中断优先级控制,设8051的片外中断为高优先级,片内中断为低优先级,设置ip相应值。,解:(ip)=00000101b=05h,mov ip,#05h;或 mov 0b8h,#05h,setb px0 setb px1 clr ps clr pt0 clr pt1,3、中断响应及中断处理过程,中断处理过程分为三个阶段:中断响应、中断处理和中断返回。 中断响应 中断处理(又称中断服务) 中断返回 中断请求的撤除,中断响应的条件,有中断源发出中断请求。 中断总允许位ea=1,即cpu中断。 申请中断的中断源的中断允许位为1,即中断没有被屏蔽。 无同级或更高级中断正在被服务。 当前的指令周期已经结束。 若现行指令为reti或是访问ie或ip指令时,该指令以及紧接着的另一条指令已执行完。,中断响应的过程,中断响应:在满足cpu的中断响应条件之后,cpu对中断源中断请求予以处理。 中断响应过程: 保护断点地址;,把程序转向中断服务程序的入口地址(通常称矢量地址)。,特别注意:这些工作是硬件自动完成的!,断点地址,中断服务子程序的入口地址,程序存储器rom,0000h:复位后,程序的入口地址(pc=0000h),0023h:串行口中断入口,0003h:外部中断0入口,000bh:定时器0溢出中断入口,0013h:外部中断1入口,001bh:定时器1溢出中断入口,002ah,使用时,通常在这些入口地址处存放一条跳转指令,使程序跳转到用户安排的中断服务程序起始地址上去!,中断服务入口地址,中断服务程序,中断服务程序从中断子程序入口地址开始执行,直到返回指令reti为止,这个过程称为中断处理(或中断服务)。 中断服务子程序一般包括两部分内容,一是保护和恢复现场,二是处理中断源的请求。,中断服务程序,关中断,保护现场,中断服务,开中断,关中断,恢复现场,开中断,中断返回,断点地址由堆栈弹入pc,中断服务程序,中断服务程序,int0: clr ea push acc push 00h setb ea clr ea pop 00h pop acc setb ea reti,4、中断请求的撤除,cpu响应某中断请求后,在中断返回前,应该撤除该中断请求,否则会引起另一次中断。 定时器0或1溢出:cpu在响应中断后,硬件清除了有关的中断请求标志tf0或tf1,即中断请求是自动撤除的。 边沿激活的外部中断:cpu在响应中断后,也是用硬件自动清除有关的中断请求标志ie0或ie1。 串行口中断:cpu响应中断后,没有用硬件清除t1、r1,故这些中断不能自动撤除,而要靠软件来清除相应的标志。,电平触发外部中断撤除方法较复杂。 因为在电平触发方式中,cpu响应中断时能够自动清除ie1或ie0标志,但若不能及时撤除int0、int1引脚上的低电平,会是的ie0、ie1重新置位,这是不允许的。所以在响应中断后应立即撤除int0或int1引脚上的低电平。,电平触发的外部中断源中断标志的撤除,3.2.4 外部中断扩展方法,mcs-51单片机有两个外部中断亲求请求输入端(int0和int1)。实际应用中,若外部中断源有两个以上,则需要扩展外部中断源。,1 利用定时器扩展外部中断源,2 查询方式扩展外部中断源,3使用专用芯片扩展外部中断请求输入口,3.2.4 外部中断扩展方法,8051单片机有两个定时器,具有两个内部中断标志和外部计数输入引脚。 当定时器设置为计数方式时,计数初值设置为满量程ffh。一旦外部信号从计数器引脚输入一个负跳变信号,计数器加1产生溢出中断,从而转去处理该外部中断源的请求。 将外部中断源信号接至t0或t1引脚;该定时器的溢出中断标志及中断服务程序作为扩充外部中断源的标志和中断服务程序。,3.2.4 外部中断扩展方法,3.2.5 mcs-51中断系统编程,1 主程序中对中断系统的初始化,主程序的起始地址: 单片机复位后,(pc)=0000h,0003h002bh分别为各中断源的入口地址,所以编程时应在0000h处写一跳转指令(一般为长跳转指令),主程序则是以跳转的目标地址作为起始地址开始编写,一般从0030h开始。 主程序的初始化内容: 对将要用到的单片机内部部件或扩展芯片进行初始工作状态设定。应对ie,ip进行初始化编程,以开放cpu中断,允许某些中断源中断和设置中断优先级等。,3.2.5 mcs-51中断系统编程,中断服务程序的起始地址:,单片机中断系统对五个中断源分别规定了各自的入口地址,但这些入口仅8个字节,一般在相应的入口处定一条跳转指令。,中断服务程序编写中的注意事项:,(1)视需要确定是否保护现场。 (2)及时清除那些不能被硬件自动清除的中断请求标志。 (3) 压栈与出栈指令必须成对使用。 (4)主程序和中断服务程序之间的参数传递与主程序和子程序的参数传递方式相同。,3.2.5 mcs-51中断系统编程,例:如图所示,将p1口的p1.4p1.7作为输入位, p1.0p1.3作为输出位。要求利用8051将开关所设的数据读入单片机内,并依次通过p1.0p1.3输出,驱动发光二极管,以检查p1.4p1.7输入的电平情况(若输入为低电平则相应的led亮)。 现要求采用中断边沿触发方式,每中断一次,完成一次读/写操作。,3.2.5 mcs-51中断系统编程,org 0000h ajmp main ;上电,转向主程序 org 0003h ;外部中断0入口地址 ajmp intt0 ;转向中断服务程序 org 0030h ;主程序 main:setb ex0 ;允许外部中断0中断 setb it0 ;选择边沿触发方式 setb ea ;cpu开中断 here:sjmp here ;等待中断,3.2.5 mcs-51中断系统编程,org 0100h ;中断服务程序 intt0: mov a,#0ffh mov p1,a ;设p1.4p1.7为输入 mov a,p1 ;取开关数 swap a ;a的高、低四位互换 mov p1,a ;输出驱动led发光 reti ;中断返回 end,3.2.5 mcs-51中断系统编程,例:利用中断显示系统故障,3.2.5 mcs-51中断系统编程,org 0000h sjmp main ;上电,转向主程序 org 0003h ;外部中断0入口地址 sjmp inser ;转向中断服务程序 main: anl p1,#55h ;p1.0,p1.2,p1.4,p1.6为输入 p1.1,p1.3,p1.5,p1.7为输出 setb ex0 ;允许外部中断0中断 setb it0 ;选择边沿触发方式 setb ea ;cpu开中断 here: sjmp here ;等待中断,3.2.5 mcs-51中断系统编程,inser:jnb p1.0,l1;( p1.0)=0,转l1 setb p1.1 l1: jnb p1.2,l2;继续查询 setb p1.3 ; l2: jnb p1.4,l3 setb p1.5 l3: jnb p1.6,l4; setb p1.7 l4: reti end,3.3 mcs-51定时器/计数器,3.3.1 基本概念 (1)计数:计数是指对外部事件的个数进行计量。其实质就是对外部输入脉冲的个数进行计量。实现计数功能的器件称为计数器。 (2)定时:8051单片机中的定时器和计数器是一个部件,只不过计数器记录的是外界发生的事件,而定时器则是由单片机内部提供一个非常稳定的计数源进行定时的。这个计数源是由单片机的晶振经过12分频后获得的一个脉冲源。所以定时器计数脉冲的时间间隔与晶振有关。,3.3.1 基本结构,两个16位的定时器/计数器,即定时器0(t0)和定时器1(t1)。它们实际上都是16位加1计数器。,3.3.1 基本结构,定时器的控制,工作模式寄存器tmod 控制器寄存器tcon,工作模式寄存器tmod,6.2.1 工作模式寄存器 tmod,状态控制寄存器tcon,状态控制寄存器tcon,3.3.2 定时器/计数器工作方式,工作模式寄存器tmod中的m1、m0两位的四种不同取值,导致了thx、tlx的四种不同组合,从而形成定时/计数器的四种不同工作方式。,其中前三种工作方式对两者都是一样的,方式3对两者是不同的。只有定时/计数器0有方式3。,工作方式0及应用,在这种模式下,16位寄存器(th0和tl0)只用了13位。tl0的高3位未用,其余5位为整个13位的低5位,th0占高8位。当tl0的低5位溢出时向th0进位;th0溢出时,向中断标志tf0进位(硬件置位tf0),并申请中断。,工作方式0及应用,定时时间为: t=(213t0初值)振荡周期12,t0初值=213tfosc/12,工作方式0及应用,计数初值:若需计量外部输入n个脉冲,t0初值=213-n,定时器初始化编程,1.向tmod寄存器中写入工作方式控制字; 2.向定时/计数器th0、tl0(或th1、tl1)装入初值; 3.启动定时/计数器(置位tr0/tr1); 4.如采用中断方式,置位et0(et1)、ea等中断控制寄存器;,方式0 的应用举例,例:设定时器t0选择工作模式0,定时时间为1ms,fosc=6mhz。试确定t0初值,计算最大定时时间t。,t0的最大定时时间对应于从初值为0开始对机器周期计数,直到定时器溢出 则:t=2131/610-612=16.384ms,t0初值:,初值=213tfosc/12 =213110-36106/12 =7692 d =1111000001100b,t0的低5位:01100b=0ch即(tl0)=0ch t0的高8位:11110000b=f0h即(th0)=0f0h,方式0 的应用举例,例:设t0工作在模式0,定时时间为1ms,fosc=6mhz。编程实现其定时功能。定时时间到,p1.0取反。,解:(1)计算t0初值x x=213110-36106/12=7692 结果:(th0)=0f0h,(tl0)=0ch。,(2)初始化引导程序 org 0000h ajmp main ; 跳过中断服务程序区 org 000bh ;中断服务程序入口 ajmp intt0,方式0 的应用举例,主程序: org 0100h main: mov sp, #60h ;设堆栈指针 mov tmod, #00h;选择工作模式 mov tl0, #0ch;送初值 mov th0, #0f0h setb tr0 ;启动定时 setb et0 ;t0开中断 setb ea ;cpu开中断 here: ajmp here ;等待时间到,转入中断服务程序,方式0 的应用举例,中断服务程序: org 0120h intt0: mov tl0,#0ch ;重新装如初值 mov th0,#0f0h cpl p1.0 ;p1.0取反 reti end,工作方式1及应用,该模式对应的是一个16位的定时器/计数器。 用于定时工作方式时,定时时间为: t =(216t0初值)振荡周期12,t0初值=216-t fosc/12,用于计数工作方式时,计数最大为: 216=65536(个外部脉冲),t0初值=216-n,工作方式2及应用,tl0用作8位计数器,th0用以保存初值。 tl0计数溢出时,不仅使溢出中断标志位tf0置1,而且还自动把th0中的内容重新装载到tl0中。,方式 2 的应用举例,例:当p3.4引脚上的电平发生负跳变时,从p1.0输出一个500s的同步脉冲。用查询方式编程序实现该功能。fosc=6mhz。,解:选t0为模式2,外部事件计数方式。当p3.4引脚上的电平发生负跳变时,t0计数器加1,溢出标志tf0置1;然后变t0为500s定时工作方式,并使p1.0输出由1变为0,t0定时到产生溢出,使p1.0输出恢复高电平,t0又恢复外部事件计数方式。,方式 2 的应用举例,(2)计算初值:,t0工作在外部事件计数方式,每次外部出现计数脉冲,都会形成计数溢出,因此:,x= 28 1=11111111b=0ffh,t0工作在定时工作方式,fosc=6mhz,定时500s,因此,初值x为:,x=28-610650010-6/12,=06h,方式 2 的应用举例,start: mov tmod, #06h mov tl0, #0ffh ;t0计数器初值 mov th0, #0ffh setb tr0 ;启动t0计数 loop1: jbc tf0,tf01 ;查询t0溢出标志, sjmp loop1,tf01: clr tr0 ;停止计数 mov tmod,#02h ;设置t0为模式2,定时方式 mov tl0,#06h ;送初值,定时500s mov th0,#06h clr p1.0 ;p1.0清0 setb tr0 ;启动定时500s loop2 : jbc tf0,tf02 sjmp loop2 ;等待中断,虚拟主程序 tf02 : setb p1.0 ; p1.0置1 clr tr0 ;停止计数 sjmp start,方式 3 及其应用,tl0和th0被分成两个相互独立的8位计数器。,tl0用原t0的各控制位、引脚和中断源,即c/t,gate,tr0,tf0,t0(p3.4)引脚,int0(p3.2)引脚。,tl0可工作在定时器方式和计数器方式。其功能和操作与模式0、模式1相同(只是8位)。,方式 3 及其应用,th0只可用作简单的内部定时功能。 它占用了定时器t1的控制位tr1和t1的中断标志tf1,其启动和关闭仅受tr1的控制。,方式 3 及其应用,定时器t1无工作模式3状态。在t0用作模式3时,t1仍可设置为模式02。,由于tr1和tf1被定时器t0占用,控制开关k已被接通,此时仅用t1控制位c/t切换其定时或计数工作方式就可使t1运行。当计数器溢出时,只能将输出送入串行口或用于不需要中断的场合,一般作波特率发生器。,gun-testing system. the gun is indicated by p0.0, the hit is indicated by p0.1. store the transit time of the bullet in ms in locations 21h20h. machine frequency = 12 mhz.,p0.0,p0.1,gun,target,0,0,1,1,8051,the transit time=(21h)(20h)*1us,gun bit p0.0 target bit p0.1 org 0000h mov p0, #0ffh ; set p0 for input mov tmod, #01h ; timer 0, mode 1 mov tl0, #00h mov th0,#00h ; preload timer = 0 jnb gun, $ ; wait for gun setb tr0 ; start timing jnb target, $ ; wait for target clr tr0 ; stop timing mov 21h, th0 mov 20h, tl0 sjmp $,example measure the speed of a car timer 0 mode 1. clock = 12 mhz,example measure the speed of a car timer 0 mode 1. clock = 12 mhz,example measure the speed of a car timer 0 mode 1. clock = 12 mhz,time,int0,tcar,time,int0,start,stop,set the timer mode - tmod timer 0 mode 1 gate=on 2. calculate the initial values - t0/t1 3. enable the interrupts - ie 4. start the timer running - tr0/tr1,gate,c/t,m1,m0,gate,c/t,m1,m0,timer 1,timer 0,tmod,1,1,0,0,1. set the timer mode - tmod timer 0 mode 1 gate=on, tmod=09h 2. calculate the initial values - t0/t1 t0 = 0000h 3. enable the interrupts - ie et0 = 0 (disabled) 4. start the timer running - tr0/tr1,ss equ p3.0 org 0000h main: mov tmod, #09h ; timer 0, mode 1 mov tl0, #00h mov th0, #00h ; timer = 0000h jnb ss, $ ; wait for start setb tr0 ; start timer jb ss, $ ; wait for stop clr tr0 ; stop timer ; t0 now contains the value of tcar,3.4 mcs-51单片机的串行通信,所谓通信,是指微型计算机系统内部部件之间、微型计算机与外部设备之间、微型计算机与微型计算机之间的数据传送(信息交换)。,串行通信和并行通信,并行通信,即数据的各位同时传送; 串行通信,即数据一位一位顺序传送。,异步通信和同步通信,1异步通信 数据通常是以字符(或字节)为单位组成字符帧传送的,由发送端一帧一帧地发送,通过传输线为接收设备一帧一帧地接收。,异步通信和同步通信,异步通信和同步通信,2同步通信,同步通信中,在数据开始传送前用同步字符来指示(常约定1个-2个),并由时钟来实现发送端和接收端同步,即检测到规定的同步字符后,下面就连续按顺序传送数据,直到通信告一段落。,同步传送时,字符与字符之间没有间隙,也不用起始位和停止位,仅在数据块开始时用同步字符sync来指示,,异步通信和同步通信,波特率,在串行通信中,数据是按位进行传送的,因此传送速率用每秒传送数据位的数目来表示,称之为波特率(baud rate),单位是bps(bit per second),波特率是串行通信的重要指标,用于表征数据传输的速度。但和字符实际传输速率不同,字符的实际传输速率指每秒钟内所传字符的帧数,和字符帧格式有关。,3.4.2 mcs-51单片机串行口,8051单片机具有一个全双工串行通信接口,即能同时进行串行发送和接收数据。 它可以作uatr( universal asynchronous receiver and transmitter 通用异步接收和发送器)用,也可以作同步移位寄存器用。 使用串行接口可以实现8051单片机系统之间点对点的单机通信和8051与系统机的单机或多机通信。,3.4.2 mcs-51单片机串行口,串行口控制寄存器,sbuf串行口数据缓冲器 共两个:一个发送寄存器sbuf,一个接收sbuf,二者共用一个地址99h。 scon串行口控制寄存器(98h)。 pcon电源控制寄存器(87h),串行口控制寄存器scon,例:设串行口工作在方式1,允许接收,则指令为: mov scon,#01010000b,串行口控制寄存器scon,电源控制寄存器pcon,只有该位有用,为1时,方式1、方式2和方式3的波特率加倍;为0时不变。,87h,3.4.3 串行口工作方式,在串行口控制寄存器scon中,sm0和sm1位决定串行口的工作方式。8051串行口共有四种工作方式。,方式0同步移位寄存器方式,当sm00、sm10时,串行口选择方式0。这种工作方式实质上是一种同步移位寄器方式。 数据传输波特率固定为(1/12)fosc。 由rxd(p3.0)引脚输入或输出数据, 由txd(p3.1)引脚输出同步移位时钟。 接收/发送的每一帧信息有8位数据,低位在前,高位在后,没有起始位和停止位。,方式0同步移位寄存器方式,串行口的sbuf是作为8位同步移位寄存器用,主要用于和外部同步移位寄存器连接以扩展并行i/o接口(将串行口变为1个或多个8位并行i/o口使用)。此方式是半双工的,并非是一种同步通信方式。, 数据发送,串行口扩展并行输出口使用时,要有“串入并出”的移位寄存器配合。, 数据发送, 数据发送, 数据发送, 数据发送, 数据发送,串行口方式0发送时的控制字:,方式0时:sm0,sm100 方式0时sm2必须为0:sm20 ren1时允许接收:ren0 方式0为8位数据,tb8、rb800 发送前,发送中断标志ti0 接收中断标志ri0 故控制字(scon)00000000b00h, 数据接收,接收时,软件置ren=1(同时ri=0),即开始接收。在下一个机器周期的s3p1s5p2,从txd(p3.1)脚上输出低电平的移位时钟,在此机器周期的s5p2对p3.0脚采样。, 数据接收, 数据接收,串行口方式0接收时的控制字:,方式0时:sm0,sm100 方式0时sm2必须为0:sm20 ren1时允许接收:ren1 方式0为8位数据,tb8、rb800 接收前,发送中断标志ti0 接收中断标志ri0 故控制字(scon)00010000b10h,方式110位uart,方式1、方式2、方式3均为全双工异步收发方式,串行数据经txd(p3.1)端发送给外设,而外设发出的串行数据由rxd(p3.0)端接收,发送和接收可同时进行。 当sm00,sm11时,串行口工作在方式1。串行口为10位异步通信方式。方式1多用于两个单片机(双机)之间或单片机与外设电路间的点对点通信。,在接收时,停止位进入scon的rb8。方式1的传送波特率可调。,(1)发送过程,ti0时,任何一条“写sbuf”指令都可以启动一次发送,数据送入发送缓冲器sbuf,硬件自动加入起始位和停止位,构成完整的一帧数据。在移位脉冲的控制下,由txd端串行输出。当一帧字符发送完后,使txd输出线维持在1状态,并使ti置1以通知cpu再发送下一个字符。,(2)接收过程,接收操作在ren1和ri0条件下进行。 方式1是靠检测rxd来判断的,cpu不断采样rxd端,采样速率为波特率的16倍,当采样到1到0的负跳变时,启动一次接收。,(2)接收过程,在移位脉冲控制下,把接收的数据移入输入移位寄存器中,直到接收到数据第9位(即停止位)时,接收电路必须同时满足以下两个条件:ri0,且sm20或接收到的停止位为1,才能把输入移位寄存器的8位数据存入“sbuf(接收)”,把停止位送入rb8中,并使ri置1发出串行口中断请求(需开放中断),通知cpu执行“读sbuf”指令,从sbuf中取出接收到的一个数据。 条件不满足,则这次收到的数据就被舍去,不送入“sbuf(接收)”中,这就意味着丢失了一组接收数据。,方式2、311位uart,每帧11位,包括1位起始位,8位数据位,1位可编程的第9数据位和1位停止位。,串行口工作方式2和方式3均为每帧11位异步通信格式,由txd和rxd发送与接收(两种方式操作是完全一样的,所不同的只是波特率)。,发送时第9数据位来自scon寄存器的tb8位,可以作为数据的奇偶校验位,也可以作为多机通信中的地址、数据标志位;接收时,第9数据位进入scon的rb8。,(1)发送过程,发送前,先根据通信协议由软件设置tb8,然后将要发送的数据写入sbuf,即可启动发送过程。串行口能自动把tb8取出,并装入到第9位数据位的位置,再逐一发送出去。发送完毕,使ti=1。,(2)接收过程,使scon中的ren=1,开始接收。当检测到rxd端有10的跳变(起始位)时,开始接收9位数据,送入移位寄存器(9位)。当满足ri=0且sm2=0,或接收到的第9位数据为1时,前8位数据送入sbuf,附加的第9位数据送入scon中的rb8,置ri为1;否则,这次接收无效,也不置位ri。,多机通信,8051单片机工作在串行方式2、3时,具有多机通信功能,可以实现一台主机与多台从机的信息交流。通信只在主从机之间进行,而从机与从机之间不可以直接通信。,主从多机通信的过程如下,)使所有的从机工作在方式2或方式3,且sm2位置1,ren=1,以便接收主机发来的地址。 )主机发出要寻址的从机的一帧地址信息,其中包括8位需要与之通信的从机地址,第9位tb8=1。 )所有从机接收到地址帧后,置ri=1。 )各从机相应中断,进入中断服务程序,进行地址比较。对于地址相同的从机,使sm20,准备接收主机随后发来的数据信息;对于地址不符合的从机,仍保持sm2=1的状态,对主机随后发来的数据不予理睬,直至发送新的地址帧。 )主机给已被寻址的从机发送控制指令和数据(数据帧的第9位为0)实现主从通信。,3.4.4 串行口的通信波特率,方式0的波特率:,方式0时,发送或接收一位数据的移位时钟脉冲由s6p2给出,每个机器周期产生一个移位时钟,发送或接收一位数据。因此,波特率固定为振荡频率的1/12,并不受pcon寄存器中smod位的影响。,方式1、方式3的波特率,方式1的波特率由定时器t1的溢出率和smod值决定。,方式1、方式3的波特率,定时器t1溢出率指在1秒钟内溢出的次数,即t1定时时间t的倒数。,定时器t1作为波特率发生器最典型的用法是使用t1工作在定时方式2状态,则其波特率为:,方式1、方式3的波特率,例:设pcon00h,fosc=6mhz,要波特率为1200bps,试计算t1定时初值。,解:由pcon00h可知smod0,若采用fosc=11.0592mhz,方式2的波特率,串行口方式2控制接收与发送的移位时钟由振荡频率fosc的第二节拍p2时钟(即fosc/2)给出,还取决于pcon中smod位的值。,四种工作方式的区别主要表现在帧格式及波特率两个方面。,3.4.5 串行口应用,串行口的初始化编程: (1)按选定串行口的工作方式设定scon的sm0、sm1两位二进制编码。 (2)对于工作方式2或3,应根据需要在tb8中写入待发送的第9位数据(地址为1,数据为0)。 (3)若选定的工作方式不是方式0,还需设定接收/发送的波特率。设定smod状态,以控制波特率是否加倍。 (4)若选定工作方式1或3,则应对定时器 t1进行初始化以设定其溢出率。,(5)串行通信编程有两种方式:查询方式和中断方式,这两种方式中发送和接收数据后都用注意清ti和ri。,3.4.5 串行口应用,查询方式发送流程图:,查询方式接收流程图:,中断发送主程序:,中断服务程序:,中断接收主程序:,中断服务程序:,1、用串行口扩展并行输出口,串行口在方式0下有两种不同用途:一种是把串行口设置成并入串出的输出口,另一种是把串行口设置成串入并出的输入口。 串行口设置成并入串出的输出口时,需要外接一片8位串行输入并行输出的同步移位寄存器74ls164或cd4094;设置成串入并出的输入口时需要外接一片8位并行输入串行输出的同步移位寄存器74ls165或cd4014等。,方式0的数据传送可以采用中断方式,也可以采用查询方式。无论哪种方式,都要借助于ti或ri标志。,例:用8051串行口外接cd4094移位寄存器扩展8位并行口,8位并行口的每位都接一个发光二极管,要求发光二极管从左到右以一定延迟轮流显示,并不断循环。,可以采用查询方式或中断方式实现,org 0000h ajmp main org 0100h start: mov scon,#00h;串行口初始化为方式0 mov a,#80h ;最左位先亮的起始显示码送a clr p1.0 ;关闭并行输出 clr es out0:mov sbuf,a ;开始串行输出 out1:jnb ti,out1 ;输出完否 clr ti ;完了,清ti标志,以备下次发送 setb p1.0 ;打开并行口输出 acall delay ;延时一段时间 rr a ;循环右移 clr p1.0 ;关闭并行输出 sjmp out0 ;循环 delay: end,若要显示的n个数字存放在r0开始的n个存储单元,字符数n存放在r7,段码表地址位table,disp: mov scon,#00h clr es mov dptr,#table mov a,r0 add a,r7 dec a mov r0,a loop:mov a,r0 movc a,a+dptr mov subf,a jnb ti,$ dec r0 clr ti djnz r7,loop ret,3、点对点双机通信,点对点串行通信为双工通信,要求双方收、发能同时进行,用串行口工作方式1、方式2、方式3均可以实现。,实际上,收、发操作主要是在串行接口进行,cpu只是把数据从接收缓冲器读出和把数据写入发送缓冲器。数据传送用中断方式进行,响应中断以后,通过检测是ri置位还是ti置位来决定cpu是进行发送操作还是接收操作。,3、点对点双机通信,这种约定就叫做通信规程或协议,它必须在编程之前确定,只有双方遵守这些规定才能顺利地进行通信。,双机串行通信要想保证通信成功,双方必须有一系列的约定,比如: 发送方发送信息的内容,发送的波特率,发送数据帧格式、数据校验方式,对方是否收到,收到的内容有没有错,要不要重发,怎样通知对方结束等等。,3、点对点双机通信,利用方式1实现双机通信硬件连接图如下图所示。,设1号机是发送方,2号机是接收方。采用串行口方式1进行通信,波特率为2400bps,t1工作在定时器方式2,单片机时钟振荡频率选用11.0 592mhz,则定时器t1的初值th1=tl1=0f4h,pcon寄存器的smod位为0。,3、点对点双机通信,当1号机发送时,先发送一个“e1”联络信号,2号机收到后回答一个“e2”应答信号,表示同意接收。当1号机收到应答信号“e2”后,开始发送数据,每发送一个字节数据都要计算“校验和”,假定数据块长度为16个字节,起始地址为40h,一个数据块发送完毕后立即发送“校验和”。2号机接收数据并转存到数据缓冲区,起始地址也为40h,每接收到一个字节数据便计算一次“校验和”,当收到一个数据块后,再接收1号机发来的“校验和”,并将它与2号机求出的校验和进行比较。若两者相等,说明接收正确,2号机回答00h;若两者不相等,说明接收不正确,2号机回答0ffh,请求重发。1号机接到00h后结束发送。若收到的答复非零,则重新发送数据一次。,发送程序如下: org 1000h astart: clr ea mov tmod, #20h ; 定时器1置为方式2 mov th1, #0f4h ; 装载定时器初值,波特率2400 mov tl1, #0f4h mov pcon, #00h setb tr1 ; 启动定时器 mov scon, #50h ; 设定串口方式1, aloop1: mov sbuf, #0e1h ; 发联络信号 jnb ti, $ ; 等待一帧发送完毕 clr ti ; 允许再发送 jnb ri, $ ; 等待2号机的应答信号 clr ri ; 允许再接收 mov a, sbuf ; 2号机应答后,读至a xrl a, #0e2h ; 判断2号机是否准备完毕 jnz aloop1 ; 2号机未准备好,继续联络,aloop2: mov r0, #40h ; 设定数据地址指针初值 mov r7, #10h ; 设定数据块长度初值 mov r6, #00h ; 清校验和单元 aloop3: mov sbuf, r0 ; 发送一个数据字节 mov a, r6 add a, r0 ; 求校验和 mov r6, a ; 保存校验和 inc r0 jnb ti, $ clr ti djnz r7, aloop3; 整个数据块是否发送完毕 mov sbuf, r6 ; 发送校验和 jnb ti, $ clr ti jnb ri, $ ; 等待2号机的应答信号 clr ri mov a, sbuf ; 2号机应答,读至a jnz aloop2 ; 2号机应答“错误”,转重新发送 ret ; 2号机应答“正确”,返回,org 1000h bstart: clr ea mov tmod, #20h mov th1, #0f4h mo v tl1, #0f4h mov pcon, #00h setb tr1 mov scon, #50h ; 设定串口方式1,且准备接收 bloop1: jnb ri, $ ; 等待1号机的联络信号 clr ri mov a, sbuf ; 收到1号机信号 xrl a, #0e1h ; 判断是否为1号机联络信号 jnz bloop1 ; 不是1号机联络信号,再等待 mov sbuf, #0e2h ;是1号机联络信号,发应答信号 jnb ti, $ clr ti mov r0, #40h ; 设定数据块地址指针初值 mov r7, #10h ; 设定数据块长度初值 mov r6, #00h ; 清校验和单元,接收程序,bloop2: jnb ri, $ clr ri mov a, sbuf mov r0, a ; 接收数据转储 inc r0 add a, r6 ; 求校验和 mov r6, a djnz r7, bloop2 ; 判断数据块是否接收完毕 jnb ri, $ ; 完毕,接收1号机发来的校验和 clr ri mov a, sbuf xrl a, r6 ; 比较校验和 jz end1 ; 校验和相等,跳至发正确标志 mov sbuf, #0ffh ; 校验和不相等,发错误标志 jnb ti, $ ; 转重新接收 clr ti ajmp bloop1 end1: mov sbuf, #00h ret,3、点对点双机通信,乙机:接收甲机发送的数据,并写入以4000h为首址的片外数据存储器中。每接收一帧数据,乙机对所接收的数据进行偶校验,并发出相应的应答信号,直至接收完所有数据。,例:设甲机发送,乙机接收。串行接口工作于方式3(每帧数据为11位,第9位用于奇偶校验),两机均选用 6.0mhz的振荡频率,波特率为 2400 b/s。通信的功能为:,甲机:将片外数据存储器4000h407fh单元的内容向乙机发送,每发送一帧信息,乙机对接收的信息作偶校验,将p位值放在tb8中。若校验正确,则乙机向甲机回发“数据发送正确”的信号(以00h作应答信号)。甲机收到乙机“正确”的应答信号后再发送下一个字节。若奇偶校验有错,则乙机发出“数据发送不正确”的信号(以ffh为应答信号)。甲机接收到“不正确”应答信号后,重新发送原数据,直至发送正确。该数据块发送完毕后停止发送。,分析,定时器t1计数初值x:,取smod=0时,x=249.49。因取整数误差过大,故设smod=1,则x=242.98243=f3h。,定时器t1工作于方式2,故tmod=20h,串行口工作于方式3,允许接收,非多机通信,故scon=11010000b=0d0h,org 0000h ljmp main ;上电,转向主程序 org 0023h ;串行口的中断入口地址 ljmp serve1 ;转向甲机中断服务程序 org 2000h ;主程序 main: mov tmod ,#20h ;设t1工作与模式2 mov th1 ,#0f3h ;赋计数初值 mov tl1 ,#0f3h ;赋计数值 setb tr1 ;启动定时器t1 mov pcon ,#80h ;设smod=1 mov scon ,#0d0h ;置串行口方式3,允许接收 mov dptr ,#4000h ;置数据块首址 mov r0 ,#80h ;置发送字节数初值 setb es ;允许串行口中断 setb ea ;cpu开中断 movx a ,dptr ;取第一个数据发送 mov c ,p mov tb8 ,c ;奇偶标志送tb8 mov sbuf ,a ;发送数

温馨提示

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

评论

0/150

提交评论