这样循环下去?

[复制链接]
33|16
| 2018-11-9 11:55 | 显示全部楼层
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因
 楼主 | 2018-11-9 11:59 | 显示全部楼层
#define uchar unsigned char
#define uint unsigned int

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

uint x;
uchar n,num,m,a;

        void init()
        {
                num=0;
            led=0;
            
        }        
//        void int0() interrupt 0
//        {
//                EA=1;
//                EX0=1;
//                a=0;
//        }
        void time0() interrupt 1
        {
                uchar m=0;
            TH0=(65536-50000)/256;
            TL0=(65536-50000)%256;
            num++;

                if(m==0)
            {
                        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++;                     
                        
                        }
                        if(n==5)
                        {
                                led=1;
                                TR0=0;
                                m=1;

                        }
                }
                else
                {
                        led=1;
                        TR0=1;
                        TH0=(65536-50000)/256;
                    TL0=(65536-50000)%256;
                        a++;
                }
                if(a==100)
                {
                    a=0;
                        m=0;
                }
        
        }

void main()
{
        init();
        TMOD=0X11;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        ET0=1;
        EA=1;
        TR0=1;
        
  
        while(1)
    {
            
    }
                 

}
| 2018-11-9 12:03 | 显示全部楼层
定时器停掉了.
 楼主 | 2018-11-9 14:15 | 显示全部楼层
定时器我又置1了~~在else里
| 2018-11-9 14:20 | 显示全部楼层

为什么总是在重装载定时器呢

这可不是好的习惯
| 2018-11-9 14:24 | 显示全部楼层

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

        if(m==0)

这里的初始化为0了,每次判断都会为0,是何意呢
| 2018-11-9 14:26 | 显示全部楼层

定时器初值不需要多次装载,进中断装载就可以了
| 2018-11-9 14:31 | 显示全部楼层
为0时闪,为1时是暂停5秒
| 2018-11-9 14:35 | 显示全部楼层
每次进来都初始化为0了,还有可能为1吗,即使为1也被初始化为0了
| 2018-11-9 14:38 | 显示全部楼层
m用全局变量,或用静态变量static
 楼主 | 2018-11-9 14:43 | 显示全部楼层

嗯,那staic怎么用?我是菜鸟,谢谢您~~
| 2018-11-9 14:46 | 显示全部楼层

你的else语句是不起作用的,也就是程序永远不会跳转过去
if(n==5)
                        {
                                led=1;
                                TR0=0;
                                m=1;

                        }
你的这个if语句把定时器关了,也就是说当执行完if(n==5)之后程序停留在while循环里,不会再进入中断子程序,这样说明白么
| 2018-11-9 14:48 | 显示全部楼层
LZ写得有点复杂了,变量m没必要,重复赋值TH0=(65536-50000)/256;TL0=(65536-50000)%256;,而且这应该是50ms的定时器吧,你让它计时到num==20时,也就是1s,再让n==5时,再改变LED,直接让num==100不就行了吗?而且你想让LED闪烁,可以用异或语句,LED ^= 1;之类的不是简单点吗
| 2018-11-9 14:54 | 显示全部楼层
num=20时要清0,要是num=100,led取余的话,灯也不能闪啊  请问这个问题怎么解决?谢谢~~我写的确实有点复杂
| 2018-11-9 14:57 | 显示全部楼层

你可以定义一个延时函数delay,然后在定时器中断中定义变量flag标志位,以为每次5s,一种情况是闪的,另一个是灭的,有个标志位方便些。中断里面大概思路是这样写
                        if(num == 100)
                        {
                                num = 0;
                                flag = ~flag;
                                while(flag)
                                {
                                        led ^= 1;
                                        m++;
                                        delay();
                                        if(m == 5)
                                        {
                                            m = 0;
                                            break;
                                         }                                          
                                }                                
                        }
 楼主 | 2018-11-9 15:01 | 显示全部楼层
哦,那我就知道怎么回事了,多谢大家,结贴了哈
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

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