当没有循环指令,单片机执行到最后一条命令时,是停在此处,还是从头再来。
书上说单片机工作时,程序计数器PC的内容自动加1指向ROM下一单元内容。只有当有跳转,或中断时改变PC的值。在STCMCU中用编程语言编程时,当没有循环指令,单片机执行到...
书上说单片机工作时,程序计数器PC的内容自动加1指向ROM下一单元内容。只有当有跳转,或中断时改变PC的值。在STC MCU中 用编程语言编程时 ,当没有循环指令,单片机执行到最后一条命令时,是停在此处,还是从头再来。
为什么 我的 是从头再来呢 有的MCU好像不从头再来,就停在最后一条指令处,只执行一遍程序。请详细介绍一下MCU的工作原理及过程,并说明一下我的情况。小弟在此不胜感激!!! 展开
为什么 我的 是从头再来呢 有的MCU好像不从头再来,就停在最后一条指令处,只执行一遍程序。请详细介绍一下MCU的工作原理及过程,并说明一下我的情况。小弟在此不胜感激!!! 展开
3个回答
展开全部
没有真正遇到过,只能分析了,我的结论是从头开始循环,分析如下:
PC的工作原理是取当前指令,根据当前指令进行PC赋值,遇到跳转、子程序调用、堆栈恢复指令时,PC被这些绝对目的地址(当然也有相对指令,这里暂时忽略)进行赋值;否则依据当前指令逐字节读取指令内容。(我是这样理解的,可以看下相应片子的数据手册)
另外,PC也是寄存器,也执行加法及进位操作,加法时满足寄存器加法的普遍方式:加法结果超过寄存器最大表示范围时,结果溢出,也就是进位位被忽略了。
这样在您的程序执行到ROM的最后(不是程序的最后)一条指令时(虽然您可能没有有意识地在这个位置编制代码,但ROM中这个位置还是有值的,根据烧入器的设置,程序之外的ROM可以选择FF、00等,或者人为充填其他内容),芯片首先将FF、00、或其他内容作为指令进行处理,同时依照以上规则,进行PC赋值,如果内容被理解成非跳转指令,则PC的值在FFFF之后在进行累加,这样产生溢出,可能新值为0000,这样程序就从0000地址开始执行了。
很长时间不摸单片机了,参考一下吧。其实自己用仿真器试试就行了。
PC的工作原理是取当前指令,根据当前指令进行PC赋值,遇到跳转、子程序调用、堆栈恢复指令时,PC被这些绝对目的地址(当然也有相对指令,这里暂时忽略)进行赋值;否则依据当前指令逐字节读取指令内容。(我是这样理解的,可以看下相应片子的数据手册)
另外,PC也是寄存器,也执行加法及进位操作,加法时满足寄存器加法的普遍方式:加法结果超过寄存器最大表示范围时,结果溢出,也就是进位位被忽略了。
这样在您的程序执行到ROM的最后(不是程序的最后)一条指令时(虽然您可能没有有意识地在这个位置编制代码,但ROM中这个位置还是有值的,根据烧入器的设置,程序之外的ROM可以选择FF、00等,或者人为充填其他内容),芯片首先将FF、00、或其他内容作为指令进行处理,同时依照以上规则,进行PC赋值,如果内容被理解成非跳转指令,则PC的值在FFFF之后在进行累加,这样产生溢出,可能新值为0000,这样程序就从0000地址开始执行了。
很长时间不摸单片机了,参考一下吧。其实自己用仿真器试试就行了。
展开全部
程序跑到最后,你不控制下当然是继续向下跑了,而下边空着的程序段,一般编译器都给弄成00写片,是NOP,跑到最后,PC到FFFF再跑就又从0000开始了,跟RESET一样。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
停在此处!你的会从头再来可能是你在程序中写有上电复位
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询