想让八个二极管从左到右依次闪烁,在从右到左依次闪烁。重复两次
出错程序如下
for(a=2;a>0;a--){
for(P1=0XFE;P1!=0X7F;P1=left(P1));
for(P1=0XFF;P1!=0XFE;P1=right(P1));}
其中left和right分别是左移和右移函数没有发现问题
uint left(uint P1){
_crol_(P1,1);
delay();
return P1;
}
uint right(uint P1){
_cror_(P1,1);
delay();
return P1;
}
为什么不能成功呢,求高人指点。。
这个是不会成功的.因为单片机中的P1不是变量,是端口.给P1赋值是把对应值输出到端口,读取P1是读取端口.两个是完全无关的操作.
for(P1=0XFE;P1!=0X7F;P1=left(P1));中P1!=0xF7就对端口P1进行了读取,left(P1)又读取,P1=这样的是输出到端口P1. 读取的情况就不能确定了,如果外围电路没有变化,那么P1端口就没有变化,读取到的值也不变,当然循环就永远进行下去或者只进行一次;如果外围电路变化,那么电路的变化也不会和循环移位有关,所以循环也不确定.
可以增加一个变量,改为
unsigned char b;最好左右移函数中P1也改掉,因为理解上容易混淆.
追问谢谢你的帮助,ff改7f那个地方确实是我疏忽了,不过按照你说的新增变量后for循环色问题还是没有解决啊,P1总是停在了0xfe,不知道怎么办才好
追答是我疏忽了。观察不到现象是因为速度太快的问题。可以进行单步调试(如果支持的话);或者加上延迟程序,如下:
unsigned char b; 最终肯定还是停在0xFE上,因为for(a = 2; a > 0; a--)就做两次可以考虑改为while(1),那么就会无限循环下去。
不是这个原因,不过谢谢你的提醒,我在for中间都加delay()了。不过结果还是一样,P1停在了0xfe
为什么我的单片机c语言中for循环有问题呢,如下
这个是不会成功的.因为单片机中的P1不是变量,是端口.给P1赋值是把对应值输出到端口,读取P1是读取端口.两个是完全无关的操作.for(P1=0XFE;P1!=0X7F;P1=left(P1));中P1!=0xF7就对端口P1进行了读取,left(P1)又读取,P1=这样的是输出到端口P1. 读取的情况就不能确定了,如果外围电路没有变化,...
单片机c语言for循环出问题了
还有个小问题,delay();定义的是uchar型,赋值竟然是600
c语言中for循环疑问:
for语句过程为:1、计算表达式1 的值;2、判断表达式2,当其条件成立,执行循环体语句,然后执行第3步(你这里是j<5 所以执行条件应该是j= 0,1,2,3,4。如果想j=5也执行可以用 j<6或者j<=5);当表达式2的条件不成立时,结束循环执行第5步。3、计算表达3;(注意一下,第2步中要求了 执...
怎么用汇编语言实现for循环
汇编语言实现for循环十分容易,比如51汇编,用DJNZ指令就可以了,举例如下:C语言:for(i=0;i<10;i++)a=a+i;汇编语言:i equ 30h m equ 31h ...mov i,#0 mov m,#0 mov r2,#10 loop:mov a,i add a,m mov m,a djnz r2,loop ...
单片机C语言中碰到的问题?
都是循环延时函数,其中都包含了如下两句;for(m=20;m>0;m--) 、 for(n=20;n>0;n--);但是不同的是语义不同(这里就是有无“;”分号的不同);而 是镶套循环,那么其循环次数 = m * n;而 则是两个独立的循环,其循环次数 = m + n;...
单片机的C程序中的问题
1、关于delay内的三个for指令:20、248都是循环的次数。这是个三级嵌套循环。如果是12MHz晶振的情况下,一次delay大约是800ms。C中的这种循环延时具体时间取决于晶振、使用的语句、编译选择等多个条件,这里不能完全确定 for(i=20;i>0;i--){\/\/最外层循环,每次i-1,直到i=0,计20次 for(j=20...
单片机彩灯控制
一、C语言程序中存在的问题1.“for(i=0;i<7;i=i+2)”是“左移4次”而不是“左移3次”,i=0,i=2,i=4,i=6,当i=8时结束for循环。2.“LED=(LED<<2)|0x03;”的含义是:将LED左移2位后,将最低两位置1。3.“LED=(LED>>2)|0xc0;”的含义是:将LED右移2位后,将最高两...
...为什么上面第一个FOR语句的后面是左移,下面的FOR语句就是右移了啊...
关键语句在于两个for中的“a=_crol_(a,1);”和“a=_cror_(a,1);”,可以发现用的是两个不同的函数_crol_()和_cror_(),一个左移,一个右移
单片机for什么意思
这是C语言的循环语句。你是刚学C语言吗?用法:for(j=0;i<8;j++){ 循环体 } 表示循环变量是j ,循环时,变量j 从0开始,每次加1,当小于8时循环,等于8时,不满足条件了,就结束循环了。每次循环,循环体就执行一遍。
关于C语言KEIL的一个问题,似乎是BUG啊。双循环FOR这是肿么了?_百度知...
首先说一下,我不懂单片机的知识哈。但你之所以会出现这种原因,我在VC6.0下编了一个类似的c文件,跟你说的效果一样,这个我觉得是这样解释的,for结构是一个整体,所以如果出现"for(i=1;i<10;i++);",这样的语句,你会发现你单步调试的时候是直接出现了"i==10"的效果,因为他是一个整体...