本人在单片机学习的过程中遇到一个问题 ,源程序如下,但是确不能完全理解下面三条语句的作用;
a=_crol_(a,j);
P1=0xff;
a=a<<1;
另请帮忙分析 ,外层循环和内层循环的作用;
其实我主要是不明白如果实现P0 = a;的循环次数,如何达到题目那种效果的,这个问题困扰了我差不多一周了。不知如何解决,麻烦知道的帮忙解释下,非常感谢;逻辑应该很清晰,就是这个语句实现有些看不明白;最好把for中的语句详细说明下~
题目:间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,依次到8个管亮,然后重复整个过程。
#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
uchar a,i,j;
while(1)
{
a=0xfe;
for(j=0;j<8;j++)
{
for(i=0;i<8-j;i++)
{
P1=a;
delay(200);
a=_crol_(a,1);
}
a=_crol_(a,j);
P1=0xff;
a=a<<1;
}
}
}
楼下说的都非常精彩 我自己编写的程序只和源程序差一行 a = _crol_(a, j); 这条语句~ 结果在执行前两次的时候没问题,到执行第三次的时候程序开始差一位程序跑飞了。我一直理解不了这点,别的应该没问题,麻烦帮忙继续解答下。
---------------------------------------------------------------------------------------------
针对楼下问题本人想继续说明 本人在调试的时候
a=_crol_(a,j); //这是我一直想不明白的指令 原因是不加这条指令循环不正常。但是这个怎么配合循环
P1=0xff; //这条指令有无无妨大碍 至少对于我的ME300B开发板是这样
a=a<<1; //这条指令 如果没有上边的a=_crol_(a,j); 执行前两次是正常的 就是 i = 0 和 i=1的时候是正常 ,但是当i= 2往上就不能正常循环了。
对于整个程序的指令 单条拿出来我是明白的 指令执行的逻辑我也很清晰 不明白的就是如何实现当 i > 2也就是从3个LED开始亮 是如何循环上去的
就是不明白a=_crol_(a,j); 这条指令时怎么配合程序执行的~ 为什么把这个a=_crol_(a,j); 删除就出错
我自己编写的程序就是少了a=_crol_(a,j); 这条指令 而直接a = a << 1; 谢谢大家悉心指教~