英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

标题: 16F917或者628A的PCL跟PCLATH问题 [打印本页]

作者: winnie    时间: 2009-3-11 14:06
标题: 16F917或者628A的PCL跟PCLATH问题
当程序不超出2K时(00H~7FFH),当用CALL或者GOTO时,是否要同时改变PCLATH?又当要改变PLC的值(例如:ADDWF   PCL)时,又是否要同时改变PCLATH?比如:程序编译后,1.当前的一条程序放在了003BH地址,现在要跳到015BH去查表并返回一个值,象这种情况是否要在跳之前加两条:MOVLW   01H,    MOVWF   PLCATH呢?然后在查表返回值后返回003CH时,又是否要返回之前加两条:MOVLW   00H,    MOVWF   PLCATH呢?
2.当前的一条程序放在了05AFH地址,现在要跳到01FFH去查表并返回一个值,象这种情况是否要在跳之前加两条:MOVLW   01H,    MOVWF   PLCATH呢?然后在查表返回值后返回05B0H时,又是否要返回之前加两条:MOVLW   05H,    MOVWF   PLCATH呢?



要改变PCLATH,第二种情况要注意,ADDWF PCL后进位要加到PCLATH。。。
全地址查表程序
org 0x80
movlw LOW Table    ;get low 8 bits of Table address
addwf offset,F            ;do an 8-bit add operation
movlw HIGH Table   ;get high 5 bits of Table address
btfsc status,c               ;page crossed?
addlw 1                       ;yes then increment high address
movwf PCLATH       ;load high address in latch
movf offset,w            ;load computed offset in w reg
call Table
.
.
org 0x9FD
Table:
movwf PCL,F            ;load computed offset in PCL
retlw ’A’               ;0x9FE return the ASCII char A
retlw ’B’               ;0x9FF return the ASCII char B
retlw ’C’               ;0xA00 return the ASCII char C




欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://enroobbs.com/) Powered by Discuz! X3.2