以下由软件计算得出12M晶振,定时器模式16位在12T下1毫秒的时间
void Timer0Init(void)//1毫秒@12.000MHz{
AUXR &= 0x7F;//定时器时钟12T模式
TMOD &= 0xF0;//设置定时器模式
TMOD |= 0x01;//设置定时器模式
TL0 = 0x18;//设置定时初值
TH0 = 0xFC;//设置定时初值
TF0 = 0;//清除TF0标志
TR0 = 1;//定时器0开始计时
}
验证软件的结果:
晶振为12M,一个震荡用时为(1/12M)秒
12T的单片机一个机器周期是12次时钟周期0.000001秒
12M晶振12T工作一个机器周期消耗的时间是(1/12M)*12 秒=0.000001秒=1微秒
要求延时1毫秒,就是1000微秒
低8位与高8为共16位65535,只能装65535微秒的时间
THX=(65536-1000)/256=252=0xFC
TLX=(65536-1000)%256 =18=0x18
【手动计算】 用11.0592M延时20毫秒
20毫秒=0.02秒
一个机器周期耗时 (12/(11.0592*10^6))秒
0.02秒所用周期=0.02/(12/(11.0592*10^6))=18432个机器周期
11.0592M 12T 1位 20毫秒
TH0=(65536-18432)/256=0xB8
TH0=(65536-18432)%256=0x00
软件验证我的计算:
void Timer0Init(void)//20毫秒@11.0592MHz{AUXR &= 0x7F;//定时器时钟12T模式TMOD &= 0xF0;//设置定时器模式TMOD |= 0x01;//设置定时器模式TL0 = 0x00;//设置定时初值TH0 = 0xB8;//设置定时初值TF0 = 0;//清除TF0标志TR0 = 1;//定时器0开始计时}
EA---全局中允许位。
EA=1,打开全局中断控制,在此条件下,由各个中断控制位确定相应中断的打开或关闭。
EA=0,关闭全部中断。
ET2---定时器/计数器2中断允许位。
ET2=1,打开T2中断。
ET2=0,关闭T2中断。
ES---串行口中断允许位。
ES=1,打开串行口中断。
ES=0,关闭串行口中断。
ET1---定时器/计数器1中断允许位。
ET1=1,打开T1中断。
ET1=0,关闭T1中断。
EX1---外部中断1中断允许位。
EX1=1,打开外部中断1中断。
EX1=0,关闭外部中断1中断。
ET0---定时器/计数器0中断允许位。
ET0=1,打开T0中断。
ET0=0,关闭T0中断。
EX0---外部中断0中断允许位。
EX0=1,打开外部中断0中断。
EX0=0,关闭外部中断0中断。
本文出自 “李春利” 博客,谢绝转载!