单片机基础模块学习——定时器
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++;
}
原文地址:https://blog.csdn.net/2301_79608998/article/details/145233720
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!