C51 手动计算定时器 中断简介

时间:2022-01-05 23:32:28


以下由软件计算得出12M晶振,定时器模式16位在12T下1毫秒的时间

C51  手动计算定时器 中断简介

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

软件验证我的计算:   

C51  手动计算定时器 中断简介

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中断。


本文出自 “李春利” 博客,谢绝转载!