定时器延时,硬件延时——配合“定时器延时,硬件延时_51单片机精确延时程序大集合”

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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--;

}

相关文档
最新文档