//
函数名称:
void
delay_s(uchar
t)
//
函数功能:
利用定时器延时t秒子程序
//-------------------
delay_s(uchar
t)
{
uchar
count,a
TMOD=0x10
//定时器1,模式1
TH0=(65536-50000)/256
//
定时为50ms
TL0=(65536-50000)%256
EA=1
ET1=1
TR1=1
while(1)
{
if(a==t)break
}
}
void
timer1()
interrupt
3
//定时器1
{
TR1=0
TH1=(65536-50000)/256
//
定时为50ms
TL1=(65536-50000)%256
count++
if(count==20)
//判断是否到1秒
{
count=0
a++
}
TR1=1
}
单片机中通过中断的方式来调用定时器。
具体的调用方式可以参考通过如下程序:
程序功能:利用定时器进行定时,实现每秒中led闪烁一次
#include<reg52.h>sbit led = P0^0
unsigned int num
void main(void)
{
TMOD = 0x00 // 工作方式0
TH0 = (8192 - 5000) / 32 // 12M晶振下定时5ms
TL0 = (8192 - 5000) % 32
EA = 1 // 开总中断
ET0 = 1 // 开定时器中断
TR0 = 1 // 启动定时器
while(1)
{
if(num == 200) // 定时1秒钟到
{
num = 0 // 计数器清零
led = ~led // led灯取反,实现1秒闪烁一次
}
}
}
void timer() interrupt 1 // 定时器1工作与方式0
{
TH0 = (8192 - 5000) / 32 // 重装初值
TL0 = (8192 - 5000) % 32
num++ // 计数器加1
}
有几个步骤。首先说明一下几个和定时器有关的寄存器。
第一,方式控制寄存器TMOD,地址89H,不可位寻址,这个寄存器可以对定时器的工作方式进行设置。
第二,TCON寄存器,地址88H,可以位寻址,控制寄存器的开启关闭,寄存器的溢出标志也在这个寄存器中。
第三,中断控制寄存器IE,用来控制各中断的开启或关闭。
现在开始介绍2个定时器的用法
1。设置TMOD
2。分别给两个定时器赋初值
3。开中断
4。开启定时器
5。设置循环语句等待中断
下面举一个例子:
#include
void
main(void)
{
TMOD=0x01//前四位控制t1,后四位控制t0
TH0=0x00;//赋初值
TL0=0x00
TH1=0x43;
TL1=0x32;
EA=1//开总中断
ET0=1//开t0中断
ET1=1//开t1中断
TR0=1//开启定时器t0
TR1=1//开启定时器t1
while(1)//等待中断
{
}
}