为什么我的灯闪烁不正常

[复制链接]
 楼主| 1349236685 发表于 2015-1-17 12:51 | 显示全部楼层 |阅读模式
想让我的灯闪灭五次,关闭led一会(比如1s或者1min),再闪灭五次。
可是现在情况是先闪五次,然后灯应该亮的第一次灭的,然后亮四次,之后一直这么循环。。。关闭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,m,a;

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

        void time0() interrupt 1
        {
                uchar m=0;
            TH0=(65536-50000)/256;
            TL0=(65536-50000)%256;
            num++;      //亮灭时间判断
                a++;    //亮灭之后,led灭几秒钟等待时控制            

                if(m==0) //led亮灭
               
            {
                        if(num==10)  //led亮灭时灭
                    {
                                led=1;
                       
                        }
                    if(num==20)    //led亮灭时亮
                    {
                                num=0;
                                led=0;                                       
                                n++;                     
                       
                        }
                        if(n==5)    //亮五次之后关闭led
                        {
                       
                                n=0;
                                led=1;
                                m=1;   

                        }
                }
       
        }


void main()
{
        init();
        TMOD=0X11;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        ET0=1;
        EA=1;
        TR0=1;
       
  
        while(1)
    {
            if(m==1)          //关闭led一段时间
                {
                        led=1;
                        TH0=(65536-50000)/256;
                    TL0=(65536-50000)%256;
                        a++;
               
                        if(a==12000)
                        {
                                   a=0;
                                m=0;
               
               
                        }
                }       
    }
                 

}
cainiao_123 发表于 2015-1-17 13:01 | 显示全部楼层
为何在主程序中给定时器赋初始值?
 楼主| 1349236685 发表于 2015-1-17 13:06 | 显示全部楼层
cainiao_123 发表于 2015-1-17 13:01
为何在主程序中给定时器赋初始值?

主程序不需要  我看的一个视频就这么讲的赋值的。。。
cainiao_123 发表于 2015-1-17 13:34 | 显示全部楼层
本帖最后由 cainiao_123 于 2015-1-17 13:37 编辑
1349236685 发表于 2015-1-17 13:06
主程序不需要  我看的一个视频就这么讲的赋值的。。。

如果没有开定时器中断就可以这样赋值,否则不用这样

另:
uchar n,num,m,a;
......
a++;
      if(a==12000)
......

这里的a 永远也不会等于12000
cainiao_123 发表于 2015-1-17 13:48 | 显示全部楼层
1349236685 发表于 2015-1-17 13:06
主程序不需要  我看的一个视频就这么讲的赋值的。。。

void time0() interrupt 1
        {
                uchar m=0;
........................
                if(m==0)
                {....}

每次进中断,m 都是0 ,覆盖掉全局变量 m
.....
太混乱了
 楼主| 1349236685 发表于 2015-1-19 11:58 | 显示全部楼层
cainiao_123 发表于 2015-1-17 13:48
void time0() interrupt 1
        {
                uchar m=0;

恩,我是初学者,刚才您说的问题我都改了··谢谢您  不过还是那个现象  程序里还有问题呢~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

74

帖子

0

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

35

主题

74

帖子

0

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