打印

关于2138的T0的问题,求教于各位

[复制链接]
1644|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
northerns|  楼主 | 2007-8-7 19:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用中断方式和查询方式如下:
在中断方式出现了问题:程序返回main的开头从新执行,可能和“T0MR0=Fpclk/2;//1uS”和“VICIntEnable=(1<<0x04);//使能定时器0”这两

句有关,可是百思不得其解

中断方式:


/*********定时器中断函数***************************************************/
void __irq interrupt_timer0(void)
{
    
     time++;
         T0IR=0x01;             //清除中断标志
     VICVectAddr=0x00;   //通知VIC中断处理结束
}


void initialize_t0(void)
{
   T0TC=0;
   T0PR=0;
   T0MCR=0x0003;
   T0MR0=Fpclk/2;//1uS
   T0TCR=0x00;
   
   //IRQEnable();      //IRQ中断使能    
       
//    /*设定定时器0中断*/
     VICIntSelect=0x00;//所有中断通道设置为IRQ中断
     VICVectCntl0=0x20|0x40;//设置定时器0中断通道分配最高优先级
     VICVectAddr0=(uint32)interrupt_timer0;//设置中断服务程序地址
     VICIntEnable=(1<<0x04);//使能定时器0
     
    
}

int main(void)
{    
       BEER ();
       initialize_t0();
       while(2)
       {
           T0TCR=0x01;
           if(time>1000)
            {
                time=0;
            }
       }
return(0);
}

×××××××××××××××××××××××××××××××××××××××××××××××××××8
查询方式:
int main(void)
{

   IO0CLR=BEEP;
   PINSEL0=0x00000000;
   IO0DIR=BEEP;
   T0TC=0;
   T0PR=0;
   T0MCR=0x03;
   T0MR0=3333;//1uS
   T0TCR=0x01;
   
   while(1)
   {
   
      while((T0IR&0x01)==0);
      T0IR=0x01;i++;
      if((i%2)==0)
          {IO1SET=BEEP;}
      else 
          IO1CLR=BEEP;
   
   }


return(0);




}

相关帖子

沙发
northerns|  楼主 | 2007-8-7 20:19 | 只看该作者

在线等,急啊!!!!

各位给点意见啊,在线等,急啊!!!!

使用特权

评论回复
板凳
newstary| | 2007-8-8 09:02 | 只看该作者

我的看法

VICVectCntl0=0x20|0x40;//设置定时器0中断通道分配最高优先级?
再看下数据手册,
0x20表示将IRQslot_en位置1,4:0位放置的是中断号,T0的中断号应为4,故该初始化语言应该改为:
VICVectCntl0=0x20|0x4;

此外IRQEnable();      //IRQ中断使能
这句保留,进如main函数后默认IRQ是关闭的

使用特权

评论回复
地板
northerns|  楼主 | 2007-8-8 09:38 | 只看该作者

太感谢了,我愿与你烧做兄弟呀!真是太感谢了


我是新手,非常感谢!!!!

作如下改动就OK了,^_^
VICVectCntl0=0x20|0x04;

使用特权

评论回复
5
newstary| | 2007-8-8 11:02 | 只看该作者

多看看数据手册

出问题最好先看数据手册,呵呵。
东西是人家造的^_^

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

33

帖子

0

粉丝