打印

新手请教单片机问题!

[复制链接]
557|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
这个流水灯程序,是位移8位的,可第8颗灯不亮怎么回事?
#include "STC15W4K.H"              // 注意宏定义语句后面无分号
void delay100ms()
{
unsigned char i,j,k;
                                                // i,j,k 由由软件计算出并验证正确。
for(i=157;i>0;i--)                      // 注意后面没分号
for(j=9;j>0;j--)                         // 注意后面没分号
for(k=194;k>0;k--);                // 注意后面有分号
}
void port_mode()                     // 端口模式
{
                                               // 同例 1.3
}
void main()
{
unsigned char a;
port_mode();                           // 将单片机所有端口配置为准双向弱上拉方式
while(1)
{
P0 =~(1<<a++);                        // 第一次运行时 0000 0001<< 0 = 0000 0001
delay100ms();
if (a==0x08)                                 // 允许左移 8 次。
{
a=0;
}
}
}

使用特权

评论回复
评论
chunk 2020-11-5 01:31 回复TA
如果你是在真实的实验板上跑程序,那就把P0=~(1<<a++)改成P0=0x7F,以此确认LED是好的并且到P0.7口线之间的电路没问题。 

相关帖子

沙发
xyz549040622| | 2020-9-28 16:07 | 只看该作者
本帖最后由 xyz549040622 于 2020-9-28 16:12 编辑

看着是没什么问题的,需要实时跟踪P0的赋值,你可以串口实时输出这个值看看。

使用特权

评论回复
板凳
gddddd| | 2020-9-28 19:07 | 只看该作者
本帖最后由 gddddd 于 2020-9-28 20:09 编辑

P0 =~(1<<a++);                        // 第一次运行时 0000 0001<< 0 = 0000 0001
感觉就是上面这一句的问题,请度娘关键字“按位取反运算符与补码”,计算机存储的二进制数是补码形式,按位取反后补码快速计算公式为:~x = -(x + 1),所以
第一次运行时 0000 0001<< 0 = 0000 0001 补码是-(1+1)=-2,二进制是11111110,正确
第二次运行时 0000 0001<< 1 = 0000 0010 补码是-(2+1)=-3,二进制是11111101,正确
。。。
第七次运行时 0000 0001<< 6 = 0100 0000 补码是-(64+1)=-65,二进制是10111111,正确
但第八次运行时移位后的1000 0000 按位取反的最终结果好像不为0111 1111,所以8第八灯不亮
建议定义16位数来移位取反,再截取低八位送给P0,回头我也验证一下


查了资料1000 0000表示-128,这个数有点特别,补码还是1000 0000不能套用快速计算公式,所以最后一次跑马灯的亮灯是8灯不亮,其他1-7全亮?

使用特权

评论回复
地板
gddddd| | 2020-9-28 23:05 | 只看该作者
仿真了一下,感觉没问题呀,看代码仿真的结果,P0口是正常的,应该不会出现P0.7不亮才是,有点迷糊了,看来按位取反没出错的

使用特权

评论回复
5
发烧友真男人| | 2020-10-31 16:48 | 只看该作者
我这边看了半天,感觉是你第一句的问题,但是总的看下来又感觉不是,给我的感觉就是第一眼看上去第一句就不太对劲。

使用特权

评论回复
6
MianQi| | 2020-11-7 10:44 | 只看该作者
for(i=157;i>0;i--)                      // 注意后面没分号
for(j=9;j>0;j--)                         // 注意后面没分号
for(k=194;k>0;k--);

这里没有分号,也没有大括号吗?

使用特权

评论回复
发新帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

224

帖子

1

粉丝