定时器延时,硬件延时——配合“定时器延时,硬件延时_51单片机精确延时程序大集合”
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TMOD定时器工作模式。
0 0 方式0 13位计数器 TMOD=0x00
0 1 方式1 16位计数器 TMOD=0x01
1 0 方式
2 自动重装8位计数器 TMOD=0x02
1 1 方式3 T0分为2个8位独立计数器,T1为无中断重装8位计数器 TMOD=0x03
EA是总中断允许位
EX是外部中断允许位(EX0,EX1分别指外部中断INT0,INT1)
ET是内部定时器/计数器中断允许位
TR定时器/计数器启动位,它们都是高电平1有效
TH、TL分别指定时器/计数器的高8位和低8位(后面加0/1表示定时器/计数器0/1,如TH0=255表示给定时器0的高八位赋初值255)。
这是为T0 计数器赋初值,(高位)TH0=0xd8,(低位)TL0=0xf0
换成10 进制是:55536
那么65536-55536=10000
表明T0 计数器计数10000 个机器周期后溢出。
如果使用12M 晶振,那么计数10000 个机器周期使用10ms,可以作为定时用。
反过来是:
如果定时喂10ms,赋初值为:
单片机对TH0,TL0赋值
时钟频率12MHz,定时时间T=10ms,初值N=2^16-T=55536,转为16进制为D8F0,赋值:TH0=0xD8;
TL0=0xF0;
在初始化定时器0后(调用InitTimer0()),可以调用DelayNms(unsigned int t)这个函数来达到你想要的要的延时效果。
unsigned int count;定义全局变量用于计时
----------------------------------------
函数名:DelayNms(unsigned char t)
功能:延时n毫秒
输入参数:t,延时长度
输出参数:无
-------------------------------------------
void DelayNms(unsigned int t)
{
count=t;
while(count);
}
----------------------------------------
函数名:InitTimer0
功能:定时器0初始化
输入参数:无
输出参数:无
-------------------------------------------
void InitTimer0()
{
TMOD = 0x01;定时器0,工作方式1
TH0=(65536-1000)256;定时1ms
TL0=(65536-1000)%256;
ET0 = 1;打开定时器0中断
EA = 1;打开总中断
TR0 = 1;打开定时器0
}
----------------------------------------
函数名:IsrTimer0
功能:定时器0终端服务,间隔1ms将计数变量减一。
输入参数:无
输出参数:无
-------------------------------------------
void IsrTimer0() interrupt 1
{
TH0=(65536-1000)256;
TL0=(65536-1000)%256;
count--;
}