c语言编写单片机程序时的问题?

fanglie 2007-06-28 09:16:41
在下将如下程序写到AT89S52单片机后,用示波器测试P00脚波形,发现P00输出的波形不是等间隙、等宽度的脉冲,脉冲的间隔和宽度随着bitcnt的增大而增大,是否移位指令的指令周期与所有移动的位数成正比???大侠指教。谢谢!
unsigned char bitcnt;
unsigned char mydata=0x55;
for(bitcnt =0; bitcnt<8; bitcnt++)
{
if((mydata<<bitcnt)&0x80)
P00 = 1;
else
P00 = 0;
}
...全文
216 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mymtom 2007-07-02
  • 打赏
  • 举报
回复
temp = temp/2
改为:
temp >>= 1;
fanglie 2007-07-02
  • 打赏
  • 举报
回复
感谢各位兄弟的支持,在下已找到解决的方法。共享一下:
unsigned char bitcnt;
unsigned char temp = 0x80;
unsigned char mydata = 0x55;
for(bitcnt =0; bitcnt<8; bitcnt++)
{
if( mydata & temp > 0 )
P00 = 1;
else
P00 = 0;
temp = temp/2
}
mymtom 2007-06-29
  • 打赏
  • 举报
回复
是否移位指令的指令周期与所有移动的位数成正比
--------------------
是的AT89S52的移位指令每次只能移一位。
mymtom 2007-06-29
  • 打赏
  • 举报
回复
有这种可能,试试把
if((mydata<<bitcnt)&0x80)
P00 = 1;
else
P00 = 0;
-------
改为:
mydata <<= 1;
if(mydata & 0x80)
P00 = 1;
else
P00 = 0;
mymtom 2007-06-29
  • 打赏
  • 举报
回复
mydata在for中被改变了
--------------------
为什么啊?
xxmv99 2007-06-28
  • 打赏
  • 举报
回复
mydata在for中被改变了.

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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