完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
#include
void delay(void) { unsigned int n; for(n=0;n<60000;n++) ; } void main(void) { unsigned char i; while(1) { P0=0xff; delay(); for(i=0;i<8;i++)//设置循环次数为8 { P0=P0>>1; //每次循环P0的各二进位右移1位,高位补0 delay(); //调用延时函数 } } } 程序来自论坛内《十天学会单片机实例100》的实例18 我只把P1口改为了P2口 试验时只有最高位那个灯闪烁 但是做软件仿真时 发现在第一个循环8次内 P0的值会发生一位变化 在第二次while循环内 P0赋为0xff,接着for循环一次 P0就变成0x00了,之后一直为0x00,直到重新进行下一个while循环
|
|
相关推荐
19个回答
|
|
|
不要直接用P0移位,定义一个变量用移位后再赋给P0
|
|
|
|
|
|
|
|
|
|
|
|
嘿 还真是 我改成这个居然可以了 m=m>>1; P0=m; 但是我依稀记得可以直接赋的啊 我笔记上都这样记的 |
|
|
|
|
|
囧 我以前的程序都这样写了 P0>>=1 都是可以的 {:soso_e118:} 凌乱了.......... |
|
|
|
|
|
难道是读端口之前要写高?
|
|
|
|
|
|
P0=_crol_(P0,1); /*循环左移
变量=_crol_(变量名,移动位数) _cror_是循环右移,用法一样,都是是库函数*/ 或者你用这个循环移位的函数试试 #include |
|
|
|
|
|
我一般是用P0++ 自动循环,比楼上的好
|
|
|
|
|
|
这个跟MCU与开发环境有关系
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
楼主要继续加油啊。
|
|
|
|
|
|
|
|
|
|
|
|
呵呵呵呵呵
|
|
|
|
|
|
什么回事??
|
|
|
|
|
|
QQASDFGH
|
|
|
|
|
|
对的 我们的编译环境不一样 这个程序在我的实验板上就能达到和程序的一眼的效果 全灭到一个亮 两个亮三个亮...
|
|
|
|
|
|
也遇到过,偏要设置个变量=P口才可以,没搞懂为什么,能解决就行吧
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
265 浏览 0 评论
【原创】【RA4M2-SENSOR开发板评测】低功耗+USB综合测试
789 浏览 0 评论
1306 浏览 2 评论
787 浏览 0 评论
【RA4M2-SENSOR开发板评测】Analogue+Timers综合测试
1587 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
16901 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 04:58 , Processed in 1.042168 second(s), Total 109, Slave 90 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2515