|
当程序不超出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 |
|