学习情境2交通灯的设计.ppt

上传人:小飞机 文档编号:6413000 上传时间:2023-10-28 格式:PPT 页数:128 大小:2.14MB
返回 下载 相关 举报
学习情境2交通灯的设计.ppt_第1页
第1页 / 共128页
学习情境2交通灯的设计.ppt_第2页
第2页 / 共128页
学习情境2交通灯的设计.ppt_第3页
第3页 / 共128页
学习情境2交通灯的设计.ppt_第4页
第4页 / 共128页
学习情境2交通灯的设计.ppt_第5页
第5页 / 共128页
点击查看更多>>
资源描述

《学习情境2交通灯的设计.ppt》由会员分享,可在线阅读,更多相关《学习情境2交通灯的设计.ppt(128页珍藏版)》请在三一办公上搜索。

1、交通信号灯的设计,学习情景二,学习目标:了解中断的基本概念、中断的作用及中断请求方式掌握AT89S52单片机中断结构,6个中断源的中断请求、中断屏蔽、优先级设置等初始化编程方法掌握定时/计数器4种工作方式的初始化编程方法学会使用定时器/计数器编写计数、定时应用程序的方法,技能目标:会编写中断和定时/计数器初始化程序 会计算定时/计数器初值根据项目要求,能够灵活应用中断和定时/计数器的资源,任务一 中断控制的流水灯第一部分 项目要求 采用中断方法控制灯的亮灭,由中断服务程序控制I/O口置高,置低,即可控制灯的全亮和全灭。外部中断INT1接按键(KEY),作为中断申请信号,开机后8个发光二极管从左

2、到右流水,产生中断后,8个发光管全亮、全灭,延时一定时间后,再循环。,第二部分 相关知识一、中断的概念,中断的定义:当中央处理器CPU正在处理某事件时外界发生了更为紧急的请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完毕后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。,从中断的定义我们可以看到中断应具备中断源、中断响应、中断返回三个要素。中断源发出中断请求,单片机对中断请求进行响应,当中断响应完成后应进行中断返回,返回被中断的地方继续执行原来被中断的程序。,图2-1 中断流程,二、AT89S52中断源与中断向量地址,中断源就是向CPU发出中断请求的来源。AT89S

3、52共有六个中断源:2个外部中断(INT0和INT1)、3个定时器中断(定时器0、1和2)和1个串行中断。如图所示。,(一)外部中断外部中断0 P3.2外部中断1 P3.3外部中断请求有两种信号方式:电平方式和脉冲方式。电平方式的中断请求信号是低电平有效。脉冲方式的中断请求信号则是脉冲的负跳变有效。,(二)内部定时和外部计数中断定时:对内部振荡器输出的脉冲计数。计数脉冲的个数反映了时间的长短。计数:对外部脉冲计数。计数脉冲的个数仅仅反映外部脉冲输入的多少。外部脉冲由T0引入 P3.4外部脉冲由T1引入 P3.5外部脉冲由T2引入 P1.0当定时器/计数器发生溢出,便激活中断。外部计数中断请求信

4、号是脉冲的负跳变引起。,(三)串行中断 串行中断是为串行通信的而需要设置的。当串行口发送完或接收完一帧信息时,单片机内部硬件便自动串行发送或接收中断标志位置1。当CPU查询到这些标志位为1时,便激活串行中断。串行中断是由单片机内部自动发生的,不需要在芯片外设置引入脚。,(四)中断矢量地址,三、中断标志与控制,要实现中断,首先中断源要提出中断申请,而中断请求的过程是单片机内部特殊功能寄存器TCON和SCON相关状态位中断请求标志位置1的过程,当CPU响应中断时,中断请求标志位才由硬件或软件清0。,(一)定时器计数器控制寄存器TCON TCON为定时器/计数器的控制器,它也锁存外部中断请求标志,其

5、格式如下:,与中断有关的控制位共6位,IE0和IE1:外部中断请求标志。当CPU采样到(或)端出现有效中断请求(低电平或脉冲下降沿)时,IE0(或IE1)位由片内硬件自动置1;当中断响应完成转向中断服务程序时,由片内硬件自动清0。IT0和ITl:外部中断请求信号触发方式控制标志。IT0(或IT1)=1,(或)信号为脉冲触发方式,脉冲负跳沿有效;IT0(或IT1)=0,(或)信号电平触发方式,低电平有效。IT0(或IT1)位可由用户软件置1或清0 TF0和TFl:定时器/计数器溢出中断请求标志。当定时器0(或定时器1)产生计数溢出时,TF0(或TF1)由片内硬件自动置1;当中断响应完成转向中断服

6、务程序时,由片内硬件自动清0。计数溢出标志位的使用有两种情况:采用中断方式时,作中断请求标志位来使用;采用查询方式时,作查询状态位来使用。,(二)串行口控制寄存器SCON,与中断有关的控制位共2位TI:串行口发送中断请求标志。当串行口发送完一帧信号后,由片内硬件自动置1。但CPU响应中断时,并不清除TI,必须在中断服务程序中由软件对TI清0。,RI:串行口接收中断请求标志。当串行口接收完一帧信号后,由片内硬件自动置1。但CPU响应中断时,并不清除RI,必须在中断服务程序中由软件对其清0。应当指出,AT89S52系统复位后,TCON和SCON中各位被复位成“0”状态,应用时要注意各位的初始状态。

7、,(三)中断允许控制寄存器IE,与中断有关的控制位共7位EA:中断允许总控制位。EA=0时,中断总禁止,禁止一切中断;EA=1时,中断总允许,而每个中断源允许与禁止,分别由各自的允许位确定。,EX0和EX1:外部中断允许控制位。EX0(或EX1)=0,禁止外部中断;EX0(或EX1)=1,允许外部中断。ET0和ET1:定时器中断允许控制位。ET0(ET1)=0,禁止定时器0(或定时器1)中断;ET0(ET1)=1,允许定时器0(或定时器1)中断。,ES:串行中断允许控制位。ES=0,禁止串行(TI或RI)中断;ES=1,允许串行(TI或RI)中断。ET2:定时器2中断允许控制位。ET2=0,禁

8、止定时器2(TF2或EXF2)中断;ET2=1,允许定时器2(TF2或EXF2)中断;在单片机复位后,IE各位被复位成“0”状态,CPU处于关闭所有中断的状态。,例如:可以采用如下字节传送指令来开放定时器T0的溢出中断:MOV IE,#82H 也可以用位寻址指令,则需采用如下两条指令实现同样功能:SETB EA SETB ET0 在89S52复位后,IE各位被复位成“0”状态,CPU处于关闭所有中断的状态。所以,在89S52复位以后,用户必须通过程序中的指令来开放所需中断。,(四)中断优先级控制寄存器IP 89S52单片机具有高、低2个中断优先级。高优先级用“1”表示,低优先级用“0”表示。对

9、于所有的中断源,均可由软件设置为高优先级中断或低优先级中断,并可实现两级中断嵌套。IP寄存器可以位寻址。,与中断有关的控制位共6位 PX0:外部中断0优先级设定位。PT0:定时器0(T0)优先级设定位。PXl:外部中断1优先级设定位。PTl:定时器1(T1)优先级设定位。PS:为串行口优先级设定位。PT2:为定时器2优先级设定位。可用软件对IP的各位置1或清0,例如CPU开中断可由以下两条指令来实现:SETB 0AFH;EA置1 或 0RL IE,#80H;按位“或”,EA置1 CPU关中断可由以下两条指令来实现:CLR 0AFH;EA清0 或 ANL IE,#7FH;按位“与”,EA清0 又

10、如设置外部中断源 为高优先级,外部中断源 为低优先级,可由下面指令来实现:SETB 0B8H;PX0置1 CLR 0BAH;PXl清0 或 MOV IP,#00001B;PX0置1,PXl清0,四、优先级结构 中断优先级只有高低两级。所以在工作过程中必然会有两个或两个以上中断源处于同一中断优先级。若出现这种情况,内部中断系统对各中断源的处理遵循以下两条基本原则:低优先级中断可以被高优先级中断所中断,反之不能。一种中断(不管是什么优先级)一旦得到响应,与它同级的中断不能再中断它。中断源 同级自然优先级 外部中断0 最高级 定时器0中断 外部中断1 定时器1中断 串行口中断 最低级 定时器2中断

11、最低级,例:设89S52的片外中断为高优先级,片内中断为低优先级。试设置IP相应值。解:(a)用字节操作指令 MOV IP,#05H 或 MOV 0B8H,#05H(b)用位操作指令 SETB PX0 SETB PX1 CLR PS CLR PT0 CLR PT1,五、中断系统的初始化及应用(一)中断系统的初始化(1)CPU开中断或关中断;(2)某中断源中断请求的允许或禁止(屏蔽);(3)设定所用中断的中断优先级;(4)若为外部中断,则应规定低电平还是负边沿的中断触发方式。例 请写出 为低电平触发的中断系统初始化程序。解:(1)采用位操作指令 SETB EA;CPU开中断 SETB EXl;开

12、 中断 SETB PXl;令 为高优先级 CLR ITl;令 为电平触发(2)采用字节型指令 MOV IE,#84H;开 中断 ORL IP,#04H;令 为高优先级 ANL TCON,#0FBH;令 为电平触发,(二)中断系统的应用 中断管理与控制程序一般包含在主程序中,根据需要通过几条指令来实现,例如CPU开中断,可用指令“SETB EA”或“ORL IE,#80H”来实现,关中断可用指令“CLR EA”,或“ANL IE,#7FH”来实现。,中断服务程序的一般格式:ORG ADDRESS AJMP INTVS INTVS:CLR EA;关中断 PUSH PSW;保护现场 PUSH A S

13、ETB EA;开中断,允许CPU响应高级中断 中断服务 CLR EA;关中断 POP A;恢复现场 POP PSW SETB EA;开中断 RETI;中断返回,编写此程序应注意以下几点:(1)为了要跳到用户设计的中断服务程序,在相应入口地址安排一条跳转指令;(2)在中断服务程序的末尾,安排一条返回指令RETI;(3)由于在响应中断时,CPU只自动保护断点,所以CPU的其他现场(如寄存器A、B状态,状态字PSW,通用寄存器R0、R1等)的保护和恢复也必须由用户在中断服务程序中安排;(4)在此多级中断的中断服务程序中,保护现场之后的开中断(SETB EA)是为了允许有更高级中断打断此中断服务程序,

14、恢复现场和保护现场之前的关中断(CLR EA)是为了保证在恢复和保护现场时,CPU不响应新的中断请求,从而使现场数据不受到破坏或者造成混乱;(5)当把程序中保护现场之后的SETB EA和恢复现场之前的CLR EA删除,就是一个单级中断服务程序。,(三)中断程序举例【例2.1】使用一个按键控制图2.3所示的流水灯,每按一次按键流水灯的流动方向改变一次,要求使用中断技术处理按键。解:如图2.3所示,按键接在P3.3,因此采用外部中断1,中断申请从 输入。每按一次按键,产生一次中断,流水灯流动方向便改变一次。当开关SA17闭合时,发出中断请求。中断服务程序的矢量地址为0013H。,图2.3 方向可控

15、流水灯,ORG 0000H;定义下一条指令的地址 LJMP START;转向主程序 ORG 0013H;安排外部中断1处理程序的第一条指令 LJMP KEYS;直接转移到中断处理程序 ORG 0100H;主程序起点 START:MOV SP,#70H;设置堆栈栈底指针 SETB IT1;设置外部中断1的中断方式为下降沿中断 SETB EX1;开放外部中断1 SETB EA;开放总中断 MOV A,#01H;#01H送累加器A L1:MOV P2,A;累加器A中内容送P2口 MOV R7,#0FFH;延时 L3:MOV R6,#0FFH L2:DJNZ R6,L2 DJNZ R7,L3 JNB

16、FX,L4;FX=0时转移到L4(FX是流水灯流动方向标志)RL A;累加器A中内容左移一位 SJMP L5;转移至L5 L4:RR A;累加器A中内容右移一位 L5:SJMP L1;转移至L1,;按键中断程序;入口:外部中断1;功能:确认按键后改变方向标志FX的状态 ORG 0300H;中断处理程序入口 KEYS:MOV R7,#20H;首先延时去抖 K1:MOVR6,#0FFH DJNZ R6,$DJNZ R7,K1 JB KEY,K2;延时完成后再检测按键 CPL FX;确认按键按下,改变方向标志位状态 K2:RETI;中断结束返回 KEY BIT P3.3;定义按键变量 FX BIT

17、00H;定义位变量,用于判断方向 END;结束,第三部分 项目实施一、项目实施分析(一)硬件电路 P1口连接8个发光二极管,外部中断INT1接KEY(P2.7接按键SW8,P3.3接KEY),作为中断申请信号,开机8个发光二极管从左到右流水,产生中断后,8个发光管全亮、全灭,延时后,再循环。如图2.4所示。,参考程序:ORG 0000h;伪指令 LJMP START;跳转到单片机的主程序 ORG 0013H;外部中断1的入口地址 LJMP EXT1;跳转到中断服务程序 ORG 0100H;伪指令,单片机主程序的开始START:MOV IE,#10000100b MOV IP,#00000100

18、b MOV TCON,#00000000b;定时器初始化 MOV SP,#40H,MOV P1,#0FFH MOV P2,#00H MOV P3,#0FFH;设置P1、P2、P3口状态LOOP:MOV A,#0FFH CLR C MOV R2,#08H LOOP1:RLC A MOV P1,A LCALL DELAY DJNZ R2,LOOP1 JMP LOOP;小灯循环点亮EXT1:PUSH ACC;中断服务程序 PUSH PSW,MOV A,#00H;小灯全亮 MOV R3,#0AHLOOP2:MOV P1,A LCALL DELAY CPL A DJNZ R3,LOOP2 POP PSW

19、 POP ACC RETI,DELAY:MOV R5,#20;延时程序D1:MOV R6,#20D2:MOV R7,#248 DJNZ R7,$DJNZ R6,D2 DJNZ R5,D1 RET END,任务二 速度可控流水灯第一部分 项目要求将8个发光二极管从左到右流水灯循环显示,通过按键改变循环的速率,最小为0.2秒,最大为2秒,即流水灯的流动速度分为10级,使用按键控制流动速度。每按一次按键流水灯的流动速度改变1级。按一次按键,速度增加一级,逐步增加,增加到最高速度后,再循环。采用定时器T0,方式1,定时器定时时基是0.05秒。,第二部分 相关知识,AT89S52单片机内部有三个16位可

20、编程的定时器/计数器,T0、T1和T2。它们既可用作定时器方式,又可用作计数器方式,且都有4种工作方式可供选择。但T0、T1与T2的4种工作方式不同。一、定时器/计数器结构与功能 定时器0,定时器1是16位加法计数器,分别由两个8位专用寄存器组成:定时器0由TH0和TL0组成,定时器1由TH1和TL1组成。见图。,图2.5 定时器/计数器结构框图,1.计数功能 计数方式时,T的功能是计来自T0(P3.4)、T1(P3.5)的外部脉冲信号的个数。输入脉冲由1变0的下降沿时,计数器的值增加1直到回零产生溢出中断,表示计数已达预期个数。脉冲的计数长度与计数器预先装入的初值有关。初值越大,计数长度越小

21、;初值越小,计数长度越大。最大计数长度为65536(216)个脉冲(初值为0)。,2.定时方式 定时方式时,T记录89S52内部振荡器输出的脉冲(机器周期信号)个数。每一个机器周期使T0或T1的计数器增加1,直至计满回零自动产生溢出中断请求。定时器的定时时间不仅与计数器的初值即计数器的长度有关,而且还与系统的时钟频率有关。在机器周期一定的情况下,初值越大,定时时间越短;初值越小,定时时间越长。最长的定时时间为65536(216)个机器周期(初值为0)。,定时器/计数器是一种可编程的部件,在其工作之前必须将控制字写入工作方式和控制寄存器,用以确定工作方式,这个过程称为定时器/计数器的初始化。对定

22、时器/计数器进行控制的寄存器共有2个:TCON、TMOD,二、定时器/计数器控制寄存器,1.定时控制寄存器TCON(88H)工作方式寄存器TCON:控制定时器的启动、停止,标志定时器的溢出和中断情况。TCON的高4位:定时器的运行控制位和溢出标志位;低4位:外部中断触发方式控制位和锁存外部中断请求源。,TF0和TF1:定时器/计数器溢出标志位。当定时器/计数器0(或定时器/计数器1)溢出时,由硬件自动使TF0(或TF1)置1,并向CPU申请中断。CPU响应中断后,自动对TF1清零。TF1也可以用软件清零。TR0和TR1:定时器/计数器运行控制位。TR0(或TR1)=0,停止定时器/计数器0(或

23、定时器/计数器1)工作。TR0(或TR1)=1,启动定时器/计数器0(或定时器/计数器1)工作。用指令SETB TR1(或CLR TR1)使TR1置1(或清零)。,GATE,C/T,M1,M0,GATE,C/T,M1,M0,定时器1,定时器0,其中,低4位用于T0,高4位用于T1。,2.工作方式寄存器TMOD(89H),M1、M0:工作方式控制位,C/T:计数器/定时器方式选择位C/T=0,为定时方式。C/T=1,为计数方式。GATE:门控位GATE0时,只要用软件使TR0(或TRl)置1就可以启动定时器T0(或T1);GATE=1时,只有/INT0(或/INT1)引脚为高电平且由软件使TR0

24、(或TRl)置1时,才能启动定时器工作。TMOD不能位寻址,只能用字节指令设置高4位定义定时器1,低4位定义定时器0定时器工作方式。复位时,TMOD所有位均置0。,例:设置定时器1工作于方式1,定时工作方式与外部中断无关,则M1=0,M0=1,GATE=0,因此,高4位应为0001;定时器0未用,低4位可随意置数,但低两位不可为11(因方式3时,定时器1停止计数),一般将其设为0000。因此,指令形式为:MOV TMOD,#10H,三、定时器/计数器工作方式与程序设计(一)工作方式0,图2.6 定时器/计数器0方式0的逻辑结构,工作方式寄存器TMOD中的M1M0为:00 方式0为13位的计数器

25、,由TL0的低5位和TH0的8位组成,TL0低5位计数溢出时向TH0进位,TH0计数溢出时,向中断标志位TF0进位(硬件置位TF0),并申请中断。T0是否溢出可查询TF0是否被置位,以产生T0中断。工作在定时方式 C/T0。定时器T0工作在定时方式。定时器T0对机器周期计数。,定时器T0在工作前,应先对13位的计数器赋值,开始计数时,在初值的基础上进行减1计数。定时时间的计算公式为:定时时间(213 计数初值)晶振周期12或 定时时间(213 计数初值)机器周期若晶振频率为12MHz,则最短定时时间为 213(2131)(1/12)10-6121 s最长定时时间为(2130)(1/12)10-

26、6128 192 s,工作在计数方式 C/T1,定时器T0工作在计数方式。13位计数器对外部输入信号进行加1计数。当INT0由0变为1时,开始计数;当INT0由1变为0时,停止计数。这样可以测量在INT0端出现的正脉冲的宽度。方式0计数时,最大计数值为 213=8 192(个外部脉冲)。,例2.2:假设89S52单片机晶振频率为12MHz,要求定时时间8ms,使用定时器T0,工作方式0,计算定时器初值X。解:t=(213 X)机器周期 当单片机晶振频率为12MHz时,机器周期=1s 8103=(213 X)1 X=8192-8000=192 转换成二进制数为:11000000B,例2.3 利用

27、T0方式0产生1ms的定时,在P1.2引脚上输出周期为2ms的方波。设单片机晶振频率fosc12MHz。解:(1)解题思路 要在P1.2引脚输出周期为2ms的方波,只要使P1.2每隔1ms取反一次即可。执行指令为CPL P1.2。(2)确定工作方式:方式0 TMOD=00H,C/0:T0为定时功能;(D2位)GATE0,只要用软件使TR0(或TR1)置1就能启动定时器T0(或T1);,M1M0=00,工作方式0 TMOD的值为=00HTMOD.4TMOD.7可取任意值,因T1不用,这里取0值。使用 MOV TMOD,#00H即可设定T0的工作方式。,(3)计算1 ms定时时T0的初值机器周期

28、T=1fosc12=1s计数个数:X=1ms/ls=1000设T0的计数初值为x0,则 x0(213一X)81921000 7192D转换成二进制数为:11100000 11000B,高8位 低5位,将高8位11100000=0E0H装入TH0 将低5位11000=18H装入TL0,(4)编程可采用中断和查询两种方式编写程序。方法一:中断方式 ORG 0000H LJMP MAIN;转主程序MAIN ORG 000BH LJMP IT0P;转T0中断服务程序IT0P,1 1EA=1,CPU开放中断;ET0=1,允许T0中断;,ORG 1000HMAIN:MOV SP,#60H;设堆栈指针 MO

29、V TMOD,#00H;设置T0为方式 0,定时 MOV TL0,#18H;送定时初值 MOV TH0,#0E0H SETB EA;CPU开中断 SETB ET0;T0允许中断 SETB TR0;启动T0定时HERE:SJMP HERE;等待中断,ORG 1200H;T0中断入口 IT0P:MOV TL0,#18H;重新装入 计数初值 MOV TH0,#0E0H CPL P1.2;输出方波 RETI;中断返回 END,方法二:查询方式 MOV TMOD,#00H;设置T0为方 式0,定时 MOV TL0,#18H;送初值 MOV TH0,#0E0H SETB TR0;启动T0定时LOOP:JB

30、C TF0,NEXT;查询定时时间到否?SJMP LOOPNEXT:MOV TL0,#18H;重新装入计数初值 MOV TH0,#0E0H CPL P1.2;输出方波 SJMP LOOP;重复循环,(二)工作方式1方式1为16位的定时器/计数器,图2.7 定时器/计数器0方式1的逻辑结构图,工作方式寄存器TMOD中的M1M0为:01定时器T0工作方式1与工作方式0类同,差别在于其中的计数器的位数。工作方式1以16位计数器参与计数。工作在定时方式 定时时间(216 计数初值)晶振周期12或 定时时间(216 计数初值)机器周期若晶振频率为12MHz,则最短定时时间为216(2161)(1/12)

31、10-6121 s最长定时时间为(2160)(1/12)10-61265536 s工作在计数方式 最大计数值为21665536(个外部脉冲),Flash,例2.4 假设89S52单片机晶振频率为12MHz,所需定时时间为10ms,当T0工作在方式1时T0计数器的初值是多少?解:t=(216 X0)机器周期 当单片机晶振频率为12MHz时,机器周期=1s 10103=(216 X0)1 X=65536-10000=55536转换成二进制数为:,例2.5 假设89S52单片机晶振频率为12MHz,定时器T0的定时初值为9800,计算T0工作在方式1时的定时时间。解:t=(216 X0)机器周期 当

32、单片机晶振频率为12MHz时,机器周期=1s t=(216 9800)1 t=65536-9800=55736s,例2.6 用定时器T0产生50HZ的方波。由P1.0输出此方波(设时钟频率为12MHZ)。采用中断方式。解:50HZ的方波周期T为 T=1/50=20ms,可以用定时器产生10ms的定时,每隔10ms改变一次P1.0的电平,即可得到50HZ的方波。定时器T0应工作在方式1。,(1)工作在方式1时的T0初值,根据下式计算:t=(216 X)机器周期,时钟频率为12MHz,则机器周期=1s 10103=(216 X)1 X=65536 10000=55536 转换为二进制数:11011

33、000 11001100B,高8位 低8位,高8位=0D8H装入TH0,低8位=0CCH装入TL0。(2)程序 ORG 0000H LJMP MAIN ORG 000BH;T0的中断入口地址 LJMP T0INT,ORG 0100HMAIN:MOV TMOD,#01H;设置T0为工作方式1 MOV TH0,#0D8 H;装入定时器初值 MOV TL0,#0CC H SETB ET0;设置T0允许中断 SETB EA;CPU开中断 SETB TR0;启动T0 SJMP$;等待中断,中断服务程序;ORG 0300HT0INT:CPL P1.0;P1.0取反 MOV TH0,#0D8H;重新装入定时

34、初值 MOV TL0,#0CCH RETI注:SETB ET0;设置T0允许中断 SETB EA;CPU开中断这两条指令可以等效为 MOV IE,#82H。,Flash,(三)工作方式2,工作方式寄存器TMOD中的M1M0为:10 定时器T0在工作方式2时,16位的计数器分成了两个独立的8位计数器TH0和TL0。此时,定时器T0构成了一个能重复置初值的8位计数器。其中,TL0用作8位计数器,TH0用来保存计数的初值。每当TL0计满溢出时,自动将TH0的初值再次装入TL0。,工作在定时方式 定时时间(28 计数初值)晶振周期12或 定时时间(28 计数初值)机器周期若晶振频率为12MHz,则最短

35、定时时间为28(281)(1/12)10-6121 s,最长定时时间为(280)(1/12)10-612256s 工作方式2常用于重复定时计数,省去了方式0、方式1重新装入初值的麻烦。工作在计数方式 工作方式2与工作方式0、方式1的差别,在于工作方式2是一个8位的计数器。计数工作方式时,最大计数值为28=256(个外部脉冲),例2.7 利用T0方式2实现以下功能:当T0(P3.4)引脚每输入一个负脉冲时,使P1.0输出一个500s的同步脉冲。设晶振频率为6MHz,请编程实现该功能。其波形如图所示。,(1)确定工作方式 首先选T0为方式2,外部事件计数方式。当P3.4引脚上的电平发生负跳变时,T

36、0计数器加1,溢出标志TF0置1;然后改变T0为500s定时工作方式,并使P1.0输出由1变为0。T0定时到产生溢出,使P1.0引脚恢复输出高电平。T0先计数,后定时,分时操作。根据题目要求方式控制字TMOD是:计数时:(TMOD)=0000 0110B=06H定时时:(TMOD)=0000 0010B=02H,(2)计算初值机器周期T=12fosc=12/6MHZ=2s计数时:计数个数 X=1计数初值=(256X)=(2561)=255=0FFH,(TH0)=(TL0)=0FFH定时时:计数个数X=T/Tm=500s2s=250定时初值=256X=256250=6,(TH0)=(TL0)=0

37、6H,(3)编程方法采用查询方法START:MOV TMOD,#06H;T0方式2,外部计数方式 MOV TH0,#0FFH;T0计数初值 MOV TL0,#0FFH SETB TR0;启动T0计数LOOPl:JBC TF0,PTF01;查询T0溢出标志,TF01时转移,且TF00(查P3.4负跳变)SJMP LOOPl,PTF01:CLR TR0;停止计数 MOV TMOD,#02H;T0方式2,定时 MOV TH0,#06H;T0定时500s初值 MOV TL0,#06H CLR P1.0;P1.0清0 SETB TR0;启动定时500sLOOP2:JBC TF0,PTF02;查询溢出标志

38、,定时到TF0=l 转移,且TF00(第1个500s到否?)SJMP LOOP2PTF02:SETB P1.0;P1.0置1(500s到)CLR TR0;停止计数 SJMP START,Flash,(四)工作方式3 T0分为两个独立的8位计数器TL0和TH0。TL0可以作为8位定时器或外部事件计数器,TH0被固定为一个8位定时器方式。,图2.9 定时器/计数器0方式3的逻辑结构图,Flash,工作方式寄存器TMOD中的M1M0为:11工作方式3仅对定时器T0有效。当定时器T0工作在方式3时,将16位的计数器分为两个独立的8位计数器TH0和TL0。当定时器T0工作在方式3时,定时器T1只能工作在

39、方式02,并且工作在不需要中断的场合。在一般情况下,当定时器T1用作串行口波特率发生器时,定时器T0才设置为工作方式3。此时常把定时器T1设置为方式2,用作波特率发生器。,例2.8 设某用户系统中已使用了两个外部中断源,并置定时器T1工作在方式2,作串行口波特率发生器用。现要求再增加一个外部中断源,并由P1.0引脚输出一个5kHz的方波。fosc=12MHz。,(1)确定工作方式T0方式3下,TL0作计数用,而TH0可用作8位的定时器,定时控制P1.0引脚输出5kHz的方波信号。T1为方式2,定时。TMOD是:0010 0111B=27H(2)计算初值TL0初值:FFH,TH0初值X0计算如下

40、:P1.0的方波频率为5kHz,故周期T1/(5kHz)=0.2ms=200s用TH0定时100s时,X0(256100)1212=156,MOV TMOD,#27H;T0为方式3,计数;T1为方式2,定时 MOV TL0,#0FFH;置TL0计数初值 MOV TH0,#156;置TH0计数初值 MOV THl,#data;data是根据波特率要求设置的常数 MOV TLl,#data MOV TCON,#55H;外中断0,外中断1边沿触发,启动T0,T1 MOV IE,#9FH;开放全部中断:TL0溢出中断服务程序(由000BH转来)TL0INT:MOV TL0,#0FFH;TL0重赋初值(

41、中断处理)RETI TH0溢出中断服务程序(由001BH转来)TH0INT:MOV TH0,#156;TH0重新装入初值 CPL P1.0;输出波形 RETI,计数器初值的计算(1)工作方式0:M=213=8192。(2)工作方式1:M=216=65 536。(3)工作方式2:M=28=256。(4)工作方式3:M=28=256。这样,在计数器模式和定时器模式下,计数初值都是X=M-C(计数值,十六进制数)。定时器初值的计算 定时器模式下对应的定时时间为 T=CTm=(M-X0)Tm 式中,Tm为单片机的机器周期(Tm为晶振时钟周期的12倍)。,四、定时器/计数器2 定时器/计数器2是一个16

42、位定时器/计数器,是定时器或外部事件计数器。定时器2有三种操作方式:捕获方式、自动重装方式和波特速率发生器方式。工作方式由T2CON的控制位选择。1定时器/计数器2控制寄存器T2CONT2CON可位寻址,地址为0C8H。,TF2:定时器/计数器2溢出标志位。当定时器/计数器2溢出时,TF2置1,TF2置位后只能用软件清除。当RCLK=1或TCLK=1时,TF2将不被置位。EXF2:在捕捉/重装模式下,T2的外部触发标志。当EXEN2=1时,引脚T2EX/P1.1的负跳变,使EXF2=1,并产生T2中断。EXF2只能用软件清除。当DCEN=1时,T2处于向上/向下计数模式,EXF2不引起中断。R

43、CLK:接收时钟允许。当RCLK=1时,T2的溢出脉冲可作为串行口方式1和方式3的接收时钟;当RCLK=0时,T1的溢出脉冲将作为串行接收时钟。,C/:定时器/计数器2工作方式选择位。C/0,为定时工作方式;C/1,为计数工作方式。CP/:T2捕捉/重装功能选择位。当CP/=1且EXEN2=1时,引脚T2EX/P1.1的负跳变引起捕捉操作。当CP/=0且EXEN2=1时,引脚T2EX/P1.1的负跳变引起自动重装操作。当CP/=0且EXEN2=1时,T2溢出将引起捕捉自动重装操作。,TCLK:发送时钟允许。当TCLK=1时,T2的溢出脉冲可作为串行口方式1和方式3的发送时钟;当TCLK=0时,

44、T1的溢出脉冲将作为串行发送时钟。EXEN2:T2外部允许。当EXEN2=1时,T2EX的负跳变引起T2捕捉或重装,此时T2不能用做串行口的串行时钟。当EXEN2=0时,T2EX的负跳变将不起作用。TR2:T2启动控制位。当TR2=1时,启动T2;TR2=0时,停止T2。,2定时器/计数器2模式寄存器T2MODT2MON不可位寻址,地址为0C9H。,T20E:定时器2输出允许位。当T20E=1时,允许时钟输出至引脚T2/P1.0;当T20E=0时,禁止引脚T2/P1.0输出。DCEN:计数器方向控制。当DCEN=0时,T2自动向上计数;当DCEN=1时,T2向上/向下计数方式,由引脚T2EX状

45、态决定计数方向。,3定时器/计数器2操作方式选择,例题:AT89S52单片机晶振频率为6MHz,设有一重复周期为20ms的低频脉冲信号由引脚T0/P3.4引入,要求该引脚每发生一次负跳变,P1.0端输出一个10ms脉宽的同步负脉冲;同时P1.1输出一个15ms的同步正脉冲。其波形如图所示。,解:分析思路:(1)将定时器/计数器0作为方式2计数功能,初值为FFH,外部脉冲由P3.4口负跳变一次,便发生一次溢出,TF0置1。(2)改变定时器/计数器0为500 s的定时方式,初值为06H,并且使P1.0=0,P1.1=1。通过循环20次,延时10ms后,再使P1.0=1。(3)定时器0继续延时,再循

46、环10次,延时5ms,随后使P1.1=0,定时器0再恢复到计数状态。,程序如下:ORG 1000HSTART4:SETB P1.0;P1.0为高电平 CLR P1.1;P1.1为低电平LOOPA:MOV TCON,#00H MOV TMOD,#06H;T0为计数方式2 MOV TH0,#0FFH;计数一次就溢出 MOV TL0,#0FFH SETB TR0;启动T0,LOOPB:JBC TF0,LOOPC;检测到溢出就跳转 SJMP LOOPBLOOPC:CLR TR0 MOV TMOD#02H;T0为定时方式2 MOV TH0,#06H;置T0初值,延时500s MOV TL0,#06H M

47、OV R5,#14H;置循环20次 CLR P1.0;P1.0为低 SETB P1.1;P1.1为高 SETB TR0;启动T0LOOPD:JBC TF0,LOOPE;检测500 s定时到?SJMP LOOPD,LOOPE:DJNZ R5,LOOPD;延时10ms SETB P1.0;P1.0为高 MOV R5,#0AH;循环10次LOOPF:JBC TF0,LOOPG;检测500s定时到 SJMP LOOPFLOOPG:DJNZ R5,LOOPF;延时5ms CLR P1.1;P1.1为低 CLR TR0 SJMP LOOPA END,第三部分 项目实施,一、硬件电路,二、软件1.计数器初值

48、计算 在系统初始化时需要将计数器的初值写入TL0和TH0中,如果使用模式0或模式1,当计数器发生溢出后,还要重新将初值写入TL0和TH0中。改变重装入时的TH0和TL0的值就可以改变定时器的定时时间,也就改变了流水灯的流动速度。设定TH0、TL0初值,每按一次按键增加一级速度加快一挡。,2.系统程序(1)流水灯控制 在此之前的各模块中,为了定时都采用了空循环的方法,这种方法浪费了大量的CPU工作时间。在单片机中一般采用定时计数器组成一个定时器来完成这种定时工作。使用定时器后系统的程序框图如图1所示。由于每当定时时间到产生中断后显示控制工作进行一次,所以可以将显示控制工作放在定时中断里完成。这样

49、主程序只需要完成定时计数器和中断的初始化工作即可结束。,图2-10 使用定时器后系统的程序框图,任务分析:一个阶梯为0.2秒,采用定时中断,时基为0.05秒。,内存分配50H=04H,4 0.05秒=0.2秒的阶梯长51H用于按键次数计数器,值从110,52H单元作为步长,53H单元作为定时中断计数器,当53H单元内容和52H单元内容相等,左移一次,55H显示内容,ORG 0000H LJMP START ORG 000BH LJMP CTCS ORG 0013H LJMP KEYS ORG 0100HSTART:MOV SP,#50H;设置堆栈指针 MOV TMOD,#01H;设置定时计数器

50、0工作模式 MOV TL0,#0B0H;设置定时计数器0的初值 MOV TH0,#0CH MOV 50H,#04H,MOV 51H,#00H MOV 53H,#00 SETB TR0;启动定时计数器 SETB EA;允许总中断 SETB ET0;允许定时计数器0中断 SETB EX1 SETB IT1 MOV XS,#0FEH;设置显示控制字初值 SJMP$;主程序停止在本指令,KEY EU P3.3 XS EU 55H,;定时中断子程序,ORG 0200HCTCS:PUSH PSW;保护现场PUSH ACCMOV TL0,#0B0H;恢复定时计数器初值MOV TH0,#0CHINC 53HM

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号