/* 测试tim2定时器 说明: *1.系统主频为FRC/2.波形输出引脚:P11 *3.定时模式, 16位定时器定时1ms,中断一次 */ #include #include #include "TM52F1386_bsp.h" #define FRC_HZ 18432000 #define FRC_DIV 2 #define CLK_US 1000 //1ms #define TIME2_RELOAD (unsigned int)(65536-(((FRC_HZ/FRC_DIV)/2/1000)*CLK_US/1000)) //精度更高 /** ************************/ //1:time2 16位自动重载定时器 中断方式 /****************************************************************************************** ** 函数名称: time2_T_init ** 函数描述: time2初始化函数 ** 输入参数: 无 ** 输出参数: 无 *******************************************************************************************/ void time2_T_init() { CT2N = 0; //定时器模式 CPRL2N = 0; //重载模式 TH2 = (TIME2_RELOAD)/256; TL2 = (TIME2_RELOAD)%256; RCP2H=(TIME2_RELOAD)/256; RCP2L=(TIME2_RELOAD)%256; TR2 = 1; ET2 = 1; } /****************************************************************************************** ** 函数名称: main ** 函数描述: main函数 ** 输入参数: 无 ** 输出参数: 无 *******************************************************************************************/ void main(void) { bsp_clock_init(); //选择内部FRC/2为系统时钟 time2_T_init(); PORTIDX = PORT1; PINMOD10 = PINMOD10&0x0F | PIN_H_MODE_PP; //测试引脚:P1.1,设置为推挽输出 EA=1; while(1) { bsp_delay_ms(100); } } /****************************************************************************************** ** 函数名称: time2_irq ** 函数描述: time2中断处理函数 ** 输入参数: 无 ** 输出参数: 无 *******************************************************************************************/ void time2_irq() interrupt 5 { if(TF2) { TF2=0; //除了用作串口的时基外,其他应用必须清零 P1_1 = ~P1_1; //引脚翻转 } }