51单片机C程序答疑!求各位大哥关照!
时间:10-02
整理:3721RD
点击:
if(s==0xff)和if(s==0)的区别是什么?
在下面的程序中前者能返回m=0,s=0, 而后者做不到!
TH0=(65536-2000)/256; //重新赋值 2ms
TL0=(65536-2000)%256;
if(Fg==1)
{
n++;
if(n==500)
{
n=0;
if((m!=0)||s)
s--;
if(s==0xff)
{
s=59;
if(m>0)
{
m--;
}
}
}
}
S应该是无符号数,无符号数减到0以后就回到0xFF了。
这种编码风格实在无语。
程序看不大懂,但0xff是十六进制,转化成二进制是1111 1111,和0数值不等。
s的初始值是多少,考虑下,
这是一个定时报警的程序!当时间的减至 00—00时启动报警器
void Timer0_isr(void) interrupt 1
{
TH0=(65536-2000)/256; //重新赋值 2ms
TL0=(65536-2000)%256;
Display(0,8);
if(Fg==1)
{
n++;
if(n==500)
{
n=0;
if((m!=0)||s)
s--;
if(s==0xff)
{
s=59;
if(m>0)
{
m--;
}
}
}
}
}
其中m=99;s=59; 关键就是if(s==0xff) 这个判断语句 是怎样实现其功能的呢? s是整形变量(int)
理解不对,
if((m!=0)||s)
s--;
这个限制了S=0以后再减,看不懂了。
谢谢点播!我明白了, 但是要用定时器做一个定时报警器(当时间减至00—00时,触发警报),目前为止我觉得这是最好的算法,如有优势算法,还望指导!谢谢