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 + -
显示快捷键?