技术深究

[复制链接]
1413|5
 楼主| 星星ARM 发表于 2015-5-29 08:02 来自手机 | 显示全部楼层 |阅读模式
在51单片机执行完(第一次)主程序为什么还会循环,并没有循环语句,为什么?

主程序就是简单的四句话如下:

   Void main(void)

   Led=0;
   延时;
  led=1;
  延时;

正常现象应该是灯亮一次灭掉,但是此程序为什么灯会一闪一闪,闪说明单片机再一次又一次的执行主函数在循环,没什么?
DianGongN 发表于 2015-5-29 08:32 | 显示全部楼层
这一段执行完了以后,会执行后面的空白flash中的程序,虽然你没有放程序,默认是FF。
FF也是指令,即MOV R7,A
所以,cpu在空白的地方反复执行MOV R7,A。一直到最后一个地址。
然后,程序计数器PC归零,再次进入你这个main

后面加一段无条件循环即可。
当然控制cpu进入停机模式亦可。
 楼主| 星星ARM 发表于 2015-5-29 09:07 来自手机 | 显示全部楼层
DianGongN 发表于 2015-5-29 08:32
这一段执行完了以后,会执行后面的空白flash中的程序,虽然你没有放程序,默认是FF。
FF也是指令,即MOV R7 ...

对,你说的没错是r7在做怪,刚看到一篇**说的也是这个问题,什么程序跑飞了,单片机复位了,这都不是原因,编译器编译的时候加载startupa51.h的文件,它里边有跳转语句。但是我又想如果我把这个文件删除了不编译到单片机内会如何??
 楼主| 星星ARM 发表于 2015-5-29 09:09 来自手机 | 显示全部楼层
DianGongN 发表于 2015-5-29 08:32
这一段执行完了以后,会执行后面的空白flash中的程序,虽然你没有放程序,默认是FF。
FF也是指令,即MOV R7 ...

对,你说的没错是r7在做怪,刚看到一篇**说的也是这个问题,什么程序跑飞了,单片机复位了,这都不是原因,编译器编译的时候加载startup.a51的文件,它里边有跳转语句。但是我又想如果我把这个文件删除了不编译到单片机内会如何??
ayb_ice 发表于 2015-5-29 09:25 | 显示全部楼层
DianGongN 发表于 2015-5-29 08:32
这一段执行完了以后,会执行后面的空白flash中的程序,虽然你没有放程序,默认是FF。
FF也是指令,即MOV R7 ...

删掉也会加载默认的文件

即使不加载默认的文件,比如纯汇编写,也会如此,因为PC会自动加一的,哪怕执行51不认识的指令,51会当成NOP指令,除非遇上了死循环指令
NE5532 发表于 2015-5-29 12:10 | 显示全部楼层
MCU是永远不会停下来的,要不就真的实现人工智能了,楼主能看到循环,是拜51的指令系统设计得好,还有PC指针能“翻山”的特性。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

95

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部