第4章MCS-51功能模块的编程与仿真.ppt_第1页
第4章MCS-51功能模块的编程与仿真.ppt_第2页
第4章MCS-51功能模块的编程与仿真.ppt_第3页
第4章MCS-51功能模块的编程与仿真.ppt_第4页
第4章MCS-51功能模块的编程与仿真.ppt_第5页
已阅读5页,还剩97页未读 继续免费阅读

下载本文档

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

文档简介

1、第4章 MCS-51功能模块的编程与仿真,4.1 单片机的并行输入/输出口,4.2 中断的系统,4.3 MCS-51的定时/计数器,4.4 串行接口,4.1 单片机的并行输入输出端口,8051单片机有4个8位并行I/O端口,每条I/O口线都能独立地用作输入或输出。 在无片外扩展存储器的系统中,这四个I/O口都可以作为通用I/O口使用。 在有片外扩展存储器的系统中,P2口送出高8位地址,P0口分时送出低8位地址和8位数据。,图4.1 P0 的位结构图,1. 并行I/O的结构和原理 (1)P0口,P0口用作通用I/O口。 P0口用作输出口,此时必须外接上拉电阻。 P0口用作输入口,分读引脚和读锁存

2、器两种情况。 读引脚:CPU在执行“MOV”类输入指令时(如:MOV A , P0),内部产生的操作信号是“读引脚”。P0.X引脚上的数据经过缓冲器2读入到内部总线。注意在读引脚时,必须先向电路中的锁存器写入1。 读锁存器:CPU在执行“读-改-写”类输入指令时(如:ANL P0, A ),内部产生的操作信号是“读锁存器”,锁存器中的数据经过缓冲器1送到内部总线,然后与A的内容进行逻辑“与”,结果送回P0的端口锁存器并出现在引脚。除了MOV类指令外,其他的读端口操作指令都属于这种情况。 在扩展系统中,P0口作地址/数据总线。,(2) P1口 P1口仅作通用I/O口使用。由于在内部输出端已接有上

3、拉电阻,所以不需再外接上拉电阻。,图4.2 P1 的位结构图,(3) P2口 当控制信号等于零时,MUX拨向下方,P2口作为通用I/O口使用 当控制信号等于1 时,MUX拨向上方,P2口作为高8位地址线使用。,图4.3 P2 的位结构图,4、P3口 锁存器Q端接与非门的一个输入端,第二功能输出线接与非门的另一个输入端。,图4.4 P3 的位结构图,表4.1 P3口的第二功能表,2、MC5-51并行I/O的应用举例,1、七段数码管的结构与原理 在单片机应用系统中通常使用的是8段式LED数码管显示器,它有共阴极和共阳极两种,如图所示。,数码管不同的发光段亮,可组成不同字型,这种组合称为字型码或断码

4、。在COM送入低电平或高电平,然后控制个各段引脚电平,即可形成相应段码。 共阳顺序段码:C0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H 共阴顺序段码:3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH(Dpa),例4.1:要求通过开关输入4位二进制数,送到数码管显示出来如图(见书)。 汇编源程序 ORG 0000H LJMP STA ORG 0100h STA: MOV P1, #0FFH ;关数码管 LOP: MOV P0, #0FFH ;读引脚前端口置1 MOV A, P0 ;读开关状态 CPL A ;转成数据信息 ANL A,

5、#0FH ;保留低4位信息 MOV DPTR, #TAB MOVC A, A+DPTR ;查表取得断码信息 MOV P1, A ;断码送数码管显示 AJMP LOP END, C程序 #include reg51.h /包含8051单片机寄存器定义头文件 #define LED P1 #define KEY P0 char code disp =0 xC0,0 xF9,0 xA4,0 xB0, 0 x99,0 x92,0 x82,0 xF8, 0 x80,0 x90,0 x88,0 x83, 0 x0C6,0 xA1,0 x86,0 x8E; /定义断码表 main() int i; LED=

6、0 xFF; /关数码管 while(1) KEY=0XFF; /读引脚前端口置1 i=KEY; i=i; /转成数据信息 i=i /查表取得断码信息,断码送数码管显? , 仿真实验 在Proteus ISIS 中画出设计电路,并进行电气检测。 根据电路设计图,在Keil C中编写源程序。 编译程序,并产生HEX文件。 将HEX文件加入AT89c51,并仿真电路,通过拨动开关观察发光二极管的显示状况,如图所示。,图4.7 例4.1的仿真图,例4.2:要求对某引脚送入的脉冲进行计数,把脉冲的个数送到八个发光二极管以二进制数的形式显示出来,并进行仿真实验。,汇编语言源程序: ORG 0000h A

7、JMP STAR ORG 0100H STAR: MOV A, #0ffh MOV P1, A CLR A ;计数器清0 L081D: JB P3.0, L081D ;P3.0为低吗? MOV R2, #10H LCALL DELY JNB P3.0, $ ;延时后再判断P3.0为低吗? INC A ;累加器加1 PUSH ACC CPL A ;转成驱动二极管的电平 MOV P1, A ;A送P1口 POP ACC AJMP L081D DELY: ;延时子程序 RET END, 仿真实验: 在Proteus ISIS 中画出设计电路,并进行电气检测。 根据电路设计图,在Keil C中编写源程

8、序。 编译程序,并产生HEX文件。 将HEX文件加入AT89c51,并仿真电路,通过拨动开关观察发光二极管的显示状况,如图所示。,图4.8-9 例4.2的仿真图,4.2 中断系统,4.2.1 中断的概述 1.中断的基本概念 2.中断优先权与嵌套,图4.10 中断过程流程图,图4.11 中断嵌套过程图,4.2.2 MCS-51的中断系统 8051共有5个中断源。分为高级和低级两个中断优先级,可实现2级中断服务嵌套。,1. MCS-51的中断源 8051允许5个中断源: 外部中断源 由外部原因引起的,可以通过两个固定引脚 INT0 ( P3.2 )和INT1( P3.3 )来引入。这两个中断源的请

9、求方式有两种:低电平触发或下降沿触发。 内部中断源 T0:定时/计数器0中断,由T0回零溢出引起。 T1:定时/计数器1中断,由T1回零溢出引起。 TI/RI:串行I/O中断,完成一帧字符发送/接收引起。 2、中断控制 , 定时控制寄存器TCON,TF0/TF1:定时器溢出中断申请标志位(由硬件自动置位)。 =0:定时器未溢出; =1:定时器溢出(由全“1”变成全“0”)时由硬件自动置位,申请中断,中断被CPU响应后由硬件自动清零。 TR0/TR1:定时器运行启停控制位 =0:定时器停止运行; =1:定时器启动运行。,IE0/IE1:外部中断申请标志位(由硬件自动置位 ,中 断响应后转向中断服

10、务程序时,由硬件自动清0 )。 =0:没有外部中断申请; =1:有外部中断申请。 IT0/IT1:外部中断请求的触发方式控制位(可由用户通过软件设置 )。 =0: 在INT0/INT1端申请中断的信号低电平有效; =1: 在INT0/INT1端申请中断的信号负跳变有效。,TI/RI:串行口发送/接收中断申请标志位 =0:没有串行口发送/接收中断申请; =1:有串行口发送/接收中断申请。 这两位不会由硬件自动置位,所以用户必须在中断服务子程序中用软件清0。 例如: CLR TI RE TI,串行口控制寄存器SCON,中断允许寄存器IE,ES: 串行口中断允许位。 ET1 :定时器/计数器T1的溢

11、出中断允许位。 EX1 :外部中断1中断允许位。 ET0 :定时器/计数器T0的溢出中断允许位。 EX0 :外部中断0中断允许位。 EA: 总的中断允许控制位(总开关): =0 :禁止全部中断; =1 :允许中断。,中断优先级寄存器IP,PX0/PX1:外部中断0 /外部中断1 优先级控制位: =0 :属低优先级; =1 :属高优先级。PT0/PT1:T0/T1中断优先级控制位: =0 :属低优先级; =1 :属高优先级。PS1:串行口中断优先级控制位: =0 :属低优先级; =1 :属高优先级。,当同级的几个中断源同时发中断请求时, MCS-51单片机的中断系统对各中断源的中断优先级有一个统

12、一的规定,称为自然优先级。自然优先级的排列如下:,3. 中断响应及处理过程, 中断响应的条件 相应的中断是开放的; 没有同级的中断或更高级别的中断正在处理; 正在执行的指令必须执行完最后 1个机器周期; 若当前正在执行的是中断返回指令(RETI),或对IE或IP寄存器操作的指令,则必须执行完当前指令的下一条指令才能响应中断。 中断响应的过程 中断过程包括中断请求、中断响应、中断服务、中断返回四个阶段。 中断优先级状态触发器置1。 由硬件自动生成一条长调用指令,将断点的地址压入堆栈区进行保护, CPU将执行中断服务子程序,包含保护现场、执行中断主体、恢复现场。 中断返回:中断子程序最后为中断返回

13、RETI指令,该指令使断点出栈,然后开放中断允许,中断过程结束,CPU返回原程序。, 中断服务程序入口地址(中断矢量) 中断入口地址就是中断服务子程序的起始地址,即第一条指令的第一个字节在程序存储器中的位置。单片机的中断入口地址由单片机硬件电路决定,各中断服务子程序的入口地址为: 中断源 入口地址 INT0 0003 T0 000BH INT1 0013H T1 001BH RI/TI 0023H, 外部中断触发方式的选择,边沿触发 当ITx=1时,外部中断为边沿触发方式。CPU在每个机器周期的S5P2期间采样INT1 (P3.3)引脚。若在连续两个机器周期采样到先高电平后低电平,则认为有中断

14、申请,硬件自动使IE0置1,此标志一直保持到CPU响应中断时,才由硬件自动清0。在边沿触发方式下,为保证CPU在两个机器周期内检测到先高后低的负跳变,输入高低电平的持续时间至少要保持12个时钟周期。,电平触发 当ITx=0时,外部中断为电平触发方式。若CPU检测外部中断请求输入引脚为低电平,硬件自动置位相应的中断标志位IEx;若为高电平,则认为无中断申请,硬件自动清除中断标志位。所以,外部中断请求输入信号,必须保持到CPU响应该请求为止。当CPU响应请求后通过硬件清零IEx,但请求信号并没有被清除,在该中断服务子程序返回之前,这个中断请求信号必须撤掉,否则,将引起再次响应。为此,用以下电路清除

15、外部中断请求信号,并在中断服务程序中执行以下指令:,ORL P1,#01H ANL P1,#0FEH,4.2.3 MCS-51中断的应用举,【例4.3】:见书P85。,图4-12 用二极管显示中断请求信号, 汇编语言源程序: ORG 0000H AJMP MAIN ;转向主程序 ORG 0013H ;外部中断1入口地址 AJMP PINT ORG 0050H MAIN: SETB IT1 ;置边沿触发方式 SETB EX1 SETB EA ;开发外部中断1 LOOP: MOV A, P1 ANL A, #0FH CJNE A,#0FH , LOOP ;有外部 中断请求,去LOOP ORL P1

16、,#0FFH ;无中断请求,外部灯全灭 LJMP LOOP SJMP $,;中断子程序 JB P1,0 , L2 CLR P1.4 L2: JB P1.1, L3 CLR P1.5 L3: JB P1.2 L4 CLR P1.6 L4: JB P1.3 L5 CLR P1.7 L5: RETI END, C语言程序 #includereg51.h sbitP11=P11; sbitP12=P12; sbitP13=P13; sbitP14=P14; sbitP15=P15; sbitP16=P16; sbitP17=P17; void extern0_IR(void) interrupt 1

17、p14=p10; p15=p11; p16=p12; p17=p13; ,void main(void) unsigned char c; IT1=1; EX0=1; EA=1; while(1) c=P1; c ,例4.4 平时LED发光二极管处于全亮状态;INT0外中断控制二极管循环左移8次;INT1外中断控制二极管循环右移8次;并进行仿真实验,汇编语言源程序: ORG 0000H LJMP START ORG 0003H LJMP PINT0 ORG 0013H LJMP PINT1 ORG 0030H START: MOV SP, #30H SETB IT0 ;外部中断1为边沿触发方式

18、 SETB IT1 ; 外部中断1为边沿触发方式 SETB EX0 SETB EX1 SETB EA ;开放外部中断0和1 MOV IP , #04H ;外部中断1为高优先级 LOOP: MOV P1 , #00H ;灯全亮 SJMP LOOP ; 等中断,;INT0中断服务子程序 PINT0: PUSH PSW CLR RS1 SETB RS0 MOV R1 , #8 MOV A , #0FEH ;置灯的初态 LP0: MOV P1 , A LCALL DELAY RL A ;循环左移 DJNZ R1 , LP0 POP PSW RETI,;INT1中断服务子程序 PINT1: PUSH P

19、SW SETB RS1 CLR RS0 MOV R1 , #8 MOV A , #07FH ;置灯的初态 LP1: MOV P1 , A LCALL DELAY RR A ;循环右移 DJNZ R1 , LP1 POP PSW RETI ;延时子程序 略, C程序 #include“reg51.h /定 8051接触器的头文件 void pint1(void ); void pint1(void ); void delay(void); void main(void ) IT0=1; IT1=1; /外部中断0、1为边沿触发方式 EX0=1; EX1=1; EA=1; /开放外部中断0和1 I

20、P =0 x04; /外部中断1为高优先级 while(1); P1=0 x00; delay() /灯全亮 ,/INT0中断服务子程序 void pint0(void ) interrupt 0 int,i; P1=0 xfe ; /置灯的初态 for(i=0,i1; /循环右移 delay (void); /延时子程序 略, 仿真实验,图4.16 例题4.4 仿真图,4.3 定时/计数器的结构和原理,8051内部提供两个十六位的定时器/计数器T0和T1,1计数功能: 所谓计数功能是指对外部脉冲进行计数。外部脉冲从单片机的T0(P3.4)和T1(P3.5)两个引脚输入,最高计数脉冲频率为晶振

21、频率的1/24。 2定时功能: 以定时方式工作时,计数输入信号是内部时钟脉冲,每个机器周期使计数器加1,所以,计数频率是振荡频率的1/12,,4.3.2定时/计数器的工作方式选择及控制,1.方式控制寄存器TMOD,工作方式选择位M1、M0,门控位:GATE。 GATE=0:软件启动定时器,使TRx置1即可启动定时器。 GATE=1:软件和硬件共同启动定时器,除了要使TRx置1外,外部中断请求信号输入端INTx还必须输入高电平才能启动定时器。 功能选择位:C/T。 C/T=0时,以定时器方式工作。 C/T=1时,以计数器方式工作。,2.定时器控制寄存器TCON,定时器启动控制位:TR0、TR1

22、TRx=0,停止定时器/计数器1工作。 TRx=1,启动定时器/计数器1工作。 该位由软件置位和复位 定时器溢出中断标志位:TF0、 TF1 当定时/计数器溢出时,由硬件自动置1。使用查询方式时,此位做状态位供CPU查询,查询有效后需由软件清零;使用中断方式时,此位做中断申请标志位,进入中断服务后被硬件自动清零,4.3.3 定时器/计数器的工作方式,方式0(以定时器/计数器T0为例) 定时寄存器由TH0的8位和TL0的低5位(高3位不用)组成一个13位计数器。 当GATE=0时,只要TR0为1,13位计数器就开始进行加1计数;当GATE=1以及TR0=1时,是否计数还取决于INT0引脚信号,当

23、INT0引脚为高电平时开始计数,当INT0为低电平时停止计数。 当定时器溢出时,初值寄存器TH0、TL0会自动清零,要对它们重新装初值,否则,下次它们将从0开始进行加法计数。 方式0为定时工作方式时,定时时间计算公式为: t=(213 计数初值X)晶振周期12,图4.18 计数器0的方式0结构图,方式1 方式是16位的定时器/计数器,其余与方式0相同。 方式1的定时时间计算公式为: (216计数初值)晶振周期12,图4.19 计数器0的方式1结构图,3、方式2 它是一个能自动重装初值的8位定时器/计数器, 方式2是由TL0组成8位计数器,TH0作为常数缓冲器。 当TL0产生溢出时,一方面使溢出

24、标志位TF0置;同时硬件电路又把TH0中的数据重新装入T0L中,重装初值后,TH0的内容保持不变。 其定时时间为:t=(28-T0初值)晶振周期12,图4.20 计数器0的方式2结构图,4.方 式3 只有T0能够工作于这种方式,此时,TL0和TH0成为两个相互独立的8位计数器,TL0占用了全部T0的控制位和信号引脚,即GATE、CT、TR0、TF0等。而TH0只用作定时器使用。而且由于定时器/计数器0的控制位已被TL0独占,因此TH0只好借用定时器/计数器1的控制位TR1和TF1进行工作。,图4.21 计数器0的方式3结构图,4.3.4 定时/计数器的初始化 定时/计数器作为一种可编程部件,在

25、使用前,对其进行初始化,以确定其工作方式和功能。 定时/计数器的初始化步骤 确定定时/计数器的工作方式,并写入TMOD。 计算计数初值,并写入THx、TLx。 如果使用中断方式,则开放定时/计数器的中断,根据需要给IE中的相关位赋值。 启动定时/计数器,给TRx置1。,4.3.5 定时/计数器的应用举例,例4.5: 设单片机晶振频率为12MHz,试用T0在P1.0端线输出周期为1ms的方波脉冲如图所示,如用方式0分别以查询方式和中断方式实现。并在仿真实验中用示波器观察输出波形。,图4.22 例4.5波形图, 计数初值计算。 由题意可得,只要从P1.0口每隔500s交替输出高低电平即可得到周期为

26、1ms的方波,所以T0的定时时间为500s。得:, 记数初值 X21350076921111000001100B 即 TH0F0H,TL00CH 依题意得(TMOD)00H,(2)查询方式 汇编语言源程序: ORG 0000H AJMP MAIN ;转向主程序。 ORG 0040H MAIN: MOV SP, #30H ;堆栈设置。 MOV TMOD, #00H ;TMOD初始化。 MOV TH0, #0F0H MOV TL0, #0CH ;设置计数初值。 MOV IE, #00H ;禁止中断。 SETB TR0 ;启动T0。 LOP: JBC TF0, LOOP1 ;查询等待 AJMP LO

27、P ;继续查询。 LOOP1: MOV TH0,#0F0H ;重新设置计数初值。 MOV TL0,#0CH CPL P1.0 ;输出状态翻转。 AJMP LOP ;返回LOOP END,C语言程序 #includereg51.h /定义8051寄存器的头文件 sbit P10=P10; void time0(void ) p10=p10; /输出状态翻转 TH0=0 xF0; /重新设置计数初值。 TL0=0 x0C; void main(void ) TMOD=0 x00; /TMOD初始化。 TH0=0 xF0; TL0=0 x0C; /设置计数初值。 EA=0; /禁止中断。 TR0=1

28、; /启动T0。 while(1) while(TF0=0);time0(); ,(3)用中断方式编写程序 汇编语言源程序: ORG 0000H AJMP MAIN ;转向主程序。 ORG 000BH ;T0中断服务程序固定入口地址。 AJMP ZD ;转向T0中断服务程序。 ORG 0040H MAIN: MOV SP, #30H ;设置堆栈指针。 MOV TMOD, #00H ;TMOD初始化。 MOV TH0, #0F0H ;设置计数初值。 MOV TL0, #0CH SETB ET0 ;开放T0中断。 SETB EA ;开放总中断。 SETB TR0 ;启动T0。 HERE:AJMP

29、HERE ;等待中断。 ZD: CPL P1.0 ;输出取反。 MOV TH0, #0F8H ;重新设置计数初值。 MOV TL0, #06H RETI ;返回。 END,C语言程序 #includereg51.h /定义8051寄存器的头文件 sbit P10=P10; void time0(void ) interrupt 1 p10=p10; /输出状态翻转 TH0=0 xF0; /重新设置计数初值。 TL0=0 x0C; void main(void ) TMOD=0 x00; /TMOD初始化。 TH0=0 xF0; TL0=0 x0C; /设置计数初值。 ET0=1 EA=1; /

30、禁止中断。 TR0=1; /启动T0。 while(1); ,(4)仿真实验,图4.23 例4.5仿真图,图4.24 仿真中用示波器观察到的波形图,4.4 串行接口,4.4.1 串行通信基本知识 1、 串行通信的传送方式 单工方式 单工方式是指甲乙双方通信时只能单向传送数据,发送方和接收方固定。,图4.25 单工方式,半双工方式 半双工方式是指通信双方都有自己的发送器和接收器,既可发送也可接收,但不能同时接收和发送。,图4-22 半双工方式,全双工制式 全双工制式是指通信双方均有发送器和接收器,并且信道划分为发送信道和接收信道,因此全双工制式可实现甲乙双方同时发送和接收数据,发送时能接收,接收

31、时也能发送。,图4.27 双工方式,(2) 同步和异步通信 (1)同步通信: 在数据块传送开始时先发送12个同步字符,并由同时传送的时钟信号来实现发送端和接收端同步,即接受方检测到规定的同步字符后,接着就连续按顺序传送数据。,图4.28 同步通信数据帧格式,(2)异步通信 异步通信中,数据按字符组成字符帧。字符发送端一帧一帧地发送,接收端一帧一帧地接收。 异步通信以字符为传送单位,用起始位和停止位标识每个字符的开始和结束。 发送端和接收端可以由各自的时钟来控制数据的发送和接收,这两个时钟源彼此独立,并不要求同步,,图4.29 异步通信数据帧格式,异步通信字符帧的格式 起始位:发送器通过发送起始

32、位开始一帧字符的传送。 数据位:起始位之后传送数据位。数据位中低位在前,高位在后。数据位可以是5、6、7、8位。 奇偶校验位:实际上是传送的附加位,若该位用于用于奇偶校验,可校检串行传送的正确性。 停止位:标志一个字符传送的结束。停止位可以是1、1.5或2位。 (3)波特率(band rate) 波特率是异步通信中数据传送速率的单位,其意义是每秒传送多少位二进制数。 例如:数据传送的速率为120个字符每秒,每个字符由1个起始位、8个数据位和1个停止位组成,则其传送波特率为: 10b120s1200bs1200波特,4.4.2MCS-51 串行口及控制,51单片机具有一个可编程的全双工串行接口,

33、它可用作通用异步接收和发送器(UART),也可用作同步移位寄存器。 1、 单片机串行口的结构 8051单片机通过串行数据接收端RXD (P3.0引脚)和串行数据发送端TXD(P3.1引脚)与外界进行通信。其中有两个物理上独立的接收、发送缓冲器SBUF,它们占用同一地址99H,通过读写方式区分,图4.30 8051 单片机串口硬件图,2、串行数据接收: 数据通过RXD引脚输入,一位一位地存入移位寄存器中,然后再整体8位存入接收SBUF中;同时接收中断标志位RI自动置1,向CPU申请中断; CPU响应中断,软件清RI,读取SBUF数据;接着又开始接收下一个数据,直至全部数据接收完毕。 3、串行数据

34、发送: 将数据写入SBUF寄存器中,UART自动添加起始位和停止位,数据从TXD引脚串行发送,当一个数据发送完TI自动置1,向CPU发中断请求;CPU响应中断后,用软件清TI位,同时将下一个数据写入SBUF中继续发送,直到所有数据发送完毕。 例如 MOV SBUF,A 启动一次数据发送,可向SBUF再发送下一个数,4.串行口控制,(1)串行口控制寄存器SCON,SM0 SM1串行口工作方式选择位, SM2-多机通信控制位。在方式2和方式3中,若SM2=1,且RB8=1时,将接收到的前8位数据送入SBUF,并置位RI,产生中断请求;否则,将接收到的8位数据丢弃。而当SM2=0时,则不论第9位数据

35、为0还是为1,都将前8位数据装入SBUF中,并产生中断请求。在方式0时,SM2必须为0。 REN-允许接收控制位。REN=0,禁止接收;REN=1,允许接收。该位由软件置位或复位。 TB8-方式2和方式3中要发送的第9位数据。在方式2和方式3时,TB8是发送的第9位数据。在多机通信中,以TB8位的状态表示主机发送的是地址还是数据:TB8=0表示数据,TB8=1表示地址。该位由软件置位或复位。TB8还可用于奇偶校验位。,RB8-方式2和方式3中要接收的第9位数据。在方式2或方式3时,RB8存放接收到的第9位数据。 TI-发送中断标志。当方式0时,发送完第8位数据后,该位由硬件置位。在其他方式下,

36、遇发送停止位时,该位由硬件置位。因此TI=1,表示帧发送结束,可软件查询TI位标志,也可以请求中断。TI位必须由软件清0。 RI-接收中断标志。当方式0时,接收完第8位数据后,该位由硬件置位。在其他方式下,当接收到停止位时,该位由硬件置位。因此RI=1,表示帧接收结束,可软件查询RI位标志,也可以请求中断。RI位也必须由软件清0。,(2)电源控制寄存器PCON,PCON中只有SMOD与串口有关: SMOD =1 时,波特率加倍 SMOD =0 时,波特率不加倍。,5. MCS-51 串行口的工作方式 (1)方式0: 同步移位寄存器方式,其波特率是fosc的1/12。 方式0输出,图4.31 串

37、行口方式0的输出,方式0接收 在REN=1,RI=0时,串行口作为并行输入口使用时,要外接并行输入串行输出的移位寄存器。如图当接收器接收完8位数据后,置中断标志RI=1,请求中断,响应中断后,必须用软件将RI清零。,图4.32串行口方式0的输入,例4.6:串行口工作在方式0,将开关送来的8位数据利用74LS165转成串行数据从RxD引脚输入,并通过P1口所连接的8个LED显示出来,如图4-29。要求用Proteus 进行仿真实验,图4.33 例 4.6 方式0输入应用,汇编源程序 ORG 000h AJMP START ORG 0100H START: MOV SCON, #11H ;串口设置

38、为方式0接收 LOP: CLR P3.2 SETB P3.2 ;发送移位脉冲 CLR RI ;清RI WAIT: JNB RI,WAIT MOV A,SBUF ;读取数据 MOV P1,A ;送LED显示 SJMP LOP END,C程序 sbit p32=p32 void main(void) SCON=0 x11; /串口设置为方式0接收 while(1) p32=0; p32=1; /发送移位脉冲 RI=0; /清除RI while(RI=0); LED=SBUF; /读取数据,送LED显示 ,仿真实验,图4.34 例 4.6 仿真图,(2)方式1 方式1用于8位异步通信接口。TXD与R

39、XD分别用于发送与接收数据此方式的传送波特率可调.,图4.35 10位的帧格式,数据发送 发送时只要将数据写入SBUF,就启动了发送器开始发送,由硬件自动加入起始位和停止位。一帧数据发送完毕,将SCON中的TI置1。,数据接收 接 收时,在REN=1前提下,当采样到RXD从1向0跳变状态时,就认定为已接收到起始位,启动接收器。一帧数据接收完毕,必须同时满足以下两个条件:即RI=0和停止位为1或SM2=0,这次接收才真正有效,接收数据进入SBUF,停止位进入RB8,并置中断请求标志RI为1,该标志也必须由用户在中断服务程子程序中由软件清零。,方式2和方式3 串行口工作方式2和方式3均为每帧11位

40、异步通信格式,即1位起始位,8位数据位(低位在前),1位可编程的第9数据位和1位停止位。,方式2和方式3的发送 发送前,先根据通信协议由软件设置TB8,可作为可作为奇偶校验位或多机通信中地址数据信息的标志位, 然后将要发送的数据写入SBUF, 即可启动发送过程。.串行口能自动把TB8取出,并装入到第9位数据位的位置, 再逐一发送出去,发送完毕,使TI=1. 方式2和方式3的接收 接收时, 使REN=1,允许接收。当检测到RXD端有1到 0的负跳变,并判断起始位有效后,开始接收9位数据,送入移位寄存器。当满足RI=0且SM2=0,或接收到的第9位数据为1时,前8位数据送入SBUF,第9位数据送入

41、RB8,置RI为1;否则,这次接收无效,也不置位RI,重新搜索RXD端的负跳变,图4.36 11位的帧格式,6. MCS-51 串行口的波特率 方式0的波特率 方式0的波特率是固定的,其值为fosc/12(fosc为主机频率)。 方式2的波特率 通信波特率为fosc/32或fosc/64,根据特殊功能寄存器PCON中SMOD位的状态来决定串行口在那个波特率下工作。选择公式为: 方式1和方式3的波特率 在这两种方式下,串行口波特率是由定时器的溢出率决定的,因而波特率是可变的。波特率的公式为: 溢出率即T1溢出一次所需时间的倒数,计算公式为:,7. 单片机多机通信原理 单片机多机通信是指一台主机和

42、多台从机之间的通信。串行口以方式2或方式3接收时,若SM21,则仅当接收到的第九位数据为1时,才将数据送入接收缓冲器SBUF,并置位RI发出中断请求信号,否则将丢失信息;而当SM20时,则无论第九位是0还是1,都能将数据装入SBUF,并产生中断请求信号。,以主机向从机发送数据为例,在编程前,可先定义各从机通信地址,设三个从机地址分别为00H,01H,和02H。主机和从机在初始化程序中将串行口工作方式设定为11位异步通信方式(方式2或方式3),且置位SM2,允许接收和开放串行口中断。 在主机和某一从机通信之前,先向所有从机发出所选从机的地址,接着发送数据或命令。主机在发送地址时,地址数据标识位T

43、B8设置1,以表示是地址信息。各从机接收到主机发来的地址信息后,则置位中断标志RI,请求CPU处理,从机在中断服务子程序中判断主机送来的地址是否与本从机相符。若为本地址,则将SM2位清0,准备与主机进行数据通信。 而地址不符合的从机则保持SM2为1状态。接着主机发送数据帧,数据帧的第9位TB8为0,各串行口同时收到了数据帧,而只有已选中的从机(SM20)才能产生中断并接收该数据,其余从机因收到第九位数据RB8为0且本机SM21,所以将数据丢掉。这就实现了主机和从机的一对一通信。,例4.7: 设甲乙机以串行方式1进行数据传送,fosc=11.0592MHz,波特率为1200b/s。使用定时计数器

44、T1作为数据传输率数据发生器,T1选工作方式2,设SMOD=0;甲机发送片外RAM 1000H101FH单元的16个数据, 乙机接收后存在片外RAM 1000H101FH单元中。,解:串行方式1波特率取决于T1溢出率(设SMOD=0), 计算T1定时初值:, 汇编语言源程序: 甲机发送程序: ORG 0000H LJMP START ORG 0023H LJMP UART1 ORG 0030H START: MOV TMOD, #20H ;置T1定时器工作方式2 MOV SCON, #40H ;置串行方式1, 禁止接收 MOV PCON, #00H ;置SMOD=0(SMOD不能位操作) MO

45、V TL1, #0E8H ;置T1计数初值 MOV TH1, #0E8H ;置T1计数重装值 SETB TR1 ;T1启动 MOV IE , #90H ;开放串行口中断 MOV R2, #16 ;置发送数据长度 MOV DPTR ,#1000H ;置发送数据区首地址 MOV A, DPTR ;读一个数据 MOV SBUF, A ;发送 LOP : SJMP LOP ;等待中断,甲机中断子程序 UART1 : CLR EA ;关中断 CLR TI ;清除中断标志位 DJNZ R2, NEXT ;判断是否发送完毕 CLR ES ;关串口中断 LJMP TEND ;转向中断返回 NEXT: INC

46、DPTR MOV SBUF ,A ;发送下一个数据 TEND: SETB EA ;开中断 RETI END,乙机接收程序 ORG 0000H LJMP START ORG 0023H LJMP UART1 ORG 0030H START: MOV SCON, #50H ;置串行方式1,允许接收 MOV PCON, #00H ;置SMOD=0 MOV TMOD, #20H ;置T1定时器工作方式2 MOV TL1, #0E8H ;置T1计数初值 MOV TH1, #0E8H ;置T1计数重装值 SETB TR1 ;T1启动 MOV IE, #90H ;开放串行口中断 MOV R2, #16 ;置

47、接收数据长度 MOV DPTR, #1000H ;置接收数据区首地址 LOP : SJMP LOP ;等待中断,乙机中断子程序 UART 1: CLR EA ;关中断 CLR RI ;清除中断标志位 MOV A , SBUF ;取接收到的数 MOV A, DPTR ;接收的数据存入缓冲区 DJNZ R2, NEXT ;判断是否发送完毕 CLR ES ;接收完毕,关串口中断 LJMP REND ;转向中断返回 NEXT: INC DPTR REND: SETB EA ;开中断 RETI END,C语言程序 甲机发送程序 #include “reg51.h” /包含8051单片机寄存器定义头文件 unsigned char xdata ADDR16; /定义外部RAM16个单元 unsigned char i=0; /定义计数变量 unsigned char *p; /定义指针变量 甲机中断子程序 void uart1(void) interrupt 4 /4号位串行中断 EA=0; /

温馨提示

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

评论

0/150

提交评论