51单片机 定时器

mian.c

/*
  定时器的使用
*/
#include <REGX52.H>
#include "Time0Init.h"

void main()
{  
	//定时器初始化
	Time0_Init();
	while(1){
 
	}
}

unsigned int Time0_Count = 0;
void Time0_Routine() interrupt  1
{
	Time0_Count++;
	//设定初值  保证下次计数从这个初值在当前频率下累加到65535的时间为1ms
	TL0 = 0x66;    
	TH0 = 0xFC;
	//1s执行一次
	if(Time0_Count >= 1000){
		P2_0 = ~P2_0;
		//P2_1 = ~P2_1;
		Time0_Count = 0;
	}
}

Time0Init.c

#include <REGX52.H>
//定时器0初始化函数 1毫秒@11.0592MHz  定时器时钟12T模式
void Time0_Init()
{
	//设定定时器0为16位自动重装方式 (方式1) 1111(前4位设定定时器1工作方式)
	// 0000 (后4位设定定时器0工作方式)此寄存器不可以位寻址
	//下面两条语句不改变定时器1的工作方式 只改变定时器0的工作方式
	TMOD &= 0xF0;//&赋值不会改变高4位的数据  将低四位数据清零
	TMOD |= 0x01;//不改变高4位数据  只改变置1的位
	//中断溢出标志位 0 不触发中断 硬件置1 触发中断
	TF0 = 0;
	//开启定时器0
	TR0 = 1;
	//赋初值 由STC-ISP软件计算获取 定时器模式16位 定时器时钟12T  FC66相当于十进制64614 在当前设定的晶振频率下从64614计数到65535 为1ms
	TL0 = 0x66;     //设定定时初值  中断时间为1ms
	TH0 = 0xFC;     //设定定时初值  中断时间为1ms
	//开启定时器1中断
	ET0 = 1;
	//开启总中断
	EA = 1;
	//设置定时器1的中断优先级为低
	PT0 = 0;
}

Time0Init.h

#ifndef __Time0Init_H__
#define __Time0Init_H__
void Time0_Init();
#endif

猜你喜欢

转载自blog.csdn.net/weixin_42854045/article/details/127804742