大家帮我看下是STC EEPROM不行,还是我程序哪里错了,10秒倒计时我都搞不定了
我设置的time=00,time=10四位数码管显示 00:10 表示10秒钟,倒计时read_time();
time_sum=time*60+time;//计算总共多少秒,每秒减一
void read_time(void)
{
time=byte_read(minute_addr);
time=byte_read(second_addr);
}
是我写入设置好time后写入EERPOM后,再从中读出来的
现在问题是 如下,我程序在模式1中,,,,正常情况下,收到启动倒计是信号,应该会从10.9.8……0倒计时,结束后 ,读回原来的时间。回到00:10
而现在的问题是,收到启动信号后,在倒计时没结束前收到停止信号,工作正常,倒计时后会回到10。。。。
可在我让倒计时自己减到0,,本来应该是回到0后,也是返回到原来的设置时间 00:10。。。可奇怪的时,它总是要先跳一个 68:14 出来。。。。然后再又
回到00:10。。为什么会先读一个错误的值出来,而后又回到正常呢,,,,但是在收到停止信号时为什么是正常的? 搞不懂
还有就是第二种模式下,我让倒计是自己减一,从10到0,然后应该回到10。。。然后再等待第二次触发信号
现在问题却是,10减到0后,回到了10。可它却接着再减1,变成了 9 停在那等第二次触,有时还是8。7.6。。。。。有时却又很正常
大家帮我看一下是我程序问题吗??还是STC内部EEPROM不稳定?。。。。
不胜感激!!!
if(0xa1==mod)//模式1,停止信号 优先,收到停止信号,停倒计时,当然,倒计时结束后还没收到停止信号,也自动产生一个停止信号
{
if(start_time)//收到从机启动倒计时触发信号
{
if(time_sum--)//减一秒
{
time_over=0;
time=time_sum/60;
time=time_sum%60;
}
else //倒计时时间为0
{
start_time=0;
time_over=true;//定时时间到,发送信号通知从机产生停止信号和关风机
}
}
if(stop_time)//在定时时间到之前,收到从机发过来的停止倒计时触发信号,停止倒计时
{
time_over=0;
stop_time=0;
delayms(20);//待数据稳定后,读数据
read_time();//重新读回设置时间
time_sum=time*60+time;
}
}
if(0xa2==mod)//定时器优先模式,,不检测从机的停止触发信号
{
if(start_time)//收到启动倒计时信号
{
if(time_sum--)
{
time_over=0;
time=time_sum/60;
time=time_sum%60;
}
else
{
time_over=1;//定时时间到,通知从机关风机
start_time=0;
delayms(20);//待数据稳定后,读数据
read_time();//重新读回设置时间
time_sum=time*60+time;
mod2_over=1;
}
}
if(mod2_over && stop_time)
{
mod2_over=0;
time_over=0;
stop_time=0;
}
}
从机那边 if(time_over)//收到主机发过来的,定时时间到标志位,关电机
{
start_time=0;//
stop_time=1;//
FansOff();
} uchar time;
EEPROM 的读写,我也试过了,能读能写。。就是在这个自动倒计时结束才会出问题,其它都不出问题。。。我触发后也是执行
if(stop_time)//在定时时间到之前,收到从机发过来的停止倒计时触发信号,停止倒计时
{
time_over=0;
stop_time=0;
delayms(20);//待数据稳定后,读数据
read_time();//重新读回设置时间
time_sum=time*60+time;
}
倒计是结束也是执行它,可结果却不同,,,我很讷闷呀,,,老是要先闪一个其它的值出来,然后再是正确的值 自已分析,可是没找到理由
为什么收到停止信号是正常的,因为没减到0
为什么自动减到0就不正常了,,,可能是减到0后,它还在往下减,所以出现了负的
可……唉,自己在程序里也没找到其错误在哪 68:14,按LZ你的算法,可以得到:68*60+14=4094,这个数字很有意思啊…… time_sum==-2时,即16位int的65534时
65534/60=1092=0x0444,赋给8位变量时只取了低8位0x44=68
65534%60=14
68:14就这么来的
至于为什么,代码不全,无法继续分析 谢谢哈
找到问题
if(time_sum--)问题,
改成if(time_sum>=0)就好了
郁闷的是 我time_sum是unsigned int...怎么会减到负数去了呢 为什么减到负数很简单,凌晨精神不好懒得仔细看
当time_sum==0时
if(time_sum--)
{
这里的确是不执行了
}
但执行完后,time_sum就是-1了 4094,有意思,哈哈 我有个疑问,当一个整形数组减为0后继续减不是0XFF吗?起码汇编里面是这样的?
页:
[1]