标签:手动计算定时器 中断简介
以下由软件计算得出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中断。
本文出自 “生命不息,折腾不止。” 博客,谢绝转载!
标签:手动计算定时器 中断简介
原文地址:http://990487026.blog.51cto.com/10133282/1710602