例子001、51单片机定时器训练
下面是一份基本的 51 定时器控制代码#include <reg52.h> // 8051 头文件
// 定义时钟频率为 12MHz #define FOSC 12000000UL // 定义波特率为 9600 #define BAUDRATE 9600 // 定义定时器重装值 #define TIMER_RELOAD_VALUE 65535-50000+1 sbit LED=P1^0; // 定义 LED 灯连接的端口 // 初始化定时器0 void Init_Timer0() { TMOD |= 0x01; // 将定时器0工作方式设置为模式1 TH0 = TIMER_RELOAD_VALUE / 256; // 计算定时器重装值的高8位并赋值 TL0 = TIMER_RELOAD_VALUE % 256; // 计算定时器重装值的低8位并赋值 EA = 1; // 开启全局中断 ET0 = 1; // 开启定时器0中断 TR0 = 1; // 开启定时器0 } // 定时器0中断处理函数 void Timer0_ISR() interrupt 1 { TH0 = TIMER_RELOAD_VALUE / 256; // 计算定时器重装值的高8位并赋值 TL0 = TIMER_RELOAD_VALUE % 256; // 计算定时器重装值的低8位并赋值 LED = ~LED; // LED 灯取反 } // 主函数 void main() { Init_Timer0(); // 初始化定时器0 while(1); // 保持程序运行 }
这份代码中,我们使用定时器0来控制 LED 灯的闪烁。定时器的工作方式被设置为模式1,并且每次重装时赋值为TIMER_RELOAD_VALUE
,即计算出的定时时间。开启定时器0中断后,每当定时器0计数到TIMER_RELOAD_VALUE
时,会触发中断处理函数Timer0_ISR()
,在其中将计数值重新赋为TIMER_RELOAD_VALUE
并将 LED 灯进行取反操作。
在你的具体应用中,你可以根据需要更改定时时间和控制操作。
标签:重装,定时器,LED,UAV2105,UAV2101,TIMER,RELOAD,VALUE From: https://www.cnblogs.com/yilangUAV/p/17892742.html