I have been wrestling with this look-up table all day. The table call returns a packed value for month and day when presented with the day number in the year. It works fine for all days tested (Jan 1, JUN 1, DEC 1, DEC 10, SEP 10, and SEP12) except SEP 11 (day 255 this year) for which it returns a zero (note: January starts with an extra "day," because there is no "zero" day). The cursor in simulation goes to the January "0" position. It is obviously something to do with the page.
I have tried a lot of things, including Tony Nixon's approach (PICList). Since the table starts at 0x400, adding CountL to (low)Table, as done in many of the approaches I have tried can't cause a rollover. So, I test CountH and increment PCLATH accordingly.
"GetPack" gets the packed data byte from the GetDate table.
I have considered doing things like adding a null at position 255 and increasing the call value to compensate, or alternatively, breaking the table into two tables, but I am hoping there is simply an error in my code that manifests itself at the end of the page. This may be a silly question, but it is the first time I have dealt with such a large table
Regards, John
I have tried a lot of things, including Tony Nixon's approach (PICList). Since the table starts at 0x400, adding CountL to (low)Table, as done in many of the approaches I have tried can't cause a rollover. So, I test CountH and increment PCLATH accordingly.
"GetPack" gets the packed data byte from the GetDate table.
I have considered doing things like adding a null at position 255 and increasing the call value to compensate, or alternatively, breaking the table into two tables, but I am hoping there is simply an error in my code that manifests itself at the end of the page. This may be a silly question, but it is the first time I have dealt with such a large table
Regards, John
Code:
GetDate ;leap year = set Flag0,1
;enter routine with day# in CountH and CountL
bsf Flag0,1 ;set leap year
movlw HIGH(256) ;336 FOR TESTING DEC 1, leap year
movwf CountH ;345 = DEC 10
movlw LOW(256) ;153 = JUN 1,leap
movwf CountL ;255 = SEP 11 FREEZES
;254 = SEP 10
;256 = SEP 12
;*******************************************************************************
<snip>
GetPack
movf CountL,w
pagesel GetDay
btfsc CountH,0
incf PCLATH
;need to do high/low thing with CountH/L
call GetDay
; pagesel $
movwf Month ;temp store packed day-month result
andlw 0x1F ;mask off high 3 bits
movwf Day ;unpacked day
movf Month,w ;retrieve packed day-month
andlw 0xE0 ;mask off lower 5 bits
swapf WREG,w
lsrf WREG,w
movwf Month ;month unpacked
nop
nop
ORG 0x400
GetDay
addwf PCL ;movwf PCL ;brw
Jan
dt 0,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f
dt 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f
Feb
dt 0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f
dt 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d
Mar
dt 0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f
dt 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f
Apr
dt 0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f
dt 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e
May
dt 0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf
dt 0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf
Jun
dt 0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf
dt 0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde
Jul
dt 0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f
dt 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f
Aug
dt 0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f
dt 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f
Sep
dt 0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f
dt 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e