判断语句求助
下面的语句中,sys_t1s是系统时钟1S的标志位,
if(sys_t1s==0x01) //如果系统到达1s,则执行操作
{
if(P1==0xfe)
{
P1=0xff;
}
else
{
P1=0xfe;
}
sys_t1s=0x00;
}
监视窗口如下:
系统无法进入IF语句中。
各位高手,困扰一天了,给点提示吧。 main函数呢? jshjx 发表于 2012-4-30 21:40 static/image/common/back.gif
main函数呢?
main函数没问题,
就是这个IF语句进不去,
明明条件成立的,
就是不执行,
哎。 不给完整的程序,人家怎么帮你呢 ourdev850725 发表于 2012-4-30 22:21 static/image/common/back.gif
不给完整的程序,人家怎么帮你呢
这是全部代码。 变量加volatile属性 都放一个文件中不行吗?》 b260123292 发表于 2012-4-30 22:27 static/image/common/back.gif
变量加volatile属性
大侠,能给解释一下吗?
xiaobendan001 发表于 2012-4-30 22:36 static/image/common/back.gif
都放一个文件中不行吗?》
为了结构清晰,程序模块化。
所以做成了头文件。 哪位大侠能告诉我为什么判断不了? 为啥不清中断标志呢? ourdev850725 发表于 2012-4-30 23:15 static/image/common/back.gif
为啥不清中断标志呢?
定时器不用手动清中断位吧? horalxi 发表于 2012-4-30 23:20 static/image/common/back.gif
定时器不用手动清中断位吧?
刚看了下手册,确实不用手动清的,不太记得了,那就把变量加volatile属性试试,别的没发现什么问题 试试吧volatile xiaobendan001 发表于 2012-5-1 07:40 static/image/common/back.gif
试试吧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。
谢谢各位大侠无私的指导。 ourdev850725 发表于 2012-4-30 23:34 static/image/common/back.gif
刚看了下手册,确实不用手动清的,不太记得了,那就把变量加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。
谢谢各位大侠的指导。 horalxi 发表于 2012-4-30 23:04 static/image/common/back.gif
大侠,能给解释一下吗?
如果是在中断中操作变量,需要加保护 b260123292 发表于 2012-5-1 12:11 static/image/common/back.gif
如果是在中断中操作变量,需要加保护
查了一下资料,大概了解了用法。
谢谢。
页:
[1]