mcs51功能模块的编程与仿真.ppt
《mcs51功能模块的编程与仿真.ppt》由会员分享,可在线阅读,更多相关《mcs51功能模块的编程与仿真.ppt(102页珍藏版)》请在三一办公上搜索。
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数码管显示器,它有共阴极和共阳极两种,如图所示。,数码管不同的发光段亮,可组成不同字型,这种组合称为字型码或断码。在COM送入低电平或高电平,
4、然后控制个各段引脚电平,即可形成相应段码。共阳顺序段码: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 0100hSTA:MOV P1,#0FFH;关数码管LOP:MOV P0,#0FFH;读引脚前端口置1 MOV A,P0;读开关状态 CPL A;转成数据信息 ANL A,#0FH;保留低4位信息 MOV DPTR,#TAB MOV
5、C A,A+DPTR;查表取得断码信息 MOV P1,A;断码送数码管显示 AJMP LOP END,C程序#include reg51.h/包含8051单片机寄存器定义头文件#define LED P1#define KEY P0char 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=0 xFF;/关数码管 while(1)KEY=0XFF;/读引脚前端口置1 i=KEY;i=i;/
6、转成数据信息 i=i/查表取得断码信息,断码送数码管显?,仿真实验在Proteus ISIS 中画出设计电路,并进行电气检测。根据电路设计图,在Keil C中编写源程序。编译程序,并产生HEX文件。将HEX文件加入AT89c51,并仿真电路,通过拨动开关观察发光二极管的显示状况,如图所示。,图4.7 例4.1的仿真图,例4.2:要求对某引脚送入的脉冲进行计数,把脉冲的个数送到八个发光二极管以二进制数的形式显示出来,并进行仿真实验。,汇编语言源程序:ORG 0000h AJMP STAR ORG 0100H STAR:MOV A,#0ffh MOV P1,A CLR A;计数器清0L081D:J
7、B 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 L081DDELY:;延时子程序 RET END,仿真实验:在Proteus ISIS 中画出设计电路,并进行电气检测。根据电路设计图,在Keil C中编写源程序。编译程序,并产生HEX文件。将HEX文件加入AT89c51,并仿真电路,通过拨动开关观察发光二极管的显示状况,如图所示。,图4.8-9 例4.2的仿真图,4.2 中断
8、系统,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)来引入。这两个中断源的请求方式有两种:低电平触发或下降沿触发。内部中断源 T0:定时/计数器0中断,由T0回零溢出引起。T1:定时/计数器1中断,由T1回零溢出引起。TI/RI:串行I/O中断,完成一帧字符发送/接收
9、引起。2、中断控制,定时控制寄存器TCON,TF0/TF1:定时器溢出中断申请标志位(由硬件自动置位)。=0:定时器未溢出;=1:定时器溢出(由全“1”变成全“0”)时由硬件自动置位,申请中断,中断被CPU响应后由硬件自动清零。TR0/TR1:定时器运行启停控制位=0:定时器停止运行;=1:定时器启动运行。,IE0/IE1:外部中断申请标志位(由硬件自动置位,中 断响应后转向中断服务程序时,由硬件自动清0)。=0:没有外部中断申请;=1:有外部中断申请。IT0/IT1:外部中断请求的触发方式控制位(可由用户通过软件设置)。=0:在INT0/INT1端申请中断的信号低电平有效;=1:在INT0/
10、INT1端申请中断的信号负跳变有效。,TI/RI:串行口发送/接收中断申请标志位=0:没有串行口发送/接收中断申请;=1:有串行口发送/接收中断申请。这两位不会由硬件自动置位,所以用户必须在中断服务子程序中用软件清0。例如:CLR TI RE TI,串行口控制寄存器SCON,中断允许寄存器IE,ES:串行口中断允许位。ET1:定时器/计数器T1的溢出中断允许位。EX1:外部中断1中断允许位。ET0:定时器/计数器T0的溢出中断允许位。EX0:外部中断0中断允许位。EA:总的中断允许控制位(总开关):=0:禁止全部中断;=1:允许中断。,中断优先级寄存器IP,PX0/PX1:外部中断0/外部中断
11、1 优先级控制位:=0:属低优先级;=1:属高优先级。PT0/PT1:T0/T1中断优先级控制位:=0:属低优先级;=1:属高优先级。PS1:串行口中断优先级控制位:=0:属低优先级;=1:属高优先级。,当同级的几个中断源同时发中断请求时,MCS-51单片机的中断系统对各中断源的中断优先级有一个统一的规定,称为自然优先级。自然优先级的排列如下:,3.中断响应及处理过程,中断响应的条件相应的中断是开放的;没有同级的中断或更高级别的中断正在处理;正在执行的指令必须执行完最后 1个机器周期;若当前正在执行的是中断返回指令(RETI),或对IE或IP寄存器操作的指令,则必须执行完当前指令的下一条指令才
12、能响应中断。中断响应的过程 中断过程包括中断请求、中断响应、中断服务、中断返回四个阶段。中断优先级状态触发器置1。由硬件自动生成一条长调用指令,将断点的地址压入堆栈区进行保护,CPU将执行中断服务子程序,包含保护现场、执行中断主体、恢复现场。中断返回:中断子程序最后为中断返回RETI指令,该指令使断点出栈,然后开放中断允许,中断过程结束,CPU返回原程序。,中断服务程序入口地址(中断矢量)中断入口地址就是中断服务子程序的起始地址,即第一条指令的第一个字节在程序存储器中的位置。单片机的中断入口地址由单片机硬件电路决定,各中断服务子程序的入口地址为:中断源 入口地址 INT0 0003 T0 00
13、0BH INT1 0013H T1 001BH RI/TI 0023H,外部中断触发方式的选择,边沿触发 当ITx=1时,外部中断为边沿触发方式。CPU在每个机器周期的S5P2期间采样INT1(P3.3)引脚。若在连续两个机器周期采样到先高电平后低电平,则认为有中断申请,硬件自动使IE0置1,此标志一直保持到CPU响应中断时,才由硬件自动清0。在边沿触发方式下,为保证CPU在两个机器周期内检测到先高后低的负跳变,输入高低电平的持续时间至少要保持12个时钟周期。,电平触发当ITx=0时,外部中断为电平触发方式。若CPU检测外部中断请求输入引脚为低电平,硬件自动置位相应的中断标志位IEx;若为高电
14、平,则认为无中断申请,硬件自动清除中断标志位。所以,外部中断请求输入信号,必须保持到CPU响应该请求为止。当CPU响应请求后通过硬件清零IEx,但请求信号并没有被清除,在该中断服务子程序返回之前,这个中断请求信号必须撤掉,否则,将引起再次响应。为此,用以下电路清除外部中断请求信号,并在中断服务程序中执行以下指令:,ORL P1,#01HANL P1,#0FEH,4.2.3 MCS-51中断的应用举,【例4.3】:见书P85。,图4-12 用二极管显示中断请求信号,汇编语言源程序:ORG 0000H AJMP MAIN;转向主程序 ORG 0013H;外部中断1入口地址 AJMP PINT OR
15、G 0050HMAIN:SETB IT1;置边沿触发方式 SETB EX1 SETB EA;开发外部中断1LOOP:MOV A,P1 ANL A,#0FFH CJNE A,#0FFH,LOOP;有外部 中断请求,去LOOP ORL P1,#0FFH;无中断请求,外部灯全灭 LJMP LOOP SJMP$,;中断子程序 JB P1,0,L2 CLR P1.4L2:JB P1.1,L3 CLR P1.5L3:JB P1.2 L4 CLR P1.6L4:JB P1.3 L5 CLR P1.7L5:RETI END,C语言程序#includereg51.h sbitP11=P11;sbitP12=P1
16、2;sbitP13=P13;sbitP14=P14;sbitP15=P15;sbitP16=P16;sbitP17=P17;void extern0_IR(void)interrupt 1 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 LJ
17、MP PINT0 ORG 0013H LJMP PINT1 ORG 0030HSTART:MOV SP,#30HSETB IT0;外部中断1为边沿触发方式 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;循环左
18、移 DJNZ R1,LP0 POP PSW RETI,;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;延时子程序 略,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;
19、EX1=1;EA=1;/开放外部中断0和1 IP=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)两个引脚输入,最高计数脉
20、冲频率为晶振频率的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 T
21、Rx=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引脚信号,当INT0引脚
22、为高电平时开始计数,当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产生溢出时,一方面使溢出标志位TF0置;同时硬件电路又
23、把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 定时/计数器的初始化 定时/计数器作为一种可编程部件,在使用前,对其进行初始化,以确定其
24、工作方式和功能。定时/计数器的初始化步骤确定定时/计数器的工作方式,并写入TMOD。计算计数初值,并写入THx、TLx。如果使用中断方式,则开放定时/计数器的中断,根据需要给IE中的相关位赋值。启动定时/计数器,给TRx置1。,4.3.5 定时/计数器的应用举例,例4.5:设单片机晶振频率为12MHz,试用T0在P1.0端线输出周期为1ms的方波脉冲如图所示,如用方式0分别以查询方式和中断方式实现。并在仿真实验中用示波器观察输出波形。,图4.22 例4.5波形图,计数初值计算。由题意可得,只要从P1.0口每隔500s交替输出高低电平即可得到周期为1ms的方波,所以T0的定时时间为500s。得:
25、,记数初值 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 LOP;继续查询。LOOP1:MOV TH0,#0F0H;重新设置计数初值。MOV TL0,#0CH
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- mcs51 功能模块 编程 仿真
链接地址:https://www.31ppt.com/p-4515416.html