51单片机 定时器 c语言

  • 格式:docx
  • 大小:37.26 KB
  • 文档页数:3

51单片机 定时器 c语言

51单片机是目前较为流行的一种单片机芯片,定时器是其重要的功能之一,可以用于实现各种定时任务,而c语言则是51单片机常用的编程语言之一。下面将结合实例,阐述51单片机定时器在c语言中的使用方法。

一、引入头文件及定义定时器

首先需要引入头文件“reg51.h”,然后需要定义一个定时器变量和一个计数变量。在本文中,我们将使用定时器0,所以定义如下:

```c

#include

sbit led = P2^0; //定义led信号端口P2.0

unsigned char count = 0; //计数变量

unsigned char timerVal = 56; //定时器初值

```

需要注意的是,定时器初值的计算方法如下:

$$定时器初值 = 256 - \frac{所需延时时间 × 晶振频率}{12}$$

在本例中,晶振频率为11.0592MHz,所需延时时间为0.001秒,则计算得到定时器初值为56。

二、设置定时器参数

设置定时器参数前,需要先关闭定时器0。设置完成后,再通过TR0位将定时器0启动。

```c

void initTimer(){

TMOD &= 0xF0; //定时器0, 方式1

TMOD |= 0x01;

TH0 = timerVal; //定时器初值高位

TL0 = timerVal; //定时器初值低位 ET0 = 1; //打开定时器0中断

EA = 1; //打开总中断

}

void main(){

initTimer(); //初始化定时器0

while(1){

if(count >= 100){

led = !led; //LED翻转

count = 0; //计数器清零

}

}

}

void timerHandler() interrupt 1{

TH0 = timerVal;

TL0 = timerVal;

count++; //计数器+1

}

```

在上述代码中,通过设置TMOD寄存器,将定时器工作在方式1。通过TH0和TL0寄存器将定时器初值装入寄存器中,ET0寄存器打开定时器0中断。然后在主函数中,通过调用initTimer()函数初始化定时器。在定时器中断服务函数中,每当定时器计满,count计数器就会+1,当计数器的值达到100时,led灯就会翻转一次,并将计数器清零。

三、定时器中断服务函数处理

定时器中断服务函数的处理过程很简单,只需要将定时器初值重新装入TH0和TL0中即可,同时将计数器+1即可。

```c

void timerHandler() interrupt 1{

TH0 = timerVal;

TL0 = timerVal;

count++; //计数器+1 }

```

四、总结

通过以上的示例代码,我们可以看到51单片机中定时器的使用步骤可以分为引入头文件及定义定时器、设置定时器参数和定时器中断服务函数处理三个步骤。当然,在实际的应用中,还需要根据实际情况进行相应的修改和优化。希望本文能够对初学者在51单片机定时器的使用上提供一些帮助和启示。