搜索
bottom↓
回复: 17

判断语句求助

[复制链接]

出0入0汤圆

发表于 2012-4-30 19:28:08 | 显示全部楼层 |阅读模式
下面的语句中,
sys_t1s是系统时钟1S的标志位,

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

监视窗口如下:


系统无法进入IF语句中。

各位高手,困扰一天了,给点提示吧。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-4-30 21:40:23 | 显示全部楼层
main函数呢?

出0入0汤圆

 楼主| 发表于 2012-4-30 22:14:48 | 显示全部楼层
jshjx 发表于 2012-4-30 21:40
main函数呢?

main函数没问题,
就是这个IF语句进不去,
明明条件成立的,
就是不执行,
哎。

出0入0汤圆

发表于 2012-4-30 22:21:01 | 显示全部楼层
不给完整的程序,人家怎么帮你呢

出0入0汤圆

 楼主| 发表于 2012-4-30 22:24:31 | 显示全部楼层
ourdev850725 发表于 2012-4-30 22:21
不给完整的程序,人家怎么帮你呢

这是全部代码。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-4-30 22:27:24 | 显示全部楼层
变量加volatile属性

出0入0汤圆

发表于 2012-4-30 22:36:30 | 显示全部楼层
都放一个文件中不行吗?》

出0入0汤圆

 楼主| 发表于 2012-4-30 23:04:20 | 显示全部楼层
b260123292 发表于 2012-4-30 22:27
变量加volatile属性

大侠,能给解释一下吗?

出0入0汤圆

 楼主| 发表于 2012-4-30 23:05:24 | 显示全部楼层
xiaobendan001 发表于 2012-4-30 22:36
都放一个文件中不行吗?》

为了结构清晰,程序模块化。
所以做成了头文件。

出0入0汤圆

 楼主| 发表于 2012-4-30 23:09:45 | 显示全部楼层
哪位大侠能告诉我为什么判断不了?

出0入0汤圆

发表于 2012-4-30 23:15:17 | 显示全部楼层
为啥不清中断标志呢?

出0入0汤圆

 楼主| 发表于 2012-4-30 23:20:17 | 显示全部楼层
ourdev850725 发表于 2012-4-30 23:15
为啥不清中断标志呢?

定时器不用手动清中断位吧?

出0入0汤圆

发表于 2012-4-30 23:34:34 | 显示全部楼层
horalxi 发表于 2012-4-30 23:20
定时器不用手动清中断位吧?

刚看了下手册,确实不用手动清的,不太记得了,那就把变量加volatile属性试试,别的没发现什么问题

出0入0汤圆

发表于 2012-5-1 07:40:17 | 显示全部楼层
试试吧volatile

出0入0汤圆

 楼主| 发表于 2012-5-1 08:48:19 | 显示全部楼层
xiaobendan001 发表于 2012-5-1 07:40
试试吧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。

谢谢各位大侠无私的指导。

出0入0汤圆

 楼主| 发表于 2012-5-1 08:50:12 | 显示全部楼层
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。

谢谢各位大侠的指导。

出0入0汤圆

发表于 2012-5-1 12:11:22 | 显示全部楼层
horalxi 发表于 2012-4-30 23:04
大侠,能给解释一下吗?

如果是在中断中操作变量,需要加保护

出0入0汤圆

 楼主| 发表于 2012-5-1 14:52:51 | 显示全部楼层
b260123292 发表于 2012-5-1 12:11
如果是在中断中操作变量,需要加保护

查了一下资料,大概了解了用法。
谢谢。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 02:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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