MC9S12G128 Timer (定时器溢出中断 延迟函数)

MC9S12G128 Timer (定时器溢出中断 延迟函数)

溢出中断

void TIM_Init(void)
{
  TSCR1_TEN = 1;    
  TSCR1_TFFCA = 1;   
  // 定时器溢出中断使能, 0:关闭溢出中断,1:使能溢出中断
  TSCR2_TOI = 1; 
  // 定时器溢出触发TFLG2_TOF中断,中断处理函数TFLG2_TOF=1清除TOF中断;
  
  TSCR2_PR = 4;         //8MHZ/16    2us
  TSCR1_PRNT = 0;		//精确定时器选择,0:使用传统定时器(TSCR2[2:0]作为预分频), 1:使用精确定时器,PTPSR中的所有位都作为预分频选择;
    
  TIE = 0x00;           // 定时器中断使能, 0:IC/OC相应通道中断禁止,1:IC/OC相应通道中
  
   
  TCTL1 = 0x00;
  TCTL2 = 0x00;
  TCTL3 = 0x00;
  TCTL4 = 0x00;
  
  TFLG1 = 0xFF;
  TFLG2 = 0xFF;
  
  
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
interrupt VectorNumber_Vtimovf void overflow(void)
{
  if(TFLG2_TOF ==1)
  {
    TFLG2_TOF = 1; //清除TOF标志 
    TCNT = 15535;        // 从TCNT开始进行计算,直到65535溢出,触发中断。  2*500 = 1ms  100 = 2*500 00  计数值为:65535 - 50000 = 15535        
    PTP ^= 0XFF;
   
  }
}
#pragma CODE_SEG DEFAULT

延迟函数

/************************************************************/
/*            初始化TIM模块:产生周期性中断                 */
/************************************************************/
void TIM_INIT (void)
{
  TSCR1_TFFCA = 1;   //快速清空标志位
  TSCR1_TEN = 1;     // 定时器使能控制,0:关闭主定时器,包括计数器; 1:允许定时器正常工作;
  
  TIOS  = 0xff;      // 输入捕获/输出比较选择  IOSx=0, 输入捕获,IOSx=1, 输出比较;  
  
  TCTL1 = 0x00;	     // 后四个通道设置为定时器与输出引脚断开,即禁止比较
  TCTL2 = 0x00;      // 前四个通道设置为定时器与输出引脚断开,即禁止比较
  
  TIE   = 0x00;      // 禁止所有通道定时中断 采用的定时器溢出中断所以不需要引脚,只有在输入捕获的时候才会用到
  
  TSCR2 = 0x06;	     // 预分频系数pr2-pr0:110,预分频系数为64,定时器时钟周期为8us  1/(8mhz/64)*1000 000
  
  TFLG1 = 0xff;	     // 清除各IC/OC中断标志位
  TFLG2 = 0xff;      // 清除自由定时器中断标志位
}


/*************************************************************/
/*                         延时函数                          */
/*************************************************************/
void delay1ms (unsigned int n) 
{
    unsigned int i;
    for (i=0;i<n;i++) 
    {
        TFLG1_C0F = 1;              // 清除标志位
        TC0 = TCNT+125;           // 设置输出比较时间为1ms  TCNT 的值在这儿无需更改,原因是,周期计数从0到65535 ,一个周期时间为你设置的8us。执行125次才为1ms。
        while (TFLG1_C0F == 0);      // 等待COF位为1,即等待输出比较通道已发生输出比较事件
    }
}

寄存器

不想写
可以看看这个大佬写的定时器 包括溢出触发 脉冲触发 输入捕获触发 输出比较。真的好NB啊。
https://blog.csdn.net/songyulong8888/article/details/113122516

原创不易多多支持 ,有错请各位大佬指正

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值