51单片机少写了一个循环语句,为什么还能执行循环,错在哪里呢?程序如下:

问题描述:

51单片机少写了一个循环语句,为什么还能执行循环,错在哪里呢?程序如下:
#include
void delay(unsigned int t);
sbit duan=P2^6;
sbit wei=P2^7;
unsigned char a;
unsigned char code table[]=
{
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
void main()
{
wei=1;
P0=0xc0;
wei=0;
for(a=0;a0;i--)
for(j=200;j>0;j--);
}
这个程序应该是到显示FFFFFF,6个数码管都显示F就应该停止了吧.为什么会不停的又从0开始不停新循环呢,就好像加上了while(1).
1个回答 分类:综合 2014-10-25

问题解答:

我来补答
程序会一直运行至程序存储器的结尾,然后再从头开始运行.
因为程序容量不大,运行速度又很快,人还没有感觉出停顿,程序就又从头执行了.
只要有电源,复位正常,有时钟,PC指针就会按照时钟的振荡而不停的自加,除非程序中有改变PC指针的值的指令.所以当给一个内部没有程序的单片机上电,复位并供上时钟时,单片机不是静止的,而是一直在运行的,运行的方式是从头到尾的执行程序存储器中的指令.如果程序存储器中是全0,执行的是空指令,如果是全1,执行的是mov R7,A.
再问: 谢谢回答,那您的意思是说,单片机的程序在加电运行后,当main执行完,还会从头再继续执行,周而复始,不停止。如果想让其定在一个地方就要加while(1),是这个意思吗?
再答: main()执行完也不一定就从头开始执行,你的程序这样,是因为程序简单,main后面没有别的代码了。如果有别的代码,就不一定能回到程序头了。 C语言的程序编译完成后,打开汇编,能看到C程序编译后的汇编语言,想理解程序怎么执行的,顺着汇编语言一句一句的查就知道了。 汇编对于理解单片机的结构和运行方式是C不能替代的。在程序遇到一些特殊的问题时,用汇编去检查也往往是最有效甚至是必须的。 每种单片机都有其特定的结构和存储访问和映射方式,即使程序存储器是空的,也并不是所有的单片机都能回到程序的起点。
 
 
展开全文阅读
剩余:2000