单片机里的程序是从main函数开始执行的吗?请高手进。

我的单片机是STC的,现在发现的问题是:只要外部文件中有一个函数没处理好,单片机就直接不工作了,发现好像在执行main函数之前,单片机还干过别的一样,请问单片机执行的顺序是怎样的???

那得看你的程序是怎么写的,可以配置让单片机先执行别的程序再执行main

如果你没有任何控制的话,执行完全部的程序,会从main()开始,如果要控制的话,也很简单
分为两类:
一类是不执行下面的指令,返回main()第一句指令,那直接使用return;就可以了
另一类是不范围main()第一句指令,而从中间某一句开始执行,有两种方法
1.对于循环层数较少的循环,可以使用break;
2.对于循环层数较多,不建议每层都使用break那就利用标签也可以做到,你只要在程序需要的位置设个标签,在程序最后返回标签,就可以了
例如:
main()
{
k=1;
start:
P0=0x00;
//后面程序省略
//程序最后书写如下这里可以加个你需要的条件,满足条件后,跳转从main{}的第一句开始再次执行
goto start;
}
我经常这样做,实践证明,真的很好用,你可以试试
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-04-26
51的复位后程序入口是0x0000

如果汇编,一般在0x0000放上jmp main跳转到main运行
如果是C,编译器会在程序头上添加一段启动代码用于初始化,运行完之后,跳转到main。

一般情况,启动代码无需要理会。你的问题应该还是函数处理的问题。
第2个回答  2012-04-26
执行main之前,程序一般要做设定堆栈初值,ram清0两项工作。
如果编译用的是keil,会问你是否加入一段汇编文件(startup.a)这段汇编规划各个段,要设定堆栈初值,ram清0。
第3个回答  2012-04-26
那得看你的程序是怎么写的,可以配置让单片机先执行别的程序再执行main追问

怎么配置啊

追答

有点复杂,有一个初始化的过程

本回答被提问者采纳
第4个回答  2018-04-16

羽毛球拍品牌很多,型号更多,好的也很多很多。价格也决定了球拍性能的高低。

适合自己的打法 、能力的球拍才是最好的。对于进攻型打法的球友,能力强推荐尤尼克斯vt-zf2、李宁N80、李宁N55,力量较小推荐尤尼克斯vt60;

攻守平衡的球友推荐尤尼克斯的弓箭10、弓箭11,李宁N50、N70;

防守型打法可以选择中杆弹性好、头轻些的,比如尤尼克斯的NR系列球拍等。

本回答被网友采纳

单片机里的程序是从main函数开始执行的吗?请高手进。
那得看你的程序是怎么写的,可以配置让单片机先执行别的程序再执行main 如果你没有任何控制的话,执行完全部的程序,会从main()开始,如果要控制的话,也很简单 分为两类:一类是不执行下面的指令,返回main()第一句指令,那直接使用return;就可以了 另一类是不范围main()第一句指令,而从中间某一句...

单片机复位后,运行程序时从哪里开始运行程序
单片机复位后,从main()函数,也就是主函数开始运行程序。

单片机在读程序时是从00H读还是main函数还是从start开始读?搞不清楚...
如果用的是C语言那么就是从main函数开始读 如果用的是汇编那么从汇编自定义的ORG后的地址开始读

单片机中断结束后从哪main函数从头开始执行吗?还是回到while(1);那里...
当Visual Basic执行这个Do循环时会首先测试条件,如果条件为零,则跳过所有语句,如果条件为非零,则Visual Basic执行语句,然后退回到Do While语句再测试条件。因此,只要条件为True,循环可以随意执行多少次。如果程序一开始就为False,则不会执行语句。Do…Loop语句的另一种演变形式是先执行语句,然后每次...

为什么在单片机里C语言中main函数执行完之后还要重新执行??
上电后程序指针PC就会从程序存储器的0地址开始执行,中间会按照程序的要求跳到需要的地址执行,如果执行到最后一条指令完而没有相应的跳转指令 PC会继续往存储器的下一地址执行,而下一地址是没有烧写指令进去的(理论上是全1或全0,随厂家而定),这时就出现了跑飞,在PC将所有地址都跑一遍之后会回到0地址...

这个程序单片机 是先执行完for那两行在执行void main下面的吗
main函数一般为程序的入口,因此指令最先执行main函数,当执行遇到delay_ms函数时才会执行两个for。由于是死循环,当main完成整个逻辑后,将会回到while下一行位置,重新执行,期间不自动清除main中局部变量和全局变量和静态变量。

单片机程序执行顺序问题
MAIN: 主程序开始的地方 如果在程序运行中碰到有中断申请时,程序将自动转到中断处去执行,根据申请中断标志来判断转到那个中断处执行程序,ORG 003H 中的003H是51系列单片机生产厂家规定的中断入口处别问为什么,我也不知道人家为什么定在那个地方 该程序中遇到LJMP MAIN时是执行MAIN:后面的程序 ORG ...

嵌入式杂谈之中断向量表
中断向量表是学习嵌入式Linux开发初期的关键点。当我们需要通过汇编代码启动系统时,它扮演着决定程序运行流程的关键角色。首先,让我们澄清一个误区:单片机的程序并非直接从main函数开始,而是从初始化的汇编程序开始,这个程序的执行起点通常设定在0X00000000。ARM架构的芯片启动时,程序会根据中断向量表进行...

在51单片机中主函数放在前面和放在后面有什么区别?
程序执行的时候都是直接找到main函数开始执行的,不管主函数的位置在哪都是这么执行的。主函数放在子函数后面的话,子函数被编译器先编译,对于主函数是已知的(可以看做定义后的变量),可以省略掉函数声明,在主函数中直接引用即可。主函数在子函数前面,如果主函数要调用子函数,应该在主函数前面加上...

单片机C51编程中,main的关键词的意思是什么?
1. main() 函数在 C 语言程序中是程序执行的入口点,相当于程序的起点。2. 在 C 语言的基础框架中,main() 函数是必不可少的,它是程序运行的起点,就像一场表演的序幕。3. main() 函数的返回类型为 int,表示它可以向操作系统返回一个整数值作为程序运行结果。在此实例中,函数参数列表为空。

相似回答