助:为什么我再进行 & 操作前,数据总线的值,变化了呢?谢谢!
请教:
#define BuJinDj11 *((uchar8 xdata*)0xF0FF) //定义步进电机1 访问的数据地址 (5740)
int main()
{
TMOD = 0x01; //T/C0 工作在定时期器 1
TH0 = (65536-1000)/256;; //预置计数初值,每 5 ms 中断一次
TL0 = (65536-1000)%256;
EA = 1; //CPU 开中断
ET0 = 1; //T/C0 开中断
TR0 = 1; //启动 T/CO 开始定时
i=1;
BuJinDj11 = 0xFB ; //初始化 现在最后以为为1
while(1)
{
;
}
return 1;
}
void Timer0(void) interrupt 1 //喂狗中断程序
{
TH0 = (65536-4000)/256; //重载计数初值 每 5 ms 中断一次
TL0 = (65536-4000)%256;
if (i== 1) //现在最后一位是1,那么就置 0
{
BuJinDj11 = (BuJinDj11 & 0xfe) ;
i=0;
}
else //现在最后一位为0,那么就置 1
{
BuJinDj11 = (BuJinDj11 | 0x01) ;
i=1;
}
WDogZdJs ++;
if ( WDogZdJs >= 20 )
{
P3_4 =! P3_4 ; //不停喂狗
WDogZdJs = 0;
}
return ;
}
可是 BuJinDj11 = (BuJinDj11 & 0xfe) ;
BuJinDj11 进行 & 操作前 ,她的值,已经变化,不是我想要的值,这是为什么啊?
BuJinDj11 = (BuJinDj11 & 0xfe) ;
这个语句使别的位都发生了变化,应该是 在 进行 & 操作时,
BuJinDj11 发生了变化,为什么会出现这样的情况呢?
我要怎么才能进行正确的操作呢
总线上还接有其他的器件
void Timer0(void) interrupt 1 //喂狗中断程序
{
TH0 = (65536-4000)/256; //重载计数初值 每 5 ms 中断一次
TL0 = (65536-4000)%256;
if (i== 1) //现在最后一位是1,那么就置 0
{
//BuJinDj11 = (BuJinDj11 & 0xfe) ;
i=0;
BuJinDj11 = 0xFa ;
}
else //现在最后一位为0,那么就置 1
{
//BuJinDj11 = (BuJinDj11 | 0x01) ;
i=1;
BuJinDj11 = 0xFb ;
}
WDogZdJs ++;
if ( WDogZdJs >= 20 )
{
P3_4 =! P3_4 ; //不停喂狗
WDogZdJs = 0;
}
return ;
}
这样直接赋值,是可一正确显示的。
谢谢!