关于时钟周期,机器周期
寄存器加1经过了多少时间
例如;晶振频率为11.0592MHZ
时钟周期=1\11.0592us,机器周期=12\11.0952=1.085us(寄存器加1就是这里的时间),并且每走一个机器周期等于寄存器走一位,这里时两个八位为16位的二进制2 ^ 16 =65536。
走完的时间为65536*1.085=71ms
如何定义10ms
这里诺想要定义10ms,不能让它从0开始计时,需要10/1.085=9620(10ms需要多少的数)所以必需要从65536-9620=56320开始,56320是寄存器开始的位十六进制位DC00
低位 TL0=0x00
高位 TH0=0xDC
如何开始定时
TMOD=0x01;这里是根据TMOD的寄存器选择工作模式并且设置成十六位二进制,为定时器0.
如何看出爆表
TF0这个位为1时,就是读数一轮完成,没有中断的话,这里需要手动设置为0.
#include"reg52.h"
//sbit led1=P3^7;
sbit led2=P3^6;
void main()
{
int cnt=0;
TMOD=0x01;//1.配置定时器0工作模式
TL0=0x00;
TH0=0xDC;//2.给个初值定时10ms
TR0=1;//3.开始计时
//led1=1;
led2=1;
while(1)
{
if(TF0==1)//4.爆表了,这个位为1,需要手动设置为0
{
TF0=0;
TL0=0x00;
TH0=0xDC;
cnt++;
}
if(cnt==50)
{
led2=!led2;//io口状态反转
cnt=0;
}
}
}