PIC跨页跳转的一个疑问

[复制链接]
4183|5
 楼主| c4fantasy 发表于 2009-4-18 09:37 | 显示全部楼层 |阅读模式
大家好,本人单片机初学者,废话不多,直奔主题<br /><br />现在用PIC16F914芯片。PIC的程序存储器分4页PAGE0-3<br /><br />那么如果我在第一页用”CALL“调用第二页的子程序,而第二页的子程序中又调用同样为第二页的子程序,那么其中的RETURN回到哪里?<br />比如<br /><br />ORG&nbsp;0X0004&nbsp;第0页存储<br />PAGESEL&nbsp;AAAA<br />CALL&nbsp;AAAA<br />PAGESEL&nbsp;$<br /><br />ORG&nbsp;0X0800&nbsp;第一页存储<br />AAAA&nbsp;NOP<br />CALL&nbsp;BBBB;这句之前是否还用加PAGESEL&nbsp;BBBB,觉得应该不用,PCLATH已经指向第一页了<br />RETURN;这个RETURN&nbsp;回到第0页的CALL&nbsp;AAAA下一句,PCLATH仍然指向第一页<br />BBBB&nbsp;NOP<br />RETURN;这个RETURN回到哪里呢??????书上说RETURN强制清零回到第0页?而我这个RETURN的目的是回到第一页的CALL&nbsp;BBBB下一句。<br /><br /><br />说的可能不太明白,不过我想这个是很多初学者遇到过的问题。搜索半天没找到这种情况,希望懂得的高手不吝赐教,谢谢了<br /><br /><br /><br />
 楼主| c4fantasy 发表于 2009-4-18 09:39 | 显示全部楼层

不好意思,第一次发帖打错了

SORRY,前几行说明打错了<br />是第0页和第一页间跳转
machunshui 发表于 2009-4-18 14:05 | 显示全部楼层

硬件堆栈里存贮是全部13位PC,返回时PCLATCH不受影响

ORG&nbsp;0X0004&nbsp;;第0页存储<br />PAGESEL&nbsp;AAAA&nbsp;;PCLATCH指向第1页<br />CALL&nbsp;AAAA<br />PAGESEL&nbsp;$<br /><br />ORG&nbsp;0X0800&nbsp;第一页存储<br />AAAA&nbsp;NOP<br />CALL&nbsp;BBBB;;不用加PAGESEL&nbsp;BBBB,此时PCLATCH指向第1页<br />RETURN;;返回到第0页的CALL&nbsp;AAAA下一句,PCLATH仍然指向第1页<br />BBBB&nbsp;NOP<br />RETURN;;返回到CALL&nbsp;BBBB之后一条语句
machunshui 发表于 2009-4-18 14:20 | 显示全部楼层

总结

CALL的时候:<br /><br />当前13位PC&nbsp;------&gt&nbsp;13位硬件堆栈<br />PCL+PCLATCH-------&gtPC跳转到目的地<br /><br />RETURN的时候:<br /><br />13位硬件堆栈---------&gt当前13位PC&nbsp;<br />PCLATCH不受影响<br /><br />
 楼主| c4fantasy 发表于 2009-4-18 20:19 | 显示全部楼层

恩 ,谢谢了,基本看明白 受教了~

<br />3Q~~~~~
yewuyi 发表于 2009-4-18 20:39 | 显示全部楼层

找本张明峰先生的书看看,基本问题都讲解的很清楚了

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

160

帖子

1

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