读书人

单片机中的一个小程序运算最后结果离小

发布时间: 2013-03-26 09:54:34 作者: rapoo

单片机中的一个小程序运算最后结果离我想象有差别,请看下面的代码:
单片机中的一个小程序运算最后结果离小弟我想象有差别,请看下面的代码
#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之后就不变了涅?

读书人网 >单片机

热点推荐