51单片机定时器使用

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 //P1 0脚接LED小灯 sbit led=P1^0;

//定义延时函数,循环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); }

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4