打印

这样循环下去?

[复制链接]
305|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wenfen|  楼主 | 2017-8-19 12:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为什么灯在5秒之后不闪?我想让灯亮五次之后,5秒之后继续闪五次。。。这样循环下去?
沙发
tian111| | 2017-8-19 12:17 | 只看该作者
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
板凳
wenfen|  楼主 | 2017-8-19 12:21 | 只看该作者
#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)
    {
            
    }
                 

}

使用特权

评论回复
地板
songqian17| | 2017-8-19 12:23 | 只看该作者
定时器停掉了.

使用特权

评论回复
5
wenfen|  楼主 | 2017-8-19 12:25 | 只看该作者

定时器我又置1了~~在else里

使用特权

评论回复
6
chenho| | 2017-8-19 12:27 | 只看该作者

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

这可不是好的习惯

使用特权

评论回复
7
huwr| | 2017-8-19 12:30 | 只看该作者

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

        if(m==0)

这里的初始化为0了,每次判断都会为0,是何意呢

使用特权

评论回复
8
huanghuac| | 2017-8-19 12:34 | 只看该作者
定时器初值不需要多次装载,进中断装载就可以了

使用特权

评论回复
9
wenfen|  楼主 | 2017-8-19 12:37 | 只看该作者
为0时闪,为1时是暂停5秒

使用特权

评论回复
10
bqyj| | 2017-8-19 12:43 | 只看该作者

每次进来都初始化为0了,还有可能为1吗,即使为1也被初始化为0了

使用特权

评论回复
11
zhuhuis| | 2017-8-19 12:46 | 只看该作者

m用全局变量,或用静态变量static

使用特权

评论回复
12
wenfen|  楼主 | 2017-8-19 13:21 | 只看该作者
嗯,那staic怎么用?我是菜鸟,谢谢您~~

使用特权

评论回复
13
songqian17| | 2017-8-19 13:50 | 只看该作者

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

                        }
你的这个if语句把定时器关了,也就是说当执行完if(n==5)之后程序停留在while循环里,不会再进入中断子程序,这样说明白么

使用特权

评论回复
14
gongche| | 2017-8-19 13:53 | 只看该作者
LZ写得有点复杂了,变量m没必要,重复赋值TH0=(65536-50000)/256;TL0=(65536-50000)%256;,而且这应该是50ms的定时器吧,你让它计时到num==20时,也就是1s,再让n==5时,再改变LED,直接让num==100不就行了吗?而且你想让LED闪烁,可以用异或语句,LED ^= 1;之类的不是简单点吗

使用特权

评论回复
15
wenfen|  楼主 | 2017-8-19 13:57 | 只看该作者
num=20时要清0,要是num=100,led取余的话,灯也不能闪啊  请问这个问题怎么解决?谢谢~~我写的确实有点复杂

使用特权

评论回复
16
huanghuac| | 2017-8-19 13:59 | 只看该作者

你可以定义一个延时函数delay,然后在定时器中断中定义变量flag标志位,以为每次5s,一种情况是闪的,另一个是灭的,有个标志位方便些。中断里面大概思路是这样写
                        if(num == 100)
                        {
                                num = 0;
                                flag = ~flag;
                                while(flag)
                                {
                                        led ^= 1;
                                        m++;
                                        delay();
                                        if(m == 5)
                                        {
                                            m = 0;
                                            break;
                                         }                                          
                                }                                
                        }

使用特权

评论回复
17
wenfen|  楼主 | 2017-8-19 14:02 | 只看该作者
哦,那我就知道怎么回事了,多谢大家,结贴了哈

使用特权

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

本版积分规则

737

主题

8940

帖子

8

粉丝