智能车制作

标题: 关于XS128输出比较模块小问题求助 [打印本页]

作者: LCD    时间: 2012-5-31 10:20
标题: 关于XS128输出比较模块小问题求助
   新手求助,各位大侠看看:
  这是我的一段测试程序,简单的测试输出比较的功能 , 问题在注释里面!

void main(void) {
  /* put your own code here */
   MCUInit(32);      // 设置总线频率32MHZ
   DDRB |= 0xff;   //配置IO口
   PORTB = 0xFF;
                        
  TIE = 0x00; /* Disable all channel interrupt */
  TIOS =0x01; /* channel 0 set to Output Compare */
  TSCR1 = 0x80; /* Enable Timer; */
/*
    如果TSCR1 = 0X90 自动清中断标志吗?可是运行发现反而不对了
*/
  TSCR2 = 0x07; /* Prescale Factor = 128 */
  TC0 = 25000;         
/*  
     在这里给TC0赋值 25000 总线频率是32MHZ 那么比较中断一次的时间是 128/ 32000000 * 25000 = 0.1秒对吧?
     在中断里计数4次就是1S了,可是灯的亮灭一直不对,请问我哪里理解错了?

    现象是TC0不管赋不赋值 ,都是计数到65535才比较中断 奇怪了
*/

  EnableCapCom(0);   //开通道比较中断
  EnableInterrupts;  //开总中断
  
  for(;;)
  {
        
  } /* loop forever */
  /* please make sure that you never leave main */
}

#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 8 OutCompareCH0_ISR(void)
{
   static uint16 counter = 0;
   DisableInterrupts;
   TFLG1 = BIT0;   // 请中断标志
   if( counter == 4 ) // 4次为1秒
  {
    PORTB = ~PORTB;
    counter = 0;
  }
  counter += 1;
   EnableInterrupts;
}

作者: LCD    时间: 2012-5-31 10:41
我明白了,呵呵,要遭中段里面加上TC0 +=25000;
因为比较后TCNT不会清零~类似于MSP430,有意思




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2