单片机基础模块学习——定时器
1.利用stc-isp生成代码
选择定时器计算器,将频率改为12mhz,单位为毫秒,定时长度为1
复制下面代码
void Timer0Init(void) //1毫秒@12.000MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x20; //设置定时初值
TH0 = 0xD1; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
2.在数据手册查找中断的查询次序
由下表,定时器0的查询次序为1
3.定时器代码
#include "tim.h"
void Timer0Init(void) //1毫秒@12.000MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x20; //设置定时初值
TH0 = 0xD1; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0=1; //定时器0中断开关
}
主函数对定时器的应用
#include "tim.h"
#include "init.h"
#include "led.h"
//每一个变量前都标注类型,方便根据名字判断变量类型
//timer
unsigned long ulms=0;
unsigned int uiLed_Dly=0;
//led
unsigned char ucLed=0x00;
void Led_Proc(void);
void main(void)
{
Cls_Peripheral();
Timer0Init();
EA=1;//中断总开关
while(1)
{
Led_Proc();
}
}
void Led_Proc(void)
{
if(uiLed_Dly<200)
return;
uiLed_Dly=0;
ucLed ^=0X01;// 0000 0001异或:与零不变,与一取反
Led_Disp(ucLed);
}
//中断服务函数
void Time_0(void) interrupt 1
{
ulms++;
uiLed_Dly++;
}