timer0.c
来自「AT89S51单片机试验及实践教程」· C语言 代码 · 共 80 行
C
80 行
/*
定时器0应用
Study-3 51 单片机开发板
试验现象:
P20对应的管脚LED,会闪烁,
修改定时器0延时变量,可以改变闪动的频率
mail me:
zhaoliang0801@gmail.com
zhaoliang_0801@dl.cn
*/
// *******************************************************
// 头文件
#include "my51.h"
// *******************************************************
// 管脚定义
sbit led = P2^0;
// *******************************************************
// 变量定义
unsigned char count; // 定时器 定时时间延长变量
// *******************************************************
// 函数声明
void init_mcu (void);
// *******************************************************
// 主函数
// TRUE 在头文件中应用
void main (void)
{
init_mcu ();
while (TRUE) //死循环
{
//程序是在 定时器中断中完成的
}
}
// *******************************************************
// 单片机初始化 子函数
// 设定 寄存器、变量初值
void init_mcu (void)
{
TMOD = 0x01; //T0 工作在方式1 16位计数器
TH0 = (65536-50000) /256; // 预先 设定定时器 初值
TL0 = (65536-50000) %256;
EA = 1; //开启 总中断
ET0 = 1; //开启定时器 0
TR0 = 1; //定时器 0 的运行标志位
count = 0; // 变量初始化
}
// *******************************************************
// 定时器0中断 子函数
// 产生50ms定时
void time0 (void) interrupt 1
{
TH0 = (65536-50000) /256; //重新设置定时器 初值
TL0 = (65536-50000) %256;
count ++; //50ms太短,闪烁频率太快
if (count == 10) //用变量 count 延长到500ms
{
count = 0; //计数器 清零
led = !led; //led 取反
}
}
// *******************************************************
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?