Quantcast
Channel: MEL PICBASIC Forum
Viewing all articles
Browse latest Browse all 4787

Lcdout macro problem

$
0
0
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'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


Viewing all articles
Browse latest Browse all 4787

Trending Articles