这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » Renesas » R8C开发板学习笔记

共11条 2/2 1 2 跳转至
菜鸟
2014-03-21 16:10:50     打赏
11楼

timerRA应用实例

实现功能:用定时器timerRA提供3个不同频率信号0.5Hz,1Hz和2Hz,分别用3个指示灯LED1、LED2、LED3以上诉3种不同的频率闪烁。LED1亮灭时间相同,LED2与LED3常态是灭状态,在频率边沿处闪烁一次。

注:用示波器可以更加精确地捕获输出信号的频率

 

流程图:

 

 

程序简介:

int led_shifttime = 0;
int led3_shifttime = 0;

void main(void)
{
 /* Timer RA initialization sequence */
 /* Low speed on-chip oscillator is used (125kHz) instead of external clocking */
 //ocd2=1; // 选择On-chip oscillator clock作为system clock,因为复位后ocd2为1所以可以省略此句


 /* 设置TRAO为输出端口 */
 toena_traioc = 1;
 
 /* 设置timerRA 位Timer mode */
 tmod0_tramr = 0;
 tmod1_tramr = 0;
 tmod2_tramr = 0;
 
 /* 选择片上低速时钟Low speed on-chip oscillator作为timerRA的时钟源 */
 tck0_tramr = 0;
 tck1_tramr = 1;
 tck2_tramr = 0;
 
 //RA timmer 中断发生间隔为t,则t=(trapre+1)*(pre+1)*1/ F(OCO)
  trapre = 249;
 tra = 249;  //RA timer中断时间间隔为0.5s
 
 /* 清零timerRA中的标志位 */
 ir_traic = 0;
 
 /* 设置timerRA中断等级为1级 */
 ilvl1_traic = 1;
 
 /* 开启timerRA定时器 */
 tstart_tracr = 1;
 
 /*  允许中断 */
 ENABLE_IRQ;

 /* LED0 LED1 LED2 LED3初始状态都是灭状态 */ 
 p3 = 0x5A;

pd3 = 0xFF;
 
 while (1)
 {  
      if (led_shifttime == 2)
       {
            led_shifttime = 0; //led_shifttime计数周期为2个RA timer中断间隔,即2*0.5s=1s
            LED1 = !LED1;      //LED1每隔1s变换一次状态
     
            LED2 = !LED2;
            LED2 = !LED2;      //LED2每隔1s闪烁一次
   }
  else
   {
   }
  
  if(led3_shifttime == 1)
   {
       led3_shifttime =0; //led3_shifttime计数周期为1个RA timer中断间隔,即0.5s
       LED3 = !LED3;
             LED3 = !LED3;      //LED3闪烁一次,间隔为0.5s
   }
  else
   {
   }
 
  
 }

 
}


/***********************************************************************************
Function Name: timer_ra
Description: Timer RA中断函数.
Parameters:  None
Return Value: None
***********************************************************************************/
/* timer RA   (software int 22) */
#pragma interrupt timer_ra(vect=22)
void timer_ra(void)
{  
 led_shifttime++; 
 led3_shifttime++;  //每进入一次RA timer中断,间隔为0.5s,两个计数加1
     
 ir_traic = 0;      //中断标志位IR清零
}

总结:

定时器timerRA的使用重点,首先设置timerRA的工作模式为timer mode;

第二,选择timerRA的时钟源;

第三,通过设置寄存器trapre和tra来得到发生timerRA中断的时间间隔

 

每次发生timerRA中断的间隔时间确定后,再在timerRA中断函数中设定相应的动作。相当于以中断间隔作为该动作发生的长度标尺。

 

 


共11条 2/2 1 2 跳转至

回复

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