单片机请各位大侠解答

#include<reg51.h>sbitD1=P1^0;Voidmain(){unsignedinta;while(1){a=50000;D1=0;while(a--)... #include<reg51.h> sbit D1=P1^0; Void main() { unsigned int a; while(1) {a=50000; D1=0; while(a--); a=50000;D1=1;while(a--);}} 请问 这个a=50000是什么意思,为什么要a=50000而是不定义别的数。还有while(a--); 是什么意思。 请各位大虾解答。谢谢了。 展开
 我来答
百度网友994effc
2012-02-28 · TA获得超过1025个赞
知道小有建树答主
回答量:759
采纳率:100%
帮助的人:194万
展开全部
■ a=50000 是给变量a赋值50000
■ 因为这是一个延时函数,给a这个值刚好循环为几秒时间。一个指令周期为一次循环。
(1)振荡周期:也称时钟周期,是指为单片机提供时钟信号的振荡源的周期,一般实验板上为11.0592MHZ,12MHZ和24MHZ用的也比较多。
(2)状态周期:每个状态周期为时钟周期的2倍,是振荡周期经二分频后得到的。
(3)机器周期:一个机器周期包含6个状态周期S1~S6,也就是12个时钟周期。在一个机器周期内,CPU可以完成一个独立的操作。
(4)指令周期:它是指CPU完成一条操作的所需的全部时间。每条指令执行时间都是有一个或几个机器周期组成。MCS-51系统中,有单周期指令、双周期指令和四周期指令。

■while(a--)可以理解为while(a--=1)

while()是条件循环,如果while内部条件满足可以永远循环下去
使用while语句应注意以下几点:
1.while语句中的表达式一般是关系表达或逻辑表达式,只要表达式的值为真(非0)即可继续循环。
void main(){
int a=0,n;
printf("\n input n: ");
scanf("%d",&n);
while (n--)
printf("%d ",a++*2);
}
本例程序将执行n次循环,每执行一次,n值减1。循环体输出表达式a++*2的值。该表达式等效于(a*2;a++)
2.循环体如包括有一个以上的语句,则必须用{}括起来, 组成复合语句。
3.应注意循环条件的选择以避免死循环。
void main(){
int a,n=0;
while(a=5)
printf("%d ",n++);
}
本例中while语句的循环条件为赋值表达式a=5, 因此该表达式的值永远为真,而循环体中又没有其它中止循环的手段, 因此该循环将无休止地进行下去,形成死循环。4.允许while语句的循环体又是while语句,从而形成双重循环

//实例22:用while语句控制LED
#include<reg51.h> //包含单片机寄存器的头文件
/****************************************
函数功能:延时约60ms (3*100*200=60000μs)
****************************************/
void delay60ms(void)
{
unsigned char m,n;
for(m=0;m<100;m++)
for(n=0;n<200;n++)
;
}
/****************************************
函数功能:主函数
****************************************/
void main(void)
{
unsigned char i;
while(1) //无限循环
{
i=0; //将i初始化为0
while(i<0xff) //当i小于0xff(255)时执行循环体
{
P0=i; //将i送P0口显示
delay60ms(); //延时
i++; //i自增1
}
}
}

参考资料:单片机宝典 http://hi.baidu.com/dzkfw/blog/item/f446f73f9fed61e6838b13f0.html
menglin501
2012-02-28 · 超过22用户采纳过TA的回答
知道答主
回答量:91
采纳率:0%
帮助的人:67.4万
展开全部
这是一个延时函数,让你的P1.0口每隔一段时间改变高低电平状态 a的值随你设,得看你具体要延时多少
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友caaea59
2012-02-28 · TA获得超过409个赞
知道小有建树答主
回答量:571
采纳率:33%
帮助的人:224万
展开全部
你可以把a理解为一个延时时间,数值可以是1--65535之间的任一值,等于1时 LED闪的太快 你根本看不出来 你可以自己改几个值体会一下 我想这样对于你学习单片机有好处
追问
我懂了。  这个延迟多长时间怎么算。?
追答
每个机器周期减一  机器周期取决于你单片机的速度和晶振频率
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式