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