打印

定时器0进不去

[复制链接]
1477|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
l98165296|  楼主 | 2015-5-22 12:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void Timer0_Init(void)
{
    AUXR0 |= T0XL;
    AUXR2 &= ~T0X12;   //选定时器时钟源为SYSCLK
//    AUXR2 |= 0X01;     //使能T0从P3.4输出
    AUXR2 &= 0xFE;       //禁止T0从P3.4输出
    TMOD&=0XF0;
    TMOD|=0X01;         //定时器0工作于方试1,即16位定时器

    TH0=0xec;                              
    TL0=0x78;                             
   
    ET0=1;              //定时器0开启中断
        EA=1;
    TR0=1;
}
void timer0_isr(void) interrupt 1
{
         xs(1,6);
         delay(100);
         P37=0;
         delay(100);
         P37=1;
     
}
void main
{
     void Timer0_Init();
    while(1)
    {
    }

}
哪位大神解释下为什么定时器不工作,那个p37控制蜂蜜器叫!
沙发
luofeng2g| | 2015-5-22 12:21 | 只看该作者
检查下具体配置,还有,你把中断里的处理程序放出来,中断里面不要放延时!浪费资源

使用特权

评论回复
板凳
l98165296|  楼主 | 2015-5-22 12:24 | 只看该作者
本帖最后由 l98165296 于 2015-5-22 12:26 编辑
luofeng2g 发表于 2015-5-22 12:21
检查下具体配置,还有,你把中断里的处理程序放出来,中断里面不要放延时!浪费资源 ...

那个延迟只是为什么了看有没有进去,蜂鸣器没响是不是代表了定时中断没执行。

使用特权

评论回复
地板
luofeng2g| | 2015-5-22 12:26 | 只看该作者
l98165296 发表于 2015-5-22 12:24
那个延迟只是为什么了看有没有进去

中断进不去,应该是你没配置好。再好好检查检查!或者试试timer1

使用特权

评论回复
5
forget345| | 2015-5-22 13:39 | 只看该作者
你这定时时间多长? 用示波器看看P37是否有变化,蜂鸣器响的条件是什么?delay也不知道是什么东西,会不会造成还没跳出delay就到下一次定时中断了。这代码写的真够烂的,方式1,中断服务程序中要重新赋值的

使用特权

评论回复
6
e1ki0lp| | 2015-5-26 23:55 | 只看该作者
我用的STC的东西算的,都是一家的,结果应该也一样。
TMOD &= 0xF0;       
TMOD |= 0x01;               
上面这一段是把定时器0设置为16位不自动重装。也就是说需要在定时器0中断里重新给TH0和TL0赋初值。
想要不自动重装的话可以直接只写一句
TMOD &= 0xF0;       
当然这种16位自动重装的工作方式只在个别芯片上支持。还需要去看看数据文档。

另外中断函数内部不宜放延时。如果定时器定时10ms进一次中断,然而程序在中断里运行的时间为100ms,容易出现运行完一次中断直接就进了下一次中断这种无限连续的中断。

使用特权

评论回复
7
lfwag| | 2015-6-18 09:43 | 只看该作者
不可以在线仿真看一看么?直接打断电不是清晰明了

使用特权

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

本版积分规则

6

主题

7

帖子

0

粉丝