智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1702|回复: 1
打印 上一主题 下一主题

关于XS128输出比较模块小问题求助

[复制链接]

2

主题

29

帖子

0

精华

高级会员

Rank: 4

积分
510
威望
286
贡献
144
兑换币
42
注册时间
2012-5-26
在线时间
40 小时
跳转到指定楼层
1#
发表于 2012-5-31 10:20:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
   新手求助,各位大侠看看:
  这是我的一段测试程序,简单的测试输出比较的功能 , 问题在注释里面!

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;
}

2

主题

29

帖子

0

精华

高级会员

Rank: 4

积分
510
威望
286
贡献
144
兑换币
42
注册时间
2012-5-26
在线时间
40 小时
2#
 楼主| 发表于 2012-5-31 10:41:02 | 只看该作者
我明白了,呵呵,要遭中段里面加上TC0 +=25000;
因为比较后TCNT不会清零~类似于MSP430,有意思
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2025-2-23 00:39 , Processed in 0.044589 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表