当没有循环指令,单片机执行到最后一条命令时,是停在此处,还是从头再来。

书上说单片机工作时,程序计数器PC的内容自动加1指向ROM下一单元内容。只有当有跳转,或中断时改变PC的值。在STC MCU中 用编程语言编程时 ,当没有循环指令,单片机执行到最后一条命令时,是停在此处,还是从头再来。
为什么 我的 是从头再来呢 有的MCU好像不从头再来,就停在最后一条指令处,只执行一遍程序。请详细介绍一下MCU的工作原理及过程,并说明一下我的情况。小弟在此不胜感激!!!

没有真正遇到过,只能分析了,我的结论是从头开始循环,分析如下:

PC的工作原理是取当前指令,根据当前指令进行PC赋值,遇到跳转、子程序调用、堆栈恢复指令时,PC被这些绝对目的地址(当然也有相对指令,这里暂时忽略)进行赋值;否则依据当前指令逐字节读取指令内容。(我是这样理解的,可以看下相应片子的数据手册)

另外,PC也是寄存器,也执行加法及进位操作,加法时满足寄存器加法的普遍方式:加法结果超过寄存器最大表示范围时,结果溢出,也就是进位位被忽略了。

这样在您的程序执行到ROM的最后(不是程序的最后)一条指令时(虽然您可能没有有意识地在这个位置编制代码,但ROM中这个位置还是有值的,根据烧入器的设置,程序之外的ROM可以选择FF、00等,或者人为充填其他内容),芯片首先将FF、00、或其他内容作为指令进行处理,同时依照以上规则,进行PC赋值,如果内容被理解成非跳转指令,则PC的值在FFFF之后在进行累加,这样产生溢出,可能新值为0000,这样程序就从0000地址开始执行了。

很长时间不摸单片机了,参考一下吧。其实自己用仿真器试试就行了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-09-21
程序跑到最后,你不控制下当然是继续向下跑了,而下边空着的程序段,一般编译器都给弄成00写片,是NOP,跑到最后,PC到FFFF再跑就又从0000开始了,跟RESET一样。
第2个回答  2010-09-21
停在此处!你的会从头再来可能是你在程序中写有上电复位
相似回答