版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
AT89S52单片机中断与定时
单元3学习目标:了解中断的基本概念、中断的作用及中断请求方式掌握AT89S52单片机中断结构,6个中断源的中断请求、中断屏蔽、优先级设置等初始化编程方法掌握定时/计数器4种工作方式的初始化编程方法学会使用定时器/计数器编写计数、定时应用程序的方法技能目标:会编写中断和定时/计数器初始化程序会计算定时/计数器初值根据项目要求,能够灵活应用中断和定时/计数器的资源项目一中断控制的流水灯第一部分
项目要求采用中断方法控制灯的亮灭,由中断服务程序控制I/O口置高,置低,即可控制灯的全亮和全灭。外部中断INT1接按键(KEY),作为中断申请信号,开机后8个发光二极管从左到右流水,产生中断后,8个发光管全亮、全灭,延时一定时间后,再循环。第二部分相关知识
一、中断的概念中断的定义:
当中央处理器CPU正在处理某事件时外界发生了更为紧急的请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完毕后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。
从中断的定义我们可以看到中断应具备中断源、中断响应、中断返回三个要素。中断源发出中断请求,单片机对中断请求进行响应,当中断响应完成后应进行中断返回,返回被中断的地方继续执行原来被中断的程序。二、AT89S52中断源与中断向量地址中断源就是向CPU发出中断请求的来源。AT89S52共有六个中断源:2个外部中断(INT0和INT1)、3个定时器中断(定时器0、1和2)和1个串行中断。如图所示。(一)外部中断外部中断0←→
P3.2外部中断1←→
P3.3外部中断请求有两种信号方式:电平方式和脉冲方式。电平方式的中断请求信号是低电平有效。脉冲方式的中断请求信号则是脉冲的负跳变有效。(二)内部定时和外部计数中断定时:对内部振荡器输出的脉冲计数。计数脉冲的个数反映了时间的长短。计数:对外部脉冲计数。计数脉冲的个数仅仅反映外部脉冲输入的多少。外部脉冲由T0引入←→P3.4外部脉冲由T1引入←→
P3.5外部脉冲由T2引入←→
P1.0当定时器/计数器发生溢出,便激活中断。外部计数中断请求信号是脉冲的负跳变引起。(三)串行中断串行中断是为串行通信的而需要设置的。当串行口发送完或接收完一帧信息时,单片机内部硬件便自动串行发送或接收中断标志位置1。当CPU查询到这些标志位为1时,便激活串行中断。串行中断是由单片机内部自动发生的,不需要在芯片外设置引入脚。(四)中断矢量地址中断源中断标志位中断矢量地址外部中断0(
)IE00003H定时器0(T0)中断TF0000BH外部中断1()IE10013H定时器1(T1)中断TF1001BH串行口中断发送中断TI0023H接收中断RI定时器2(T2)中断T2溢出中断TF2002BHT2EX中断EXF2三、中断标志与控制
要实现中断,首先中断源要提出中断申请,而中断请求的过程是单片机内部特殊功能寄存器TCON和SCON相关状态位—中断请求标志位置1的过程,当CPU响应中断时,中断请求标志位才由硬件或软件清0。图3-3(一)定时器/计数器控制寄存器TCONTCON为定时器/计数器的控制器,它也锁存外部中断请求标志,其格式如下:TF1TR1TF0TR0IE1IT1IE0IT0TCON(88H)D7D6D5D4D3D2D1D0位地址8FH8EH8DH8CH8BH8AH89H88H与中断有关的控制位共6位IE0和IE1:外部中断请求标志。当CPU采样到(或)端出现有效中断请求(低电平或脉冲下降沿)时,IE0(或IE1)位由片内硬件自动置1;当中断响应完成转向中断服务程序时,由片内硬件自动清0。IT0和ITl:外部中断请求信号触发方式控制标志。IT0(或IT1)=1,(或)信号为脉冲触发方式,脉冲负跳沿有效;IT0(或IT1)=0,(或)信号电平触发方式,低电平有效。IT0(或IT1)位可由用户软件置1或清0TF0和TFl:定时器/计数器溢出中断请求标志。当定时器0(或定时器1)产生计数溢出时,TF0(或TF1)由片内硬件自动置1;当中断响应完成转向中断服务程序时,由片内硬件自动清0。计数溢出标志位的使用有两种情况:采用中断方式时,作中断请求标志位来使用;采用查询方式时,作查询状态位来使用。(二)串行口控制寄存器SCONSM0SM1SM2RENTB8RB8
TIRISCON(98H)D7D6D5D4D3D2D1D0位地址9FH9EH9DH9CH9BH9AH99H98H与中断有关的控制位共2位TI:串行口发送中断请求标志。当串行口发送完一帧信号后,由片内硬件自动置1。但CPU响应中断时,并不清除TI,必须在中断服务程序中由软件对TI清0。RI:串行口接收中断请求标志。当串行口接收完一帧信号后,由片内硬件自动置1。但CPU响应中断时,并不清除RI,必须在中断服务程序中由软件对其清0。应当指出,AT89S52系统复位后,TCON和SCON中各位被复位成“0”状态,应用时要注意各位的初始状态。(三)中断允许控制寄存器IEEA——ET2ESET1EX1
ET0EX0IE(A8H)D7D6D5D4D3D2D1D0位地址AFHAEHADHACHABHAAHA9HA8H与中断有关的控制位共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,禁止定时器2(TF2或EXF2)中断;ET2=1,允许定时器2(TF2或EXF2)中断;在单片机复位后,IE各位被复位成“0”状态,CPU处于关闭所有中断的状态。例如:可以采用如下字节传送指令来开放定时器T0的溢出中断:
MOVIE,#82H
也可以用位寻址指令,则需采用如下两条指令实现同样功能:
SETBEASETBET0
在89S52复位后,IE各位被复位成“0”状态,CPU处于关闭所有中断的状态。所以,在89S52复位以后,用户必须通过程序中的指令来开放所需中断。(四)中断优先级控制寄存器IP89S52单片机具有高、低2个中断优先级。高优先级用“1”表示,低优先级用“0”表示。对于所有的中断源,均可由软件设置为高优先级中断或低优先级中断,并可实现两级中断嵌套。IP寄存器可以位寻址。PSPT2PT1PX1PT0PX0IP(B8H)D7D6D5D4D3D2D1D0BDHBCHBBHBAHB9HB8H
与中断有关的控制位共6位
PX0:外部中断0优先级设定位。
PT0:定时器0(T0)优先级设定位。
PXl:外部中断1优先级设定位。
PTl:定时器1(T1)优先级设定位。
PS:为串行口优先级设定位。
PT2:为定时器2优先级设定位。可用软件对IP的各位置1或清0
例如CPU开中断可由以下两条指令来实现:
SETB0AFH;EA置1
或0RLIE,#80H;按位“或”,EA置1CPU关中断可由以下两条指令来实现:
CLR0AFH;EA清0
或ANLIE,#7FH;按位“与”,EA清0
又如设置外部中断源为高优先级,外部中断源为低优先级,可由下面指令来实现:
SETB0B8H;PX0置1CLR0BAH;PXl清0
或MOVIP,#000××0×1B;PX0置1,PXl清0
四、优先级结构中断优先级只有高低两级。所以在工作过程中必然会有两个或两个以上中断源处于同一中断优先级。若出现这种情况,内部中断系统对各中断源的处理遵循以下两条基本原则:①低优先级中断可以被高优先级中断所中断,反之不能。②一种中断(不管是什么优先级)一旦得到响应,与它同级的中断不能再中断它。中断源同级自然优先级外部中断0最高级定时器0中断↓外部中断1┆
定时器1中断↓串行口中断最低级定时器2中断最低级
例:设89S52的片外中断为高优先级,片内中断为低优先级。试设置IP相应值。解:(a)用字节操作指令
MOVIP,#05H
或MOV0B8H,#05H(b)用位操作指令
SETBPX0SETBPX1CLRPSCLRPT0CLRPT1
五、中断系统的初始化及应用(一)中断系统的初始化
(1)CPU开中断或关中断;
(2)某中断源中断请求的允许或禁止(屏蔽);
(3)设定所用中断的中断优先级;
(4)若为外部中断,则应规定低电平还是负边沿的中断触发方式。
例请写出为低电平触发的中断系统初始化程序。解:(1)采用位操作指令
SETBEA;CPU开中断
SETBEXl;开中断
SETBPXl;令为高优先级
CLRITl;令为电平触发
(2)采用字节型指令
MOVIE,#84H;开中断
ORLIP,#04H;令为高优先级
ANLTCON,#0FBH;令为电平触发(二)中断系统的应用
中断管理与控制程序一般包含在主程序中,根据需要通过几条指令来实现,例如CPU开中断,可用指令“SETBEA”或“ORLIE,#80H”来实现,关中断可用指令“CLREA”,或“ANLIE,#7FH”来实现。
中断服务程序的一般格式:
ORGADDRESSAJMPINTVS┇INTVS:CLREA;关中断
PUSHPSW;保护现场
PUSHA┇SETBEA;开中断,允许CPU响应高级中断┇
中断服务
┇
CLREA;关中断
POPA;恢复现场
POPPSW┇SETBEA;开中断
RETI;中断返回编写此程序应注意以下几点:(1)为了要跳到用户设计的中断服务程序,在相应入口地址安排一条跳转指令;(2)在中断服务程序的末尾,安排一条返回指令RETI;(3)由于在响应中断时,CPU只自动保护断点,所以CPU的其他现场(如寄存器A、B状态,状态字PSW,通用寄存器R0、R1等)的保护和恢复也必须由用户在中断服务程序中安排;(4)在此多级中断的中断服务程序中,保护现场之后的开中断(SETBEA)是为了允许有更高级中断打断此中断服务程序,恢复现场和保护现场之前的关中断(CLREA)是为了保证在恢复和保护现场时,CPU不响应新的中断请求,从而使现场数据不受到破坏或者造成混乱;(5)当把程序中保护现场之后的"SETBEA"和恢复现场之前的"CLREA"删除,就是一个单级中断服务程序。(三)中断程序举例
【例3.3】使用一个按键控制图3.4所示的流水灯,每按一次按键流水灯的流动方向改变一次,要求使用中断技术处理按键。解:如图3.4所示,按键接在P3.3,因此采用外部中断1,中断申请从输入。每按一次按键,产生一次中断,流水灯流动方向便改变一次。当开关SA17闭合时,发出中断请求。中断服务程序的矢量地址为0013H。图3.4方向可控流水灯ORG0000H ;定义下一条指令的地址
LJMPSTART;转向主程序
ORG0013H ;安排外部中断1处理程序的第一条指令
LJMPKEYS;直接转移到中断处理程序
ORG0100H;主程序起点
START:MOVSP,#70H;设置堆栈栈底指针
SETBIT1 ;设置外部中断1的中断方式为下降沿中断
SETBEX1 ;开放外部中断1SETBEA ;开放总中断
MOV A,#01H;#01H送累加器AL1:MOV P2,A ;累加器A中内容送P2口
MOV R7,#0FFH;延时
L3:MOV R6,#0FFH L2:DJNZR6,L2DJNZR7,L3 JNBFX,L4;FX=0时转移到L4(FX是流水灯流动方向标志)
RLA;累加器A中内容左移一位
SJMPL5;转移至L5L4:RRA;累加器A中内容右移一位
L5:SJMPL1;转移至L1;按键中断程序
;入口:外部中断1;功能:确认按键后改变方向标志FX的状态
ORG0300H ;中断处理程序入口
KEYS:MOV R7,#20H ;首先延时去抖
K1:MOV R6,#0FFHDJNZR6,$DJNZR7,K1JBKEY,K2;延时完成后再检测按键
CPLFX;确认按键按下,改变方向标志位状态
K2:RETI;中断结束返回
KEYBITP3.3 ;定义按键变量
FX BIT00H;定义位变量,用于判断方向
END ;结束
第三部分项目实施
一、项目实施分析
(一)硬件电路
P1口连接8个发光二极管,外部中断INT1接KEY(P2.7接按键SW8,P3.3接KEY),作为中断申请信号,开机8个发光二极管从左到右流水,产生中断后,8个发光管全亮、全灭,延时后,再循环。如图3.5所示。参考程序:
ORG0000h;伪指令
LJMPSTART;跳转到单片机的主程序
ORG0013H;外部中断1的入口地址
LJMPEXT1;跳转到中断服务程序
ORG0100H;伪指令,单片机主程序的开始START:MOVIE,#10000100bMOVIP,#00000100bMOVTCON,#00000000b;定时器初始化
MOVSP,#40HMOVP1,#0FFHMOVP2,#00HMOVP3,#0FFH;设置 P1、P2、P3口状态LOOP:MOVA,#0FFHCLRCMOVR2,#08HLOOP1:RLCAMOVP1,ALCALLDELAYDJNZR2,LOOP1JMPLOOP;小灯循环点亮EXT1:PUSHACC;中断服务程序
PUSHPSWMOVA,#00H;小灯全亮
MOVR3,#0AHLOOP2:MOVP1,ALCALLDELAYCPLADJNZR3,LOOP2POPPSWPOPACCRETIDELAY:MOVR5,#20;延时程序D1:MOVR6,#20D2:MOVR7,#248DJNZR7,$DJNZR6,D2DJNZR5,D1RETEND项目二速度可控流水灯第一部分
项目要求将8个发光二极管从左到右流水灯循环显示,通过按键改变循环的速率,最小为0.2秒,最大为2秒,即流水灯的流动速度分为10级,使用按键控制流动速度。每按一次按键流水灯的流动速度改变1级。按一次按键,速度增加一级,逐步增加,增加到最高速度后,再循环。采用定时器T0,方式1,定时器定时时基是0.05秒。
第二部分相关知识AT89S52单片机内部有三个16位可编程的定时器/计数器,T0、T1和T2。它们既可用作定时器方式,又可用作计数器方式,且都有4种工作方式可供选择。但T0、T1与T2的4种工作方式不同。
一、定时器/计数器结构与功能定时器0,定时器1是16位加法计数器,分别由两个8位专用寄存器组成:定时器0由TH0和TL0组成,定时器1由TH1和TL1组成。见图。图3.6定时器/计数器结构框图
1.计数功能计数方式时,T的功能是计来自T0(P3.4)、T1(P3.5)的外部脉冲信号的个数。
输入脉冲由1变0的下降沿时,计数器的值增加1直到回零产生溢出中断,表示计数已达预期个数。脉冲的计数长度与计数器预先装入的初值有关。初值越大,计数长度越小;初值越小,计数长度越大。最大计数长度为65536(216)个脉冲(初值为0)。2.定时方式定时方式时,T记录89S52内部振荡器输出的脉冲(机器周期信号)个数。
每一个机器周期使T0或T1的计数器增加1,直至计满回零自动产生溢出中断请求。定时器的定时时间不仅与计数器的初值即计数器的长度有关,而且还与系统的时钟频率有关。在机器周期一定的情况下,初值越大,定时时间越短;初值越小,定时时间越长。最长的定时时间为65536(216)个机器周期(初值为0)。
定时器/计数器是一种可编程的部件,在其工作之前必须将控制字写入工作方式和控制寄存器,用以确定工作方式,这个过程称为定时器/计数器的初始化。对定时器/计数器进行控制的寄存器共有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(或定时器/计数器1)工作。TR0(或TR1)=1,启动定时器/计数器0(或定时器/计数器1)工作。用指令SETBTR1(或CLRTR1)使TR1置1(或清零)。GATEC/TM1M0GATEC/TM1M0定时器1定时器0其中,低4位用于T0,高4位用于T1。2.工作方式寄存器TMOD(89H) M1、M0:工作方式控制位C/T:计数器/定时器方式选择位C/T=0,为定时方式。C/T
=1,为计数方式。GATE:门控位GATE=0时,只要用软件使TR0(或TRl)置1就可以启动定时器T0(或T1);GATE=1时,只有/INT0(或/INT1)引脚为高电平且由软件使TR0(或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。因此,指令形式为:
MOVTMOD,#10H三、定时器/计数器工作方式与程序设计(一)工作方式0图3.7定时器/计数器0方式0的逻辑结构工作方式寄存器TMOD中的M1M0为:00
方式0为13位的计数器,由TL0的低5位和TH0的8位组成,TL0低5位计数溢出时向TH0进位,TH0计数溢出时,向中断标志位TF0进位(硬件置位TF0),并申请中断。T0是否溢出可查询TF0是否被置位,以产生T0中断。★工作在定时方式
C/T=0。定时器T0工作在定时方式。定时器T0对机器周期计数。
定时器T0在工作前,应先对13位的计数器赋值,开始计数时,在初值的基础上进行减1计数。定时时间的计算公式为:
定时时间=(213–计数初值)×晶振周期×12或定时时间=(213–计数初值)×机器周期若晶振频率为12MHz,则最短定时时间为
[213-(213-1)]×(1/12)×10-6×12=1μs最长定时时间为(213-0)×(1/12)×10-6×12=8192μs★工作在计数方式
C/T=1,定时器T0工作在计数方式。13位计数器对外部输入信号进行加1计数。
当INT0由0变为1时,开始计数;当INT0由1变为0时,停止计数。这样可以测量在INT0端出现的正脉冲的宽度。方式0计数时,最大计数值为
213=8192(个外部脉冲)。例3.5:假设89S52单片机晶振频率为12MHz,要求定时时间8ms,使用定时器T0,工作方式0,计算定时器初值X。解:∵t=(213–X)×机器周期当单片机晶振频率为12MHz时,机器周期=1μs∴8×103=(213–X)×1X=8192-8000=192
转换成二进制数为:11000000B例3.6:利用T0方式0产生1ms的定时,在P1.2引脚上输出周期为2ms的方波。设单片机晶振频率fosc=12MHz。解:(1)解题思路要在P1.2引脚输出周期为2ms的方波,只要使P1.2每隔1ms取反一次即可。执行指令为CPLP1.2。(2)确定工作方式:方式0TMOD=00HD0D1D2D3D4D5D6D7定时器/计数器T1定时器/计数器T0TMODGATEC/TC/TM0M1M0M1GATE(89H)bitC/=0:T0为定时功能;(D2位)GATE=0,只要用软件使TR0(或TR1)置1就能启动定时器T0(或T1);M1M0=00,工作方式0∴TMOD的值为=00HTMOD.4~TMOD.7可取任意值,因T1不用,这里取0值。使用
MOVTMOD,#00H即可设定T0的工作方式。(3)计算1ms定时时T0的初值机器周期T=1/fosc×12=1μs计数个数:X=1ms/lμs=1000设T0的计数初值为x0,则x0=(213一X)
=8192—1000
=7192D转换成二进制数为:1110000011000B
高8位低5位将高8位11100000=0E0H装入TH0
将低5位11000=18H装入TL0(4)编程可采用中断和查询两种方式编写程序。方法一:中断方式
ORG0000H LJMPMAIN;转主程序MAIN ORG000BH
LJMPIT0P;转T0中断服务程序IT0PAFHAEHADHACHABHAAHA9HA8HA8HIEbitEAESET1EX1ET0EX011EA=1,CPU开放中断;ET0=1,允许T0中断;ORG1000HMAIN:MOVSP,#60H;设堆栈指针
MOVTMOD,#00H;设置T0为方式
0,定时
MOVTL0,#18H;送定时初值
MOVTH0,#0E0HSETBEA;CPU开中断
SETBET0;T0允许中断
SETBTR0;启动T0定时HERE:SJMPHERE;等待中断ORG1200H;T0中断入口
IT0P:MOVTL0,#18H;重新装入计数初值
MOVTH0,#0E0H
CPLP1.2;输出方波
RETI;中断返回
END方法二:查询方式
MOVTMOD,#00H;设置T0为方式0,定时
MOVTL0,#18H;送初值
MOVTH0,#0E0H
SETBTR0;启动T0定时LOOP:JBCTF0,NEXT;查询定时时间到否?SJMPLOOPNEXT:MOVTL0,#18H;重新装入计数初值
MOVTH0,#0E0HCPLP1.2;输出方波
SJMPLOOP;重复循环(二)工作方式1方式1为16位的定时器/计数器图3.8定时器/计数器0方式1的逻辑结构图工作方式寄存器TMOD中的M1M0为:01定时器T0工作方式1与工作方式0类同,差别在于其中的计数器的位数。工作方式1以16位计数器参与计数。工作在定时方式
定时时间=(216–计数初值)×晶振周期×12或定时时间=(216–计数初值)×机器周期若晶振频率为12MHz,则最短定时时间为[216-(216-1)]×(1/12)×10-6×12=1μs最长定时时间为(216-0)×(1/12)×10-6×12=65536μs工作在计数方式最大计数值为216=65536(个外部脉冲)Flash
例3.8:假设89S52单片机晶振频率为12MHz,所需定时时间为10ms,当T0工作在方式1时T0计数器的初值是多少?解:∵t=(216–X0)×机器周期当单片机晶振频率为12MHz时,机器周期=1μs∴10×103=(216–X0)×1X=65536-10000=55536转换成二进制数为:1101100011110000B=0D8F0H
例3.9:假设89S52单片机晶振频率为12MHz,定时器T0的定时初值为9800,计算T0工作在方式1时的定时时间。解:∵t=(216–X0)×机器周期当单片机晶振频率为12MHz时,机器周期=1μs∴t=(216–9800)×1t=65536-9800=55736μs例3.10:用定时器T0产生50HZ的方波。由P1.0输出此方波(设时钟频率为12MHZ)。采用中断方式。解:50HZ的方波周期T为T=1/50=20ms20ms
可以用定时器产生10ms的定时,每隔10ms改变一次P1.0的电平,即可得到50HZ的方波。定时器T0应工作在方式1。(1)工作在方式1时的T0初值,根据下式计算:
t=(216–X)×机器周期 时钟频率为12MHz,则机器周期=1µs10×103=(216–X)×1X=65536–10000=55536转换为二进制数:1101100011001100B高8位低8位
高8位=0D8H装入TH0,低8位=0CCH装入TL0。(2)程序
ORG0000H LJMPMAIN ORG000BH ;T0的中断入口地址
LJMPT0INT ORG0100HMAIN:MOVTMOD,#01H
;设置T0为工作方式1MOVTH0,#0D8H
;装入定时器初值
MOVTL0,#0CCHSETBET0 ;设置T0允许中断
SETBEA ;CPU开中断
SETBTR0 ;启动T0SJMP$ ;等待中断中断服务程序;
ORG0300HT0INT:CPLP1.0 ;P1.0取反
MOVTH0,#0D8H
;重新装入定时初值
MOVTL0,#0CCHRETI注:SETBET0 ;设置T0允许中断
SETBEA ;CPU开中断这两条指令可以等效为MOVIE,#82H。Flash图3.9定时器/计数器0方式2的逻辑结构图T0(三)工作方式2工作方式寄存器TMOD中的M1M0为:10
定时器T0在工作方式2时,16位的计数器分成了两个独立的8位计数器TH0和TL0。此时,定时器T0构成了一个能重复置初值的8位计数器。其中,TL0用作8位计数器,TH0用来保存计数的初值。每当TL0计满溢出时,自动将TH0的初值再次装入TL0。工作在定时方式
定时时间=(28–计数初值)×晶振周期×12或定时时间=(28–计数初值)×机器周期若晶振频率为12MHz,则最短定时时间为[28-(28-1)]×(1/12)×10-6×12=1μs最长定时时间为(28-0)×(1/12)×10-6×12=256μs
工作方式2常用于重复定时计数,省去了方式0、方式1重新装入初值的麻烦。工作在计数方式工作方式2与工作方式0、方式1的差别,在于工作方式2是一个8位的计数器。计数工作方式时,最大计数值为28=256(个外部脉冲)【例3.11】利用T0方式2实现以下功能:当T0(P3.4)引脚每输入一个负脉冲时,使P1.0输出一个500μs的同步脉冲。设晶振频率为6MHz,请编程实现该功能。其波形如图所示。(1)确定工作方式首先选T0为方式2,外部事件计数方式。当P3.4引脚上的电平发生负跳变时,T0计数器加1,溢出标志TF0置1;然后改变T0为500μs定时工作方式,并使P1.0输出由1变为0。T0定时到产生溢出,使P1.0引脚恢复输出高电平。T0先计数,后定时,分时操作。根据题目要求方式控制字TMOD是:计数时:(TMOD)=00000110B=06H定时时:(TMOD)=00000010B=02H(2)计算初值机器周期T=12/fosc=12/6MHZ=2μs计数时:计数个数X=1计数初值=(256﹣X)=(256﹣1)=255=0FFH,(TH0)=(TL0)=0FFH定时时:计数个数X=T/Tm=500μs/2μs=250定时初值=256﹣X=256﹣250=6,(TH0)=(TL0)=06H (3)编程方法采用查询方法START:MOVTMOD,#06H
;T0方式2,外部计数方式
MOVTH0,#0FFH;T0计数初值
MOVTL0,#0FFHSETBTR0;启动T0计数LOOPl:JBCTF0,PTF01
;查询T0溢出标志,TF0=1时转移,且TF0=0(查P3.4负跳变)SJMPLOOPlPTF01:CLRTR0;停止计数
MOVTMOD,#02H;T0方式2,定时
MOVTH0,#06H;T0定时500μs初值
MOVTL0,#06HCLRP1.0;P1.0清0SETBTR0;启动定时500μsLOOP2:JBCTF0,PTF02;查询溢出标志,定时到TF0=l转移,且TF0=0(第1个500μs到否?)SJMPLOOP2PTF02:SETBP1.0;P1.0置1(500μs到)CLRTR0;停止计数
SJMPSTARTFlash(四)工作方式3
T0分为两个独立的8位计数器TL0和TH0。TL0可以作为8位定时器或外部事件计数器,TH0被固定为一个8位定时器方式。图3.11定时器/计数器0方式3的逻辑结构图Flash工作方式寄存器TMOD中的M1M0为:11工作方式3仅对定时器T0有效。当定时器T0工作在方式3时,将16位的计数器分为两个独立的8位计数器TH0和TL0。当定时器T0工作在方式3时,定时器T1只能工作在方式0~2,并且工作在不需要中断的场合。在一般情况下,当定时器T1用作串行口波特率发生器时,定时器T0才设置为工作方式3。此时常把定时器T1设置为方式2,用作波特率发生器。例3.12:设某用户系统中已使用了两个外部中断源,并置定时器T1工作在方式2,作串行口波特率发生器用。现要求再增加一个外部中断源,并由P1.0引脚输出一个5kHz的方波。fosc=12MHz。(1)确定工作方式T0方式3下,TL0作计数用,而TH0可用作8位的定时器,定时控制P1.0引脚输出5kHz的方波信号。T1为方式2,定时。TMOD是:00100111B=27H(2)计算初值TL0初值:FFH,TH0初值X0计算如下:∵P1.0的方波频率为5kHz,故周期T=1/(5kHz)=0.2ms=200μs∴用TH0定时100μs时,X0=(256﹣100)×12/12=156
MOVTMOD,#27H
;T0为方式3,计数;T1为方式2,定时
MOVTL0,#0FFH
;置TL0计数初值
MOVTH0,#156
;置TH0计数初值
MOVTHl,#data
;data是根据波特率要求设置的常数
MOVTLl,#data
MOVTCON,#55H
;外中断0,外中断1边沿触发,启动T0,T1
MOVIE,#9FH
;开放全部中断:
TL0溢出中断服务程序(由000BH转来)TL0INT:MOVTL0,#0FFH
;TL0重赋初值(中断处理)
RETITH0溢出中断服务程序(由001BH转来)TH0INT:MOVTH0,#156
;TH0重新装入初值
CPLP1.0
;输出波形
RETI
计数器初值的计算(1)工作方式0:M=213=8192。(2)工作方式1:M=216=65536。(3)工作方式2:M=28=256。(4)工作方式3:M=28=256。这样,在计数器模式和定时器模式下,计数初值都是X=M-C(计数值,十六进制数)。定时器初值的计算定时器模式下对应的定时时间为
T=C·Tm=(M-X0)Tm
式中,Tm为单片机的机器周期(Tm为晶振时钟周期的12倍)。四、定时器/计数器2
定时器/计数器2是一个16位定时器/计数器,是定时器或外部事件计数器。定时器2有三种操作方式:捕获方式、自动重装方式和波特速率发生器方式。工作方式由T2CON的控制位选择。1.定时器/计数器2控制寄存器T2CONT2CON可位寻址,地址为0C8H。位序D7D6D5D4D3D2D1D0位标志TF2EXF2RCLKTCLKEXEN2TR2C/CP/位地址CFCEHCDHCCHCBHCAHC9HC8HTF2:定时器/计数器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不引起中断。RCLK:接收时钟允许。当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时,T1的溢出脉冲将作为串行发送时钟。EXEN2:T2外部允许。当EXEN2=1时,T2EX的负跳变引起T2捕捉或重装,此时T2不能用做串行口的串行时钟。当EXEN2=0时,T2EX的负跳变将不起作用。TR2:T2启动控制位。当TR2=1时,启动T2;TR2=0时,停止T2。2.定时器/计数器2模式寄存器T2MODT2MON不可位寻址,地址为0C9H。位序D7D6D5D4D3D2D1D0位标志——————T20EDCENT20E:定时器2输出允许位。当T20E=1时,允许时钟输出至引脚T2/P1.0;当T20E=0时,禁止引脚T2/P1.0输出。DCEN:计数器方向控制。当DCEN=0时,T2自动向上计数;当DCEN=1时,T2向上/向下计数方式,由引脚T2EX状态决定计数方向。3.定时器/计数器2操作方式选择C/RCLK+TCLKCP/T20ETR2模式X000116位自动重装模式X010116位捕捉模式X1XX1波特率发生器模式X1X11时钟输出模式XXXX0T2停止例题:AT89S52单片机晶振频率为6MHz,设有一重复周期为20ms的低频脉冲信号由引脚T0/P3.4引入,要求该引脚每发生一次负跳变,P1.0端输出一个10ms脉宽的同步负脉冲;同时P1.1输出一个15ms的同步正脉冲。其波形如图所示。P3.4P1.0P1.110ms15ms计数方式初值FFH定时方式初值06H计数方式初值FFH定时方式初值06H解:分析思路:(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继续延时,再循环10次,延时5ms,随后使P1.1=0,定时器0再恢复到计数状态。程序如下:
ORG1000HSTART4:SETBP1.0;P1.0为高电平
CLRP1.1;P1.1为低电平LOOPA:MOVTCON,#00HMOVTMOD,#06H;T0为计数方式2MOVTH0,#0FFH;计数一次就溢出
MOVTL0,#0FFHSETBTR0;启动T0LOOPB:JBCTF0,LOOPC;检测到溢出就跳转
SJMPLOOPBLOOPC:CLRTR0MOVTMOD#02H;T0为定时方式2MOVTH0,#06H;置T0初值,延时500μsMOVTL0,#06HMOVR5,#1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新版商品房包销合同3篇
- 招标文件确认纪要3篇
- 教育培训服务用工合同范例3篇
- 开庭委托书写作要点详解3篇
- 政府跟保险公司合作协议3篇
- 文物流运输招标要求3篇
- 放射性废物管理工程师劳动合同3篇
- 挡土墙建设合同样本3篇
- 携手同行的研学合作协议3篇
- 旅游业客户信息保护3篇
- 中建施工电梯安拆专项施工方案
- 《一年级乐考方案》
- 客运公司企业年度安全培训计划
- 安全行车知识培训
- 浙江省杭州市2023-2024学年高一上学期期末考试物理试题(含答案)5
- 2024年物业管理师(中级四级)考试题库大全-下(判断、简答题)
- 宗教签约合同模板
- 员工三级安全培训试题带答案(达标题)
- 2024年湖南长沙雨花区招聘社区专职工作人员26人历年高频难、易错点500题模拟试题附带答案详解
- 期末检测卷(试题)-2024-2025学年北师大版五年级上册数学
- 2023年人民日报出版社有限责任公司招聘考试试题及答案
评论
0/150
提交评论