4.1.5 定时器应用举例---51系列单片机设计实例教程 例1 试设定定时器/计数器T0为计数方式2,当T0引脚出现负跳变时,向CPU申请中断。 解:当T0引脚出现负跳变时,申请中断,可设初值为0FFH,当第一个低电平来时,即发出溢出中断申请。程序如下: ORG 0000H;主程序入口地址 LJMP MAIN;跳至MAIN执行 0RG 00BH;定时器T0溢出中断服务程序入口地址 LJMP LNTT0;跳至中断服务程序INTT0执行 MAIN: MOV TMOD,#06H;T0为8位自动重装初值计数器 MOV TLO,#0FFH;初值为#0FF MOV THO,#OFFH; SETB ETO;允许T0溢出中断 SETB EA;总中断允许开放 SETB TRO;开启定时器 AJMP $;等待 INTTO:CLR ETO;关定时器TO中断 ;处理程序 SETB ETO;允许TO中断 END;程序结束 例2 如图4.7所示,利用TO在P1.0端口产生500Hz的方波对称脉冲(12MHz晶振)。 图4.7 产生500Hz的方波对称脉冲 解:设TO为16位定时器模式,利用查询法设计程序,溢出周期为1ms,初值TC=65 536-1 000=64 536=FC18H。程序如下: ORG OOOOH LJMP MAIN MAIN:MOV TMOD,#01H;设TO为16位定时器模式 MOV TLO,#18H;赋初值 SETB TRO; 开启定时器 LOOP:JBC TFO,CPLP;TFO为1,转CPLP并将TFO清为O AJMP LOOP;转LOOP再循环等待 END;结束 例3 如图4.8所示,如果要在例2中产生周期为3ms、占空比为1:2的脉冲波,应该怎样修改程序? 图4.8 产生周期为3ms,占空比为1:2的脉冲波 解:可在程序中加入P1.0端口的状态判断,当p1.0为高电平时,需溢出两次才对端口取反。程序如下: ORG OOOOH LJMP MAIN MAIN:MOV TMOD,#01H;TO为16位定时器模式 MOV TLO,#18H;定时器赋初值 MOV THO,#OFCH;定时器赋初值 MOV R2,#02H;R2赋初值 SETB TRO; 开启定时器 LOOP:JBC TFO,CPLP;TFO为1(定时时间到),转CPLP并将TFO清为O AJMP LOOP; TF0为0则转LOOP再循环等待 CPLP:MOV TLO,#18H;定时器重装初值 MOV THO,#OFCH;定时器重装初值 JB P1.0,CPLP;P1.0口为1则转CPLP1 CPL P1.0; P1.0口为0,则取反(变1) MOV R2,#02H; R2重赋初值 AJMP LOOP; 转LOOP等待定时时间到 END; 程序结束 |