'========================================================== ' ' PicStic4 PicBASIC Pro Demo to randomly retrieve 24 80 character ' strings from the EEPROM of PicStic4. [Fixed place strings] ' Data is output to both Serial Output via PB6 and ' LCD output. ' '========================================================== B0 var byte 'SERIAL INPUT CHARACTER VARIABLE B1 var byte 'EEPROM DATA VARIABLE READ FROM THEN EEPROM B2 var W1.byte0 '[LSB W1] LOOP COUNTER [WORD POINTER] B3 var W1.byte1 '[MSB W1] LOOP COUNTER [WORD POINTER] B4 var W2.byte0 '[LSB W2] START ADDRESS OF THE EEPROM BYTE [WORD POINTER] B5 var W2.byte1 '[MSB W2] START ADDRESS OF THE EEPROM BYTE [WORD POINTER] B6 var W3.byte0 '[LSB W3] END ADDRESS Of THE EEPROM BYTE [WORD POINTER] B7 var W3.byte1 '[MSB W3]END ADDRESS OF THE EEPROM BYTE [WORD POINTER] B8 var W4.byte0 '[LSB W4]WORD ADDRESS LOCATION OF THE BYTE [WORD POINTER] B9 var W4.byte1 '[MSB W4]WORD ADDRESS LOCATION OF THE BYTE [WORD POINTER] B10 var W5.byte0 '[LSB W5] RANDOM NUMBER B11 var W5.byte1 '[MSB W5] RANDOM NUMBER B19 var byte 'COMMAND [FOR PASS] B20 var byte 'LSB OF THE PARAMETER [FOR PASS] B21 var byte 'MSB OF THE PARAMETER [FOR PASS] W1 var word W2 var word W3 var word W4 var word W5 var word SYMBOL EE86 = 1983 ' 2048 - 64 - 1 = 1983 BYTES B19=$03 : B20=$00 : B21=$20 : CALL PASS : GOSUB ERR 'LCD/KEY START: RANDOM W5 ' pick a psuedo random number B0=B10 B0=B0-1 ' subtract 1 so it could be 0 B0=B0&31 ' MASK OFF ALL ABOVE 31 if B0>23 then START ' check for more than 24 strings W2=B0*80 : W3=W2+79 ' W2=from address, W3=to address B19=$18 : B20=0 : B21=0 : CALL PASS 'LCD CLS B19=$19 : B20=0 : B21=0 : CALL PASS 'LCD HOME B19=$1A : B20=0 : B21=0 : CALL PASS 'LCD CURSOR OFF START1: FOR W1=W2 TO W3 ' W1=character pointer in EEPROM if W1>EE86 then START5 ' check for exceeding EEPROM length GOSUB RADRS ' go get a character SEROUT2 7,16780,[B1] ' print character out serial port if B1=13 then START2 ' check for CR IF B1=10 THEN START4 B19=$1B : B20=B1 : B21=$00 : CALL PASS 'LCD PRINT START2: NEXT W1 ' next character START3: PAUSE 10000 ' wait 10 seconds GOTO START ' got get another string START4: SEROUT2 7,16780,[10] : GOTO START3 ' LF out serial port START5: Serout2 7,16780,[13,10,"END of EEPROM",13,10] : GOTO START ' ERR ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ' SADRS - SET EEPROM ADDRESS ' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' SADRS: W4=W1/2 ' W4=WORD ADDRESS of W1=BYTE ADDRESS B19=30 : B20=B8 : B21=B9 : call PASS : GOSUB ERR ' SET EEPROM ADDRESS RETURN ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ' RADRS - READ EEPROM ADDRESS ' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' RADRS: GOSUB SADRS ' SET EEPROM ADDRESS B19=32 : B20=0 : B21=0 : CALL PASS : GOSUB ERR ' READ EEPROM ADDRESS W4=W1//2 ' W4=remainder of 1/2 BYTE ADDRESS if W4=1 then RADRS1 ' check for a remainder of 1 B1=B20 : RETURN ' remainder=0, must be LSByte of EEPROM READ RADRS1: B1=B21 : RETURN ' remainder=1, must be MSByte of EEPROM READ ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' ' ERR - CHECK FOR PASS ROUTINE ERROR ' ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ERR: if B19<>0 or B20<>0 or B21<>0 then ERR1 ' check for NOT all 0's Serout2 7,16780,["Comm Error-",#B19,13,10] ' all 0's=ERROR ERR1: return ' NOT all 0's=NO ERROR