PIC单片机学习中,什么是状态寄存器中的页选位?

来源:百度知道 编辑:UC知道 时间:2024/05/13 00:39:11
例如:
......
PR1 EQU 06H
PR0 EQU 05H
......
表示什么意思?

PIC单片机为了能在兼容以前程序的情况下扩大寄存器数量,普遍采用分页方式。比如寄存器数量少的型号只有0页,固定长度指令只包含了7位寄存器地址,最大只有128个寄存器,而另一寄存器数量多的型号有512个寄存器,在不改变指令长度的情况下要想寻址到其他384个寄存器必须再有两位寄存器地址,而这两位寄存器地址不能包含在固定长度指令内。因此设计者采用了状态寄存器中的页选位来确定这两位寄存器地址,只要页选位被定义了,比如10,那么以后所有涉及寄存器地址的指令寻址到的均是10页面上的寄存器(也是128个)。如想重新回到00页面上的寄存器空间必须重设状态寄存器中的两个基页选位为00。

个人感觉这是非常不方便和非常容易出错的方法,但目前PIC单片机,可能也包括其他单片机还没有找到既能向下与低寄存器数量型号的指令兼容(只能高级型号兼容低级型号)、指令长度又不变的更好的方法。

PR1 EQU 06H
PR0 EQU 05H

这两句是伪指令,是给编译器用的,为的是使人在写代码时更好记。这两句分别表示PR0代表数值05H,即对应状态寄存器中的第05位,PR1代表数值06H,即对应状态寄存器中的第06位,这样在程序中提到状态寄存器中的PR0,编译器就知道是第05位,代表低位页面选择位05位。每个型号的PIC都有一个包含很多这种用EQU伪指令定义的处理器文件,编译时用INCLUDE伪指令包含进去就行了。其实,个人感觉如果直接多设置一些专用寄存器,不占用这些通用寄存器的地址空间,就不必这么麻烦了。希望以后国内有公司如果那天开发PIC竞争系列单片机时,能多设专用寄存器,既减少麻烦又增大了通用寄存器数量。