×
单片机 > 单片机程序设计 > 详情

52单片机Timer2的中断应用

发布时间:2020-05-28 发布时间:
|
/* This file is an example to use timer2 in mode 0 此程序用于定时器2模式0*/

 #define MSB_reload_value 0x36 
/* msb reload value exemple 高位重载值:延时60ms*/ 

#define LSB_reload_value 0x36 
/* lsb reload value exemple 低位重载值*/

 #include "reg_c51.h"                //当前文件夹内的文件 

/* 
   * FUNCTION_PURPOSE: This file set up timer 2 in mode 0 (16 bits auto-reload up/down counting timer). 
   * 用于模式0: 16位自动重载 向上/下计时 
   * The 16-bits register consist of all 8 bits of TH2 and all 8 bits of TL2. 
   * 16位寄存器由8位的TH2 和8位的TL2组成 
   * The EXF2 bit toggles when timer2 overflow or underflow occurs. 
   * 当timer2向上/下溢出时,置位EXF2位 
   * EXF2 does not generate interrupt. This bit can be used to provide 17-bit resolution 
   * FUNCTION_INPUTS: P1.1(T2EX)=0 for down counting or 1 for up counting. 
   * EXF2位并不引起中断。此位可以用来提供17位输入功能:向上/下计数功能 
   * FUNCTION_OUTPUTS: void
*/

void main(void) 

    T2MOD &= 0xFC;                        /* T2OE=0;定时器2输出不允许 */ 
    T2MOD |= 0x01;                          /* DCEN=1;可以设置为向上/下计数:此程序中为向上达到0xff时溢出*/
     EXF2 = 0;                                   /* reset flag 定时器2外部标志位清除*/ 
    TCLK = 0;  RCLK = 0;                 /* disable baud rate generator 不用于波特率发生器*/ 
    EXEN2 = 0;                                  /* ignore events on T2EX 视T2EX(P1.1)端信号无效*/ 
    TH2 = MSB_reload_value;          /* Init msb_value 填入初始化值*/ 
    TL2 = LSB_reload_value;           /* Init lsb_value */ 
    RCAP2H = MSB_reload_value;   /* reload msb_value重载值 */
    RCAP2L = LSB_reload_value;    /* reload lsb_value */ 
    C_T2 = 0;                                    /* timer mode 定时模式*/ 
    CP_RL2 = 0;                                /* reload mode 重载模式*/ 
    EA = 1;                                         /* interupt enable 中断允许*/
    ET2 = 1;                                       /* enable timer2 interrupt 允许T2中断*/ 
    TR2 = 1;                                       /* timer2 run 开始计时*/ 
    while(1);                                       /* endless */ 

/* 
   * FUNCTION_PURPOSE: timer2 interrupt 
   * FUNCTION_INPUTS: void 
   * FUNCTION_OUTPUTS: P1.2 toggle period = 2 
   * (65536-reload_value) cycles 
*/ 
void it_timer2(void) interrupt 5 
/* interrupt address is 0x002b 定时器2中断向量入口*/ 
    P0_2 = ~P0_2;                             /* P1.2 toggle when interrupt. 中断时取反*/ 
    TF2 = 0;                                       /* reset interrupt flag 复位中断标志位*/ 
}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址