1 / 102

第 4 章 MCS-51 功能模块的编程与仿真

第 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 位数据。.

terris
Télécharger la présentation

第 4 章 MCS-51 功能模块的编程与仿真

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第4章 MCS-51功能模块的编程与仿真 4.1 单片机的并行输入/输出口 4.2 中断的系统 4.3 MCS-51的定时/计数器 4.4 串行接口

  2. 4.1 单片机的并行输入输出端口 • 8051单片机有4个8位并行I/O端口,每条I/O口线都能独立地用作输入或输出。 • 在无片外扩展存储器的系统中,这四个I/O口都可以作为通用I/O口使用。 • 在有片外扩展存储器的系统中,P2口送出高8位地址,P0口分时送出低8位地址和8位数据。

  3. 1. 并行I/O的结构和原理(1)P0口 图4.1 P0 的位结构图

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

  5. (2) P1口 P1口仅作通用I/O口使用。由于在内部输出端已接有上拉电阻,所以不需再外接上拉电阻。 图4.2 P1 的位结构图

  6. (3) P2口 • 当控制信号等于零时,MUX拨向下方,P2口作为通用I/O口使用 • 当控制信号等于1 时,MUX拨向上方,P2口作为高8位地址线使用。 图4.3 P2 的位结构图

  7. 4、P3口 锁存器Q端接与非门的一个输入端,第二功能输出线接与非门的另一个输入端。 图4.4 P3 的位结构图

  8. 表4.1 P3口的第二功能表

  9. 2、MC5-51并行I/O的应用举例 1、七段数码管的结构与原理 在单片机应用系统中通常使用的是8段式LED数码管显示器,它有共阴极和共阳极两种,如图所示。

  10. 数码管不同的发光段亮,可组成不同字型,这种组合称为字型码或断码。在COM送入低电平或高电平,然后控制个各段引脚电平,即可形成相应段码。数码管不同的发光段亮,可组成不同字型,这种组合称为字型码或断码。在COM送入低电平或高电平,然后控制个各段引脚电平,即可形成相应段码。 • 共阳顺序段码:C0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H • 共阴顺序段码:3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH(Dp→a)

  11. 例4.1:要求通过开关输入4位二进制数,送到数码管显示出来如图(见书)。例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, #0FH ;保留低4位信息 MOV DPTR, #TAB MOVC A, @A+DPTR ;查表取得断码信息 MOV P1, A ;断码送数码管显示 AJMP LOP … … END

  12. ② C程序 #include "reg51.h" //包含8051单片机寄存器定义头文件 #define LED P1 #define KEY P0 char code disp[ ]={0xC0,0xF9,0xA4,0xB0, 0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83, 0x0C6,0xA1,0x86,0x8E}; //定义断码表 main() { int i; LED=0xFF; //关数码管 while(1) {KEY=0XFF; //读引脚前端口置1 i=KEY; i=~i; //转成数据信息 i=i& 0x0f; //保留低4位信息 LED= disp[i]; //查表取得断码信息,断码送数码管显? } }

  13. ③ 仿真实验 • 在Proteus ISIS 中画出设计电路,并进行电气检测。 • 根据电路设计图,在Keil C中编写源程序。 • 编译程序,并产生HEX文件。 • 将HEX文件加入AT89c51,并仿真电路,通过拨动开关观察发光二极管的显示状况,如图所示。

  14. 图4.7 例4.1的仿真图

  15. 例4.2:要求对某引脚送入的脉冲进行计数,把脉冲的个数送到八个发光二极管以二进制数的形式显示出来,并进行仿真实验。

  16. ①汇编语言源程序: ORG 0000h AJMP 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

  17. ② 仿真实验: • 在Proteus ISIS 中画出设计电路,并进行电气检测。 • 根据电路设计图,在Keil C中编写源程序。 • 编译程序,并产生HEX文件。 • 将HEX文件加入AT89c51,并仿真电路,通过拨动开关观察发光二极管的显示状况,如图所示。

  18. 图4.8-9 例4.2的仿真图

  19. 图4.10 中断过程流程图 图4.11 中断嵌套过程图 §4.2 中断系统 4.2.1 中断的概述 1.中断的基本概念 2.中断优先权与嵌套

  20. 4.2.2 MCS-51的中断系统 8051共有5个中断源。分为高级和低级两个中断优先级,可实现2级中断服务嵌套。 1. MCS-51的中断源 8051允许5个中断源: ① 外部中断源 由外部原因引起的,可以通过两个固定引脚 INT0 ( P3.2 )和INT1( P3.3 )来引入。这两个中断源的请求方式有两种:低电平触发或下降沿触发。 ② 内部中断源 T0:定时/计数器0中断,由T0回零溢出引起。 T1:定时/计数器1中断,由T1回零溢出引起。 ③ TI/RI:串行I/O中断,完成一帧字符发送/接收引起。 2、中断控制 􀂄 􀁺

  21. TCON IE IP 1 高级中断请求 IT0= 1 1 自然优先级 PX0 INT0 IE0 IT0 =0 EX0 0 1 PT0 T 0 TF0 中断 PC ET0 0 1 矢量地址 IT1= 1 1 PX1 INT1 IE1 IT1=0 EX1 0 1 PT1 T1 TF1 低级中断请求 ET1 0 自然优先级 1 PS TX TI 1 ≥ RX ES 0 RI EA SCON 中断 各中断 总 允许 优先级 PC 中断标志 矢量地址 源允许 硬件查询 图4.12 8051中断系统结构

  22. ①定时控制寄存器TCON • TF0/TF1:定时器溢出中断申请标志位(由硬件自动置位)。 =0:定时器未溢出; =1:定时器溢出(由全“1”变成全“0”)时由硬件自动置位,申请中断,中断被CPU响应后由硬件自动清零。 • TR0/TR1:定时器运行启停控制位 =0:定时器停止运行; =1:定时器启动运行。

  23. IE0/IE1:外部中断申请标志位(由硬件自动置位 ,中 断响应后转向中断服务程序时,由硬件自动清0 )。 =0:没有外部中断申请; =1:有外部中断申请。 • IT0/IT1:外部中断请求的触发方式控制位(可由用户通过软件设置 )。 =0: 在INT0/INT1端申请中断的信号低电平有效; =1: 在INT0/INT1端申请中断的信号负跳变有效。

  24. ②串行口控制寄存器SCON TI/RI:串行口发送/接收中断申请标志位=0:没有串行口发送/接收中断申请;=1:有串行口发送/接收中断申请。这两位不会由硬件自动置位,所以用户必须在中断服务子程序中用软件清0。例如:CLR TI RE TI

  25. ③中断允许寄存器IE ES: 串行口中断允许位。ET1 :定时器/计数器T1的溢出中断允许位。EX1 :外部中断1中断允许位。ET0 :定时器/计数器T0的溢出中断允许位。EX0 :外部中断0中断允许位。EA: 总的中断允许控制位(总开关):=0 :禁止全部中断;=1 :允许中断。

  26. ④  中断优先级寄存器IP PX0/PX1:外部中断0 /外部中断1 优先级控制位:=0:属低优先级; =1:属高优先级。PT0/PT1:T0/T1中断优先级控制位:=0:属低优先级; =1:属高优先级。PS1:串行口中断优先级控制位:=0:属低优先级; =1:属高优先级。

  27. 当同级的几个中断源同时发中断请求时, MCS-51单片机的中断系统对各中断源的中断优先级有一个统一的规定,称为自然优先级。自然优先级的排列如下:

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

  29. ③ 中断服务程序入口地址(中断矢量) 中断入口地址就是中断服务子程序的起始地址,即第一条指令的第一个字节在程序存储器中的位置。单片机的中断入口地址由单片机硬件电路决定,各中断服务子程序的入口地址为: 中断源 入口地址 INT0 0003H T0 000BH INT1 0013H T1 001BH RI/TI 0023H

  30. ④ 外部中断触发方式的选择 • 边沿触发 当ITx=1时,外部中断为边沿触发方式。CPU在每个机器周期的S5P2期间采样INT1 (P3.3)引脚。若在连续两个机器周期采样到先高电平后低电平,则认为有中断申请,硬件自动使IE0置1,此标志一直保持到CPU响应中断时,才由硬件自动清0。在边沿触发方式下,为保证CPU在两个机器周期内检测到先高后低的负跳变,输入高低电平的持续时间至少要保持12个时钟周期。

  31. 电平触发 当ITx=0时,外部中断为电平触发方式。若CPU检测外部中断请求输入引脚为低电平,硬件自动置位相应的中断标志位IEx;若为高电平,则认为无中断申请,硬件自动清除中断标志位。所以,外部中断请求输入信号,必须保持到CPU响应该请求为止。当CPU响应请求后通过硬件清零IEx,但请求信号并没有被清除,在该中断服务子程序返回之前,这个中断请求信号必须撤掉,否则,将引起再次响应。为此,用以下电路清除外部中断请求信号,并在中断服务程序中执行以下指令: ORL P1,#01H ANL P1,#0FEH

  32. 图4-12 用二极管显示中断请求信号 4.2.3 MCS-51中断的应用举 【例4.3】:见书P85。

  33. ① 汇编语言源程序: 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, #0FFH CJNE A,#0FFH , LOOP ;有外部 中断请求,去LOOP ORL P1,#0FFH ;无中断请求,外部灯全灭 LJMP LOOP SJMP $

  34. ;中断子程序 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

  35. ② C语言程序 #include "reg51.h" sbit P11=P1^1; sbit P12=P1^2; sbit P13=P1^3; sbit P14=P1^4; sbit P15=P1^5; sbit P16=P1^6; sbit P17=P1^7; void extern0_IR(void) interrupt 1 {p14=p10; p15=p11; p16=p12; p17=p13; }

  36. void main(void) { unsigned char c; IT1=1; EX0=1; EA=1; While(1) { c=P1; c&=0xff; if(c==0xff) P1|0xff; } }

  37. 例4.4平时LED发光二极管处于全亮状态;INT0外中断控制二极管循环左移8次;INT1外中断控制二极管循环右移8次;并进行仿真实验例4.4平时LED发光二极管处于全亮状态;INT0外中断控制二极管循环左移8次;INT1外中断控制二极管循环右移8次;并进行仿真实验

  38. ①汇编语言源程序: ORG 0000H LJMP START ORG 0003H LJMP PINT0 ORG 0013H LJMP PINT1 ORG 0030H START: MOV SP, #30H SETB IT0 ;外部中断1为边沿触发方式 SETB IT1 ; 外部中断1为边沿触发方式 SETB EX0 SETB EX1 SETB EA ;开放外部中断0和1 MOV IP , #04H ;外部中断1为高优先级 LOOP: MOV P1 , #00H ;灯全亮 SJMP LOOP ; 等中断

  39. ;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

  40. ;INT1中断服务子程序 PINT1: PUSH PSW SETB RS1 CLR RS0 MOV R1 , #8 MOV A , #07FH ;置灯的初态 LP1: MOV P1 , A LCALL DELAY RR A ;循环右移 DJNZ R1 , LP1 POP PSW RETI ;延时子程序 略

  41. ② 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 IP =0x04; //外部中断1为高优先级 while(1); { P1=0x00; delay()} //灯全亮 } }

  42. //INT0中断服务子程序 void pint0(void ) interrupt 0 { int,i; P1=0xfe ; //置灯的初态 for(i=0,i<7,i++) {delay (void); P1=P1<<1; //循环左移 } } //INT1中断服务子程序 void pint1(void ) interrupt 2 { int,i; P1=0x7f ; //置灯的初态 for(i=0,i<7,i++) { P1=P1>>1; //循环右移 delay (void); } } //延时子程序 略

  43. ③ 仿真实验 图4.16 例题4.4 仿真图

  44. ¸ 振荡器 12 可重置初值 加1计数器 中断 TFX 方式 控制 TX端 启动 控制 4.3 定时/计数器的结构和原理 8051内部提供两个十六位的定时器/计数器T0和T1

  45. 1.计数功能: 所谓计数功能是指对外部脉冲进行计数。外部脉冲从单片机的T0(P3.4)和T1(P3.5)两个引脚输入,最高计数脉冲频率为晶振频率的1/24。 2.定时功能: 以定时方式工作时,计数输入信号是内部时钟脉冲,每个机器周期使计数器加1,所以,计数频率是振荡频率的1/12,

  46. 4.3.2定时/计数器的工作方式选择及控制 1.方式控制寄存器TMOD ①工作方式选择位M1、M0

  47. ②门控位:GATE。 GATE=0:软件启动定时器,使TRx置1即可启动定时器。 GATE=1:软件和硬件共同启动定时器,除了要使TRx置1外,外部中断请求信号输入端INTx还必须输入高电平才能启动定时器。 ③功能选择位:C/T。 C/T=0时,以定时器方式工作。 C/T=1时,以计数器方式工作。

  48. 2.定时器控制寄存器TCON ①定时器启动控制位:TR0、TR1 TRx=0,停止定时器/计数器1工作。 TRx=1,启动定时器/计数器1工作。 该位由软件置位和复位 ②定时器溢出中断标志位:TF0、 TF1 当定时/计数器溢出时,由硬件自动置1。使用查询方式时,此位做状态位供CPU查询,查询有效后需由软件清零;使用中断方式时,此位做中断申请标志位,进入中断服务后被硬件自动清零

  49. 4.3.3 定时器/计数器的工作方式 方式0(以定时器/计数器T0为例) • 定时寄存器由TH0的8位和TL0的低5位(高3位不用)组成一个13位计数器。 • 当GATE=0时,只要TR0为1,13位计数器就开始进行加1计数;当GATE=1以及TR0=1时,是否计数还取决于INT0引脚信号,当INT0引脚为高电平时开始计数,当INT0为低电平时停止计数。 • 当定时器溢出时,初值寄存器TH0、TL0会自动清零,要对它们重新装初值,否则,下次它们将从0开始进行加法计数。 • 方式0为定时工作方式时,定时时间计算公式为: t=(213-计数初值X)×晶振周期×12

  50. 图4.18 计数器0的方式0结构图

More Related