单片机定时器c程序

Python016

单片机定时器c程序,第1张

//-------------------

//

函数名称:

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)//等待中断

{

}

}