助:为什么我再进行 & 操作前,数据总线的值,变化了呢?谢谢!

WSXN998 2006-08-09 02:32:37
请教:
#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 ;
}

这样直接赋值,是可一正确显示的。


谢谢!
...全文
165 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
toofree 2006-08-18
  • 打赏
  • 举报
回复
SORRY,看错了,还以为是直接操作的呢.
上面应该不存在问题.
请问0xF0FF地址上是接的什么东西.如果是存储器的话,上面的程序没问题.
不知道你的步进电机是怎么驱动的
toofree 2006-08-18
  • 打赏
  • 举报
回复
哈哈,你又读又写是什么意思嘛
BuJinDj11 = (BuJinDj11 & 0xfe) ;
这一句中,首先是对BjJinDj11读的是吧,读出来的数才与0xfe位与的
然后再写入,不错才怪呢
icesnows 2006-08-14
  • 打赏
  • 举报
回复
的确重复了
flowercity 2006-08-11
  • 打赏
  • 举报
回复
修改与操作代码为
BuJinDj11 = (BuJinDj11 & 0x0fe) ;


警告:
同一个内容的帖子,不能重复发
否则删除,扣信誉
WSXN998 2006-08-09
  • 打赏
  • 举报
回复
各位大哥来帮帮我啊!
WSXN998 2006-08-09
  • 打赏
  • 举报
回复
高手呢~
来帮帮我啊~

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧