这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 国产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 跳转至

回复

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