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

[复制链接]
1019|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,如果像我上边那样,把定时器中断里边的隐去,在主函数赋初值就不行。我觉得应该是可以的,不知道哪里有问题,谢谢大神帮我看看,我是菜鸟,谢谢
joyme 发表于 2015-1-15 17:05 | 显示全部楼层
上面已经说了原因了,怎么还是不明白吗?
你的中断可能是1秒钟才一次(即num++是一秒执行一次),主循环很快会执行的,所以num==10在下一次更新前一直成立,所以会不停的初始化定时器初值,也就是永远也进不了中断了,num会一直等于10
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

74

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部