51单片机定时器时钟

本文介绍了如何在C语言中配置定时器T0,确保TMOD正确设置以避免影响其他定时器,并实现1000ms定时中断,用于驱动LCD1602显示计时信息。
摘要由CSDN通过智能技术生成

 配置定时器T0模式

TMOD不可位寻址 必须8位赋值,如果只将TMOD=0x01的话,定时器1如果同时使用,则会将前四位置0,会影响设备。所以    TMOD&=0XF0, TMOD|=0X01; 

main.c

#include <REGX52.H>
#include "Timer0.h"
#include "Key.h"
#include <INTRINS.H>
#include "LCD1602.h"
unsigned char Ms,Min,Hou;
void Timer0_Routine() interrupt 1//中断函数标识,含优先级
{
	static unsigned int Count=0;
	TL0=0X18;//定时初值
	TH0=0XFC;//定时初值
	Count++;//对中断频率分频计次
	if(Count>=1000)//1000ms 分频500次
		{
				Count=0;
				Ms++;
				if(Ms>=60)
				{
					Ms=0;
					Min++;
					if(Min>=60)
					{
						Min=0;
						Hou++;
						if(Hou>=24)
						{
							Hou=0;
						}
				}
				}
			}
		
}
void main()
{	
	LCD_Init();
	Timer0Init();
	LCD_ShowString(1,1,"Clock:");
	LCD_ShowString(2,3,":");
	LCD_ShowString(2,6,":");
		while(1)
		{
			LCD_ShowNum(2,1,Hou,2);
			LCD_ShowNum(2,4,Min,2);	
			LCD_ShowNum(2,7,Ms,2);
		}
}

Timer.c

#include <REGX52.H>

void Timer0Init(void)		//1000微秒@12.000MHz
{
	TMOD &= 0xF0;		//设置定时器模式 为了不影响前一定时器模式,先将前4位置1
	TMOD|=0X01;	//设置定时器模式 最后位置1
	TL0 = 0x18;		//设置定时初值
	TH0 = 0xFC;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时
	ET0=1; //打开中断允许寄存器
	EA=1;
	PT0=0;//设置低优先级中断
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酷狗一只

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值