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


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

wKiom1Z5P6KzA2uwAAAsu3U3GEY530.png

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

软件验证我的计算:   

wKioL1Z5P8Py7RrxAAArkX__5Ss930.png

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


本文出自 “魂斗罗” 博客,谢绝转载!

你可能感兴趣的:(手动计算定时器,中断简介)