判断语句求助

2020-02-04 09:02发布

下面的语句中,
sys_t1s是系统时钟1S的标志位,

        if(sys_t1s==0x01) //如果系统到达1s,则执行操作
        {
                if(P1==0xfe)
                {
                        P1=0xff;
                }
                else
                {
                        P1=0xfe;
                }
                sys_t1s=0x00;
        }

监视窗口如下:
1.JPG (62.9 KB, 下载次数: 0) 下载附件 2012-4-30 19:27 上传

系统无法进入IF语句中。

各位高手,困扰一天了,给点提示吧。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
18条回答
horalxi
2020-02-06 02:15
ourdev850725 发表于 2012-4-30 23:34
刚看了下手册,确实不用手动清的,不太记得了,那就把变量加volatile属性试试,别的没发现什么问题 ...

试过volatile,还是不行。
实在无语了,就把所有文件集中到一个文件里:
#include <reg52.h>
//#include "timer.h"
//#include "led.h"
#include "MacroAndConst.h"

uchar sys_t1s=0;
uchar temp=0;

void timer0_initial(void)
{
    TMOD=0x01 ;      //定时器0工作方式1
    TH0=(65536-50000)/256;      //定时器初始值
    TL0=(65536-50000)%256;
    TR0=1 ;
    ET0=1 ;
}


void timer0() interrupt 1
{
    TH0=(65536-50000)/256;      //定时器初始值
    TL0=(65536-50000)%256;

        if((temp++)>18)
        {
                sys_t1s=1;
                temp=0;
        }
        //TF0=0;
}

void led_changestate()
{
        
        if(sys_t1s==1)
        {
                if(P1==0xfe)
                {
                        P1=0xff;
                }
                else
                {
                        P1=0xfe;
                }
                sys_t1s=0;
        }
}


void main(void)
{
        P1=0xfe;
        timer0_initial();
        EA=1;
        
        while(1)
        {
                   led_changestate();
        }
}

测试成功。

看起来还是模块化中有点问题,
还在继续摸索ing。

谢谢各位大侠的指导。

一周热门 更多>