51单片机定时器使用——小灯闪烁
一、定时器工作方式设置TMOD=0x01 GATE =0 由TR=1控制开始计时; C/ T=0 作为定时时器使用; M1=0\\M0=1 用作16位定时器
二、计数寄存器TH0\\TL0初始值计算如定时0.02秒 普通51单片机12T模式:
(一)手工计算 例如 晶振为10.6850MHZ 定时20毫秒
X/10.6850*1000000*12=20毫秒 X=17808 原始值T0=Y Y+17808=65536 Y=47728
利用科学计算器进行16进制转换为0Xb800 TH0=0x80 TL0=0x00 (二)单片机公式计算
T1MS=(65536-1068500/12/1000) //计算定时1ms所需要定时的计数值 TL0=T1MS;//初始化定时的计数初值(第8位),高8位丢失 TH0=T1MS>>8;//将这个数右移8位,将高8位移至第8位的位置, (三)启动定时器(TR0=1),判断是否溢出(If(TF0==1){//}),时间到。
(四)闪烁的小灯代码 #include
//定义延时函数,循环cs次,时间长为20*cs毫秒 void delay20(unsigned int cs) {
unsigned int shuL=0; TMOD=0x01;
//初始值根据单片机时钟频率计算 TH0=0xB8; TL0=0x00; //启动定时器 TR0=1;
while(shuL<=cs) {
if(TF0==1)
//查询是否溢出,溢出后复位溢出标志,赋初始值,循环计数加。{TF0=0; TH0=0xBA; TL0=0x70; shuL=shuL+1; } } }
void main()
{
delay20(500);
//小灯取反,亮500*20毫秒,即10秒; led=~led; delay20(500); }