这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» 嵌入式开发» 国产MCU» 芯圣HC18M003单片机定时器0的定时模式

共3条 1/1 1 跳转至

芯圣HC18M003单片机定时器0的定时模式

专家
2023-09-30 20:26:38 打赏

芯圣HC18M003单片机的定时器0是8位可编程定时器

图片1.png

图片2.png


下面我们使用定时器0的模式0,做一小段测试程序。代码如下:

#include"holychip_define.h" static int cnt = 0; /*************************************************************************************** * @实现效果 T0定时1ms,每进500次中断,PA翻转一次 ***************************************************************************************/ void main() { /************************************系统初始化****************************************/ OSCCON = 0x04; // Fosc=32M Fcpu=4M(Fosc4分频 2T) /************************************IO初始化******************************************/ ANSELA = 0xFF; // PA设为数字模式 TRISA = 0xFF; // PA设为输出模式 /**********************************T0配置初始化****************************************/ OPTION = 0X07; // 分频寄存器配置256分频 T0CS = 0; // T0 模式选择寄存器:定时器模式,计数时钟Fcpu,休眠和绿色模式下停止 T0OSCEN = 0; // 禁止定时器模块0使用计数时钟 T0SE = 0; // 定时器模式,计数时钟Fcpu //Tim0计算时间 = 1/(时钟源/Timer分频系数)*(256-T0初值) //定时1ms //反推初值 = 256 - ((1/1000) /(1/(Fcpu / Timer分频系数))) // = 256 - ((1/1000) / (1/(4000000 / 256))) // = 256 - 16 // = 0xF0 //T0=0xF0 //反推初值 = 1/(时钟源/Timer分频系数)*(256-T0初值) // = 1/(4000000/256)*(256-0xF0) // = 1.024ms T0 = 0xF0; // T0定时时间1ms T0IE = 1; // 允许定时器0中断 GIE = 1; //打开总中断 while(1) { } } /*************************************************************************************** * @说明 T0中断服务函数 * @参数 无 * @返回值 无 * @注 无 ***************************************************************************************/ void interrupt T0_Isr(void) { if(T0IF) { T0 = 0xF0; //T0定时时间1ms cnt = (cnt +1)%500; // 500次计数为一个周期 if (cnt==0) { PORTA5 = ~PORTA5; //PORTA5翻转 PORTA0 = ~PORTA0; //PORTA0翻转 } T0IF = 0; //清除T0中断标志位 } }

因为程序加了注释,所以就不额外说明了。基本思路就是让定时器0使用系统时钟进行计数,并产生定时中断。在中断例程中计数,得到准确时间,并驱动GPIO口翻转,使LED周期闪烁。程序中附带了如何计算定时周期的方法。





关键词: 菜鸟学单片机 HC18M003 定时器0 定时模式

高工
2023-10-01 09:26:00 打赏
2楼

现在还使用寄存器操作的方式来编写代码,其实比较少了。



院士
2023-10-04 19:54:39 打赏
3楼

谢谢分享。


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]