gnupic: Table Read on PIC16C77
Subject:
Table Read on PIC16C77
From:
Jerome Dumas ####@####.####
Date:
26 Sep 2000 12:01:28 -0000
Message-Id: <39D09E68.9D2794AD@atmel.fr>
Dear All,
I'm searching for a way to implement table read on PIC16C77 (8ko divided
on 4 pages)
the table I want to read can be located anywhere in my memory, its
length is 128 bytes
How to control page crossing ?
Here is what I have implemented :
a macro that allows to manage crossing page according to AN556
application note
from microchip. (at the end, I increment my offset by 1)
; ********************************************************************
CALL_TABLE_M macro table, offset
movlw LOW table
addwf offset, 1
movlw HIGH table
btfsc STATUS, C
addlw 1
movwf PCLATH
incf offset, 0
call table
ENDM
; ********************************************************************
The problem I have is when I call the table with the folowing
instruction :
CALL_TABLE_M mytable, 0x77
mytable starts at 0x0288, with an offset of 0x77
the data to be returned is located at 0x0300,
the macro from microchip returns another bad value located at 0x0200 !!!
Any help would be really apreciated !
Jerome
Here is my table :
; ********************************************************************
0288 0082 00001 mytable : movwf PCL ;
00002
0289 3400 00003 retlw 0x00 ; ampl = 0
028A 3400 00004 retlw 0x00 ; ampl = 0
028B 3400 00005 retlw 0x00 ; ampl = 0
028C 3400 00006 retlw 0x00 ; ampl = 0
028D 3400 00007 retlw 0x00 ; ampl = 0
028E 3400 00008 retlw 0x00 ; ampl = 0
028F 3400 00009 retlw 0x00 ; ampl = 0
0290 3400 00010 retlw 0x00 ; ampl = 0
00011
0291 3400 00012 retlw 0x00 ; ampl = 1
0292 3400 00013 retlw 0x00 ; ampl = 1
0293 3400 00014 retlw 0x00 ; ampl = 1
0294 3401 00015 retlw 0x01 ; ampl = 1
0295 3401 00016 retlw 0x01 ; ampl = 1
0296 3401 00017 retlw 0x01 ; ampl = 1
0297 3401 00018 retlw 0x01 ; ampl = 1
0298 3401 00019 retlw 0x01 ; ampl = 1
00020
0299 3400 00021 retlw 0x00 ; ampl = 2
029A 3400 00022 retlw 0x00 ; ampl = 2
029B 3401 00023 retlw 0x01 ; ampl = 2
029C 3401 00024 retlw 0x01 ; ampl = 2
029D 3401 00025 retlw 0x01 ; ampl = 2
029E 3402 00026 retlw 0x02 ; ampl = 2
029F 3402 00027 retlw 0x02 ; ampl = 2
02A0 3402 00028 retlw 0x02 ; ampl = 2
00029
02A1 3400 00030 retlw 0x00 ; ampl = 3
02A2 3401 00031 retlw 0x01 ; ampl = 3
02A3 3401 00032 retlw 0x01 ; ampl = 3
02A4 3402 00033 retlw 0x02 ; ampl = 3
02A5 3402 00034 retlw 0x02 ; ampl = 3
02A6 3402 00035 retlw 0x02 ; ampl = 3
02A7 3403 00036 retlw 0x03 ; ampl = 3
02A8 3403 00037 retlw 0x03 ; ampl = 3
00038
02A9 3400 00039 retlw 0x00 ; ampl = 4
02AA 3401 00040 retlw 0x01 ; ampl = 4
02AB 3402 00041 retlw 0x02 ; ampl = 4
02AC 3402 00042 retlw 0x02 ; ampl = 4
02AD 3403 00043 retlw 0x03 ; ampl = 4
02AE 3403 00044 retlw 0x03 ; ampl = 4
02AF 3404 00045 retlw 0x04 ; ampl = 4
02B0 3404 00046 retlw 0x04 ; ampl = 4
00047
02B1 3400 00048 retlw 0x00 ; ampl = 5
02B2 3401 00049 retlw 0x01 ; ampl = 5
02B3 3402 00050 retlw 0x02 ; ampl = 5
02B4 3403 00051 retlw 0x03 ; ampl = 5
02B5 3404 00052 retlw 0x04 ; ampl = 5
02B6 3404 00053 retlw 0x04 ; ampl = 5
02B7 3405 00054 retlw 0x05 ; ampl = 5
02B8 3405 00055 retlw 0x05 ; ampl = 5
00056
02B9 3400 00057 retlw 0x00 ; ampl = 6
02BA 3401 00058 retlw 0x01 ; ampl = 6
02BB 3402 00059 retlw 0x02 ; ampl = 6
02BC 3403 00060 retlw 0x03 ; ampl = 6
02BD 3404 00061 retlw 0x04 ; ampl = 6
02BE 3405 00062 retlw 0x05 ; ampl = 6
02BF 3406 00063 retlw 0x06 ; ampl = 6
02C0 3406 00064 retlw 0x06 ; ampl = 6
00065
02C1 3400 00066 retlw 0x00 ; ampl = 7
02C2 3401 00067 retlw 0x01 ; ampl = 7
02C3 3403 00068 retlw 0x03 ; ampl = 7
02C4 3404 00069 retlw 0x04 ; ampl = 7
02C5 3405 00070 retlw 0x05 ; ampl = 7
02C6 3406 00071 retlw 0x06 ; ampl = 7
02C7 3406 00072 retlw 0x06 ; ampl = 7
02C8 3407 00073 retlw 0x07 ; ampl = 7
00074
02C9 3400 00075 retlw 0x00 ; ampl = 8
02CA 3402 00076 retlw 0x02 ; ampl = 8
02CB 3403 00077 retlw 0x03 ; ampl = 8
02CC 3404 00078 retlw 0x04 ; ampl = 8
02CD 3406 00079 retlw 0x06 ; ampl = 8
02CE 3407 00080 retlw 0x07 ; ampl = 8
02CF 3407 00081 retlw 0x07 ; ampl = 8
02D0 3408 00082 retlw 0x08 ; ampl = 8
00083
02D1 3400 00084 retlw 0x00 ; ampl = 9
02D2 3402 00085 retlw 0x02 ; ampl = 9
02D3 3403 00086 retlw 0x03 ; ampl = 9
02D4 3405 00087 retlw 0x05 ; ampl = 9
02D5 3406 00088 retlw 0x06 ; ampl = 9
02D6 3407 00089 retlw 0x07 ; ampl = 9
02D7 3408 00090 retlw 0x08 ; ampl = 9
02D8 3409 00091 retlw 0x09 ; ampl = 9
00092
02D9 3400 00093 retlw 0x00 ; ampl = 10
02DA 3402 00094 retlw 0x02 ; ampl = 10
02DB 3404 00095 retlw 0x04 ; ampl = 10
02DC 3406 00096 retlw 0x06 ; ampl = 10
02DD 3407 00097 retlw 0x07 ; ampl = 10
02DE 3408 00098 retlw 0x08 ; ampl = 10
02DF 3409 00099 retlw 0x09 ; ampl = 10
02E0 340A 00100 retlw 0x0A ; ampl = 10
00101
02E1 3400 00102 retlw 0x00 ; ampl = 11
02E2 3402 00103 retlw 0x02 ; ampl = 11
02E3 3404 00104 retlw 0x04 ; ampl = 11
02E4 3406 00105 retlw 0x06 ; ampl = 11
02E5 3408 00106 retlw 0x08 ; ampl = 11
02E6 3409 00107 retlw 0x09 ; ampl = 11
02E7 340A 00108 retlw 0x0A ; ampl = 11
02E8 340B 00109 retlw 0x0B ; ampl = 11
00110
02E9 3400 00111 retlw 0x00 ; ampl = 12
02EA 3402 00112 retlw 0x02 ; ampl = 12
02EB 3405 00113 retlw 0x05 ; ampl = 12
02EC 3407 00114 retlw 0x07 ; ampl = 12
02ED 3408 00115 retlw 0x08 ; ampl = 12
02EE 340A 00116 retlw 0x0A ; ampl = 12
02EF 340B 00117 retlw 0x0B ; ampl = 12
02F0 340C 00118 retlw 0x0C ; ampl = 12
00119
02F1 3400 00120 retlw 0x00 ; ampl = 13
02F2 3403 00121 retlw 0x03 ; ampl = 13
02F3 3405 00122 retlw 0x05 ; ampl = 13
02F4 3407 00123 retlw 0x07 ; ampl = 13
02F5 3409 00124 retlw 0x09 ; ampl = 13
02F6 340B 00125 retlw 0x0B ; ampl = 13
02F7 340C 00126 retlw 0x0C ; ampl = 13
02F8 340D 00127 retlw 0x0D ; ampl = 13
00128
02F9 3400 00129 retlw 0x00 ; ampl = 14
02FA 3403 00130 retlw 0x03 ; ampl = 14
02FB 3405 00131 retlw 0x05 ; ampl = 14
02FC 3408 00132 retlw 0x08 ; ampl = 14
02FD 340A 00133 retlw 0x0A ; ampl = 14
02FE 340C 00134 retlw 0x0C ; ampl = 14
02FF 340D 00135 retlw 0x0D ; ampl = 14
0300 340E 00136 retlw 0x0E ; ampl = 14 << NOT
RETURNED
00137
0301 3400 00138 retlw 0x00 ; ampl = 15
0302 3403 00139 retlw 0x03 ; ampl = 15
0303 3406 00140 retlw 0x06 ; ampl = 15
0304 3408 00141 retlw 0x08 ; ampl = 15
0305 340B 00142 retlw 0x0B ; ampl = 15
0306 340C 00143 retlw 0x0C ; ampl = 15
0307 340E 00144 retlw 0x0E ; ampl = 15
0308 340F 00145 retlw 0x0F ; ampl = 15