单片机问题,求教高手下面一段程序原理,希望能逐句给出解释,非常感谢

#include<reg51.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
void DelayMS(uint ms)
{
uchar t;
while(ms--) for(t=0;t<120;t++);
}

void main(void)
{
uchar i;
P1=0xfe;
for(i=0;i<8;i++)
{
DelayMS(200);
P1=_crol_(P1,1);
}
P1=0xff;
P0=0x7f;
for(i=0;i<8;i++)
{
DelayMS(200);
P0=_cror_(P0,1);
}
// DelayMS(200);
}

#include<reg51.h>//头文件
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
void DelayMS(uint ms)//延时函数
{
uchar t;
while(ms--) for(t=0;t<120;t++);
}

void main(void)//主函数
{
uchar i;
P1=0xfe;//将P1口的八个管脚拉电平11111110,即P1.0为低,其他为高,点亮流水灯。
for(i=0;i<8;i++)
{
DelayMS(200);
P1=_crol_(P1,1);//将P1口的赋值循环左移,该语句执行一次,开始时由
11111110变成11111101,再执行一次,变成11111011,以此类推。可以看见流水灯动起来了。
}
P1=0xff;//全部变为高电平
P0=0x7f;//P0口电平拉为01111111
for(i=0;i<8;i++)
{
DelayMS(200);
P0=_cror_(P0,1);//循环右移,和循环左移原理相似
}
// DelayMS(200); //延时
}

有什么不懂得可以问,望采纳!!!!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-10-12
1.头文件,里面主要是一些单片机端口、寄存器等的宏定义。
2.头文件,里面包含了移位函数,就是那个_cror_(右移)和_crol_(左移),把此句屏蔽,P1=_cror_(P1,1)和P0=_crol_(P0,1)处会报错的。
3、4.宏定义,用uint 代替unsigned int ,用uchar代替unsigned char,书写方便。
5.void DelayMS(uint ms)
{
.........
}
延时函数,uint ms 是函数的形参,具体延时多长时间自己定义。
6.主函数:
先定义了一个局部变量i,然后把0xfe赋值给P1口,然后进入for循环中,先延时,然后是向左移动一位,再延时,再移动,循环8次,把0xff赋值给P1口,把0x7f赋值给P0口,进入for循环中,这次是右移函数,循环8次。
程序执行完毕!
这个很简单的,自己多看看相关例程,就会很快掌握的。还有,好好看C语言编程!
最重要的是,采纳!!!!!
第2个回答  2011-10-12
建议 去 我的领地 5d6d 的 proteus 论坛看看

那里有很多 单片机仿真实例,包括仿真图 和 源码
搜 5d6d 和 proteus 2个关键词

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网