打印

定时器中断灯亮灭问题,跪求大神帮忙,谢谢您

[复制链接]
737|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1349236685|  楼主 | 2015-1-14 12:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为什么定时器中断/**/中隐去的内容放到主函数while(1)里,led只亮一次,放在定时器中断里就可以反复亮灭
#include<reg51.h>

#define uchar unsigned char
#define uint unsigned int

sbit led=P2^7;
sbit jum=P3^2;

uint x;
uchar n,num;

        void init()
        {
                num=0;
            led=0;
            
        }       

        void time0() interrupt 1
        {
               
            TH0=(65536-50000)/256;
            TL0=(65536-50000)%256;
            num++;
                              

               
/*                if(num==10)
            {
                        led=1;
                        TH0=(65536-50000)/256;
                    TL0=(65536-50000)%256;
               
                       
                }
            if(num==20)
            {
                        num=0;
                        led=0;
                        TH0=(65536-50000)/256;
                    TL0=(65536-50000)%256;
                        num=0;
                       
                       
                } */
                 
               
        }



void main()
{
        init();
        TMOD=0X11;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        ET0=1;
        EA=1;
        TR0=1;
       
    while(1)
        {
                if(num==10)
            {
                        led=1;
                        TH0=(65536-50000)/256;
                    TL0=(65536-50000)%256;
               
                       
                }
            if(num==20)
            {
                        num=0;
                        led=0;
                        TH0=(65536-50000)/256;
                    TL0=(65536-50000)%256;
                        num=0;
                        n++;            
                       
                }
       
                 
        }
}

相关帖子

沙发
joyme| | 2015-1-14 17:40 | 只看该作者
因为num==10每次都赋定时器初值,让它定时器永远也不会进入下一次中断

使用特权

评论回复
板凳
joyme| | 2015-1-14 17:42 | 只看该作者
要不不要每次赋初值,或者只在中断里赋初值,就OK

使用特权

评论回复
地板
1349236685|  楼主 | 2015-1-14 19:27 | 只看该作者
joyme 发表于 2015-1-14 17:42
要不不要每次赋初值,或者只在中断里赋初值,就OK

在中断里ok,如果像我上边那样,把定时器中断里边的隐去,在主函数赋初值就不行。我觉得应该是可以的,不知道哪里有问题,谢谢大神帮我看看,我是菜鸟,谢谢

使用特权

评论回复
5
joyme| | 2015-1-15 17:05 | 只看该作者
上面已经说了原因了,怎么还是不明白吗?
你的中断可能是1秒钟才一次(即num++是一秒执行一次),主循环很快会执行的,所以num==10在下一次更新前一直成立,所以会不停的初始化定时器初值,也就是永远也进不了中断了,num会一直等于10

使用特权

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

本版积分规则

33

主题

71

帖子

0

粉丝