at89c51秒表计时
时间: 2023-09-07 12:13:31 浏览: 107
AT89C51是一种基于8051架构的单片机,它有许多应用,其中之一就是作为秒表计时器。以下是一个基本的AT89C51秒表计时器程序:
```c
#include <reg51.h> // AT89C51头文件
#define uchar unsigned char
#define uint unsigned int
uchar ms = 0; // 毫秒数
uint s = 0; // 秒数
uint m = 0; // 分钟数
void delay_ms(uint n) // 延时n毫秒
{
uint i,j;
for (i = 0; i < n; i++)
for (j = 0; j < 125; j++); // 12MHz晶振下延时1ms
}
void timer0_init() // 定时器初始化
{
TMOD |= 0x01; // 定时器0工作在模式1(16位自动重装载)
TH0 = 0xFC; // 定时器初值为65536-50000=15536,50000个机器周期为1秒
TL0 = 0x00;
ET0 = 1; // 开启定时器0中断
EA = 1; // 开启总中断允许
TR0 = 1; // 启动定时器0
}
void timer0_handler() interrupt 1 // 定时器0中断服务程序
{
TH0 = 0xFC; // 重新赋初值
TL0 = 0x00;
ms++; // 毫秒数加1
if (ms == 100) // 1秒
{
ms = 0;
s++; // 秒数加1
if (s == 60) // 1分钟
{
s = 0;
m++; // 分钟数加1
}
}
}
void main()
{
timer0_init(); // 定时器初始化
while (1)
{
P1 = ms; // 将毫秒数输出到P1口
delay_ms(10); // 10ms延时
}
}
```
该程序中,使用了AT89C51的定时器0来实现秒表计时功能。在中断服务程序中,每当计时器计满1秒时,就将秒数加1,当秒数达到60时,将分钟数加1。在主函数中,将毫秒数输出到P1口,然后延时10ms,这样就可以通过P1口看到秒表的实时计时情况。