单片机中的一个小程序运算最后结果离我想象有差别,请看下面的代码:
#include<reg52.h>
#include<absacc.h>
sbit BUZ_BIT = P0^3;
sbit WR_BIT = P3^6;
sbit LED_BIT = P1^6;
void my_delayls(void)
{
unsigned i,j;
for(i = 154;i > 0;i--)
for(j = 1000;j > 0;j--);
}
void main(void)
{
unsigned char buz_stu = 0; //蜂鸣器状态
unsigned char led_stu = 0; //流水灯状态
P2 = 0x88;
while(1)
{
buz_stu ^=(1<<3);
WR_BIT = 0;
P0 = buz_stu;
WR_BIT = 1;
led_stu <<=1;
if(led_stu == 0)
{
led_stu = 0x01;
}
LED_BIT = 1;
P0 = led_stu;
LED_BIT = 0;
my_delayls();
}
}
调试的结果是在while循环之中,buz_stu的值一直在0x00,0x08之间不停的循环着。我将代码下载到单片机上面,蜂鸣器也是一响一停。 但是我个人却始终算不出来buz_stu的值怎么会从0x08又像0x00变化的。我算出来的是buz_stu从0x00,变成0x08之后,就一直都是0x08了。 请问buz_stu的值一直在0x00,0x08之间不停的循环着是怎么算出来的?谢谢
[解决办法]
buz_stu.bit3 = 0
(1 << 3).bit3 = 1
loop1 : 0 xor 1 = 1
loop2 : 1 xor 1 = 0
loop3 : 0 xor 1 = 1
......
没有问题啊。你怎么会算出变成0x08之后就不变了涅?