码迷,mamicode.com
首页 > 其他好文 > 详细

手动计算定时器 中断简介

时间:2015-11-07 19:10:49      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:手动计算定时器 中断简介


以下由软件计算得出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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!