单片机中的一个小程序运算最后结果离小弟我想象有差别,请看上面的代码

单片机中的一个小程序运算最后结果离我想象有差别,请看下面的代码:

 #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之后就不变了涅?