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单片机定时器的使用上提供一些帮助和启示。