返回主页 单片机教程XL2000开发板 单片机学习 自制编程器 单片机资料 软件下载 电子技术产品介绍如何购买 进入论坛

第一页  第二页  第三页  第四页

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;       程序结束