So, there I was happily programming away... slowly putting together the attached menu tree and suddenly, between one compile and the next, this error shows up: Macro LCDOUTSTR?W not found in macro file. Some things I verified or can infer.
I'm just hoping somebody can put me on the track to solve this. I've searched for the error on the forum and on the internet and do not find anything related.
- I've never seen this before
- I'm using PBP3.1
- 8 bit 18F4420
- This is the only active section of the program other than configuring
- I've been making incremental changes for days. Literally working one minute - error the next.
I'm just hoping somebody can put me on the track to solve this. I've searched for the error on the forum and on the internet and do not find anything related.
Code:
'READ KEYPAD
KEY_READ:
PAUSE 50
FOR L1 = 0 TO 3
LATC = %00000000
LATC.0[L1] = 1
FOR L2 = 4 TO 7
IF PORTC.0[L2] = 1 THEN
SELECT CASE PORTC
CASE %00010001 : KEY_PTR = 0 : RETURN 'RESET
CASE %00100001 : KEY_CODE[KEY_PTR] = 0
CASE %01000001 : KEY_CODE[KEY_PTR] = "#"
CASE %10000001 : KEY_CODE[KEY_PTR] = "D"
CASE %00010010 : KEY_CODE[KEY_PTR] = 7
CASE %00100010 : KEY_CODE[KEY_PTR] = 8
CASE %01000010 : KEY_CODE[KEY_PTR] = 9
CASE %10000010 : KEY_CODE[KEY_PTR] = "C"
CASE %00010100 : KEY_CODE[KEY_PTR] = 4
CASE %00100100 : KEY_CODE[KEY_PTR] = 5
CASE %01000100 : KEY_CODE[KEY_PTR] = 6
CASE %10000100 : KEY_CODE[KEY_PTR] = "B"
CASE %00011000 : KEY_CODE[KEY_PTR] = 1
CASE %00101000 : KEY_CODE[KEY_PTR] = 2
CASE %01001000 : KEY_CODE[KEY_PTR] = 3
CASE %10001000 : KEY_CODE[KEY_PTR] = "A"
END SELECT
'CLEAR ROW 3 & 4
LCDOUT $FE, $94, REP " "\20 : LCDOUT $FE, $94
LCDOUT $FE, $D4, REP " "\20 : LCDOUT $FE, $D4
FOR D1 = 0 TO KEY_PTR
IF KEY_CODE[D1] < 10 THEN
LCDOUT DEC KEY_CODE[D1]
ELSE
LCDOUT KEY_CODE[D1]
ENDIF
NEXT D1
IF KEY_PTR = 3 THEN
DEV_NUM = KEY_CODE[1] * 10 + KEY_CODE[2]
select case DEV_NUM
case 1 : LCDOUT $FE, $94, "CLOCK " : LCDOUT $FE, $D4, " "
CASE 2, 3, 4, 5, 6, 7 : LCDOUT $FE, $94, "PLUG #", DEC2 DEV_NUM - 1
CASE 8, 9, 10 : LCDOUT $FE, $94, "DOSE #", DEC2 DEV_NUM - 8
END SELECT
ENDIF
IF KEY_PTR = 6 THEN
DEV_REG = KEY_CODE[4] * 10 + KEY_CODE[5]
SELECT CASE DEV_NUM 'NAME EACH DEVICE REGISTER
CASE 1 'CLOCK
select case DEV_REG
CASE 1 : LCDOUT $FE, $94, "R:1 MINUTES "
CASE 2 : LCDOUT $FE, $94, "R:2 HOURS "
CASE 3 : LCDOUT $FE, $94, "R:3 DOW "
CASE 4 : LCDOUT $FE, $94, "R:4 DATE "
CASE 5 : LCDOUT $FE, $94, "R:5 MONTH "
CASE 6 : LCDOUT $FE, $94, "R:6 YEAR "
CASE ELSE : LCDOUT $FE, $94 : LCDOUT "ERR: * RESET"
END SELECT
CASE 2, 3, 4, 5, 6, 7 'PLUGS
select case DEV_REG
CASE 1 : LCDOUT $FE, $94, "R:1 ON TIME "
CASE 2 : LCDOUT $FE, $94, "R:2 OFF TIME"
CASE 3 : LCDOUT $FE, $94, "R:3 DAY PTRN"
CASE 4 : LCDOUT $FE, $94, "R:4 2ND ON "
CASE 5 : LCDOUT $FE, $94, "R:5 2ND OFF "
CASE ELSE : LCDOUT $FE, $94, "ERR: * RESET"
END SELECT
CASE 8, 9, 10 'DOSE PUMPS
select case DEV_REG
CASE 1 : LCDOUT $FE, $94, "R:1 ON TIME "
CASE 2 : LCDOUT $FE, $94, "R:2 RUN TIME"
CASE 3 : LCDOUT $FE, $94, "R:3 DAY PTRN"
CASE 4 : LCDOUT $FE, $94, "R:4 PWM% "
CASE ELSE : LCDOUT $FE, $94, "ERR: * RESET"
END SELECT
END SELECT
ENDIF
IF KEY_PTR = 12 THEN
'REG_VAL = KEY_CODE[8] * 1000 + KEY_CODE[9] * 100 + KEY_CODE[10] * 10 + KEY_CODE[11]
ENDIF
KEY_PTR = KEY_PTR + 1
PAUSE 1000
ENDIF
NEXT L2
NEXT L1
IF KEY_PTR < 11 THEN GOTO KEY_READ
'LCDOUT $FE, $D4, "D#", DEC2 DEV_NUM, " R#", DEC2 DEV_REG, " V#", DEC4 REG_VAL
PAUSE 5000
'WRITE REGISTER VALUE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
RETURN