Code:
ANSEL = %00000000 'Disable analog select so ports work as digital i/o.
CMCON0 = %00000111 'Disable analog comparators.
TRISA = %00100000 'Set PORTA.5 as OUTPUT.
PORTA = %00000000 'Set PORTA pins all low.
TRISC = %00000000 'Set PORTC as OUTPUT.
PORTC = %00000000 'Set PORTC pins all low.
DEFINE LCD_DREG PORTC 'PORTC.0 WILL CONNECT TO DB4, PORTC3 TO DB7
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTC
DEFINE LCD_RSBIT 4 'PORTC.4 CONNECT TO LCD PIN4
DEFINE LCD_EREG PORTC
DEFINE LCD_EBIT 5 'PORTC.5 CONNECT TO LCD PIN6
DEFINE LCD_BITS 4
DEFINE LCD_LINES 4
DEFINE LCD_COMMANDUS 2000
DEFINE LCD_DATAUS 150
DEFINE OSC 4
TOTAL VAR WORD 'STORED IN EEPROM LOCATIONS 0 AND 1
PS_1 VAR WORD 'STORED IN EEPRON LOCATIONS 2 AND 3
PS_2 VAR WORD 'STORED IN EEPRON LOCATIONS 4 AND 5
PS_3 VAR WORD 'STORED IN EEPRON LOCATIONS 6 AND 7
PS_4 VAR WORD 'STORED IN EEPRON LOCATIONS 8 AND 9
PS_5 VAR WORD 'STORED IN EEPRON LOCATIONS 10 AND 11
M_S VAR BYTE 'STORED IN EEPRON LOCATIONS 12
AV_Parts_Run var word 'STORED IN EEPRON LOCATIONS 13 AND 14
clear 'Re_set volatile memory to zero (Not EEPROM?)
MAIN:
gosub MC_S 'Set & increment M/C Starts Total subroutine
gosub Power_up 'On Power_up GOTO READ EEPROM subroutine
Start:
if PORTA.5 = 0 then count_up: 'Button pressed start counting
IF PORTA.5 = 1 THEN Start: 'If button not pressed loop until it is
Count_up: 'Button has been pressed
let Total = Total + 1 'Add one to value of Total taken from EEPROM
pause 100
LCDOUT $FE,2,"Total=",DEC TOTAL 'Display Total on LCD
Write 0, Total.HIGHBYTE ' Write high byte of Total word to EEPROM
Write 1, Total.LOWBYTE ' Write low byte of Total word to next address
gosub Parts_Run 'Number of parts made
GOTO START:
MC_S: 'MC Starts subroutine
READ 12, M_s 'Read current number of M/C Starts
LET M_S = M_S + 1 'Increment value by one
WRITE 12, M_S 'Save new value
READ 12, M_s 'Read latest value
pause 150 'Give LCD a chance to Power_up
LET M_S = M_S 'Set value to display
LCDOUT $FE,$C0, "Machine Starts=",DEC M_S 'Display M/C Starts on LCD from EEPROM
RETURN
Power_up: 'Power_up subroutine
Read 0, Total.HIGHBYTE ' Read high byte
Read 1, Total.LOWBYTe ' Read low byte
LET Total = Total 'Set Total to value set in EEPROM Memory
pause 150 'Give LCD a chance to Power_up
LCDOUT $FE,2,"Total=",DEC Total 'At Power_up display Total on LCD from EEPROM
'Memory which has been stored since Power_down
return
Parts_Run:
SELECT CASE M_S
CASE 1
if M_s = 1 then PARTS1:
CASE 2
IF M_S = 2 THEN PARTS2:
CASE 3
IF M_S = 3 THEN PARTS3:
CASE 4
IF M_S = 4 THEN PARTS4:
CASE 5
IF M_S = 5 THEN PARTS5:
END SELECT
RETURN
PARTS1:
let PS_1 = PS_1 + 1
WRITE 2,PS_1.HIGHBYTE
WRITE 3,PS_1.LOWBYTE
READ 2,PS_1.HIGHBYTE
READ 3,PS_1.LOWBYTE
LET PS_1 = PS_1
PAUSE 150
LCDOUT $FE, $94,"Parts1=",DEC PS_1
return
PARTS2:
LET PS_2 = PS_2 + 1
WRITE 4,PS_2.HIGHBYTE
WRITE 5,PS_2.LOWBYTE
READ 4,PS_2.HIGHBYTE
READ 5,PS_2.LOWBYTE
LET PS_2 = PS_2
PAUSE 150
LCDOUT $FE, $94,"Parts2=",DEC PS_2
return
PARTS3:
LET PS_3 = PS_3 + 1
WRITE 6,PS_3.HIGHBYTE
WRITE 7,PS_3.LOWBYTE
READ 6,PS_3.HIGHBYTE
READ 7,PS_3.LOWBYTE
LET PS_3 = PS_3
PAUSE 150
LCDOUT $FE, $94,"Parts3=",DEC PS_3
return
PARTS4:
LET PS_4 = PS_4 + 1
WRITE 8,PS_4.HIGHBYTE
WRITE 9,PS_4.LOWBYTE
READ 8,PS_4.HIGHBYTE
READ 9,PS_4.LOWBYTE
LET PS_4 = PS_4
PAUSE 150
LCDOUT $FE, $94,"Parts4=",DEC PS_4
return
PARTS5:
LET PS_5 = PS_5 + 1
WRITE 10,PS_5.HIGHBYTE
WRITE 11,PS_5.LOWBYTE
READ 10,PS_5.HIGHBYTE
READ 11,PS_5.LOWBYTE
LET PS_5 = PS_5
PAUSE 150
LCDOUT $FE, $94,"Parts5=",DEC PS_5
READ 2,PS_1.HIGHBYTE
READ 3,PS_1.LOWBYTE
LET PS_1 = PS_1
READ 4,PS_2.HIGHBYTE
READ 5,PS_2.LOWBYTE
LET PS_2 = PS_2
READ 6,PS_3.HIGHBYTE
READ 7,PS_3.LOWBYTE
LET PS_3 = PS_3
READ 8,PS_4.HIGHBYTE
READ 9,PS_4.LOWBYTE
LET PS_4 = PS_4
READ 10,PS_5.HIGHBYTE
READ 11,PS_5.LOWBYTE
LET PS_5 = PS_5
let AV_Parts_Run = (PS_1 + PS_2 + PS_3 + PS_4 + PS_5)/5
write 13,AV_parts_Run.HIGHBYTE
WRITE 14,AV_Parts_Run.LOWBYTE
READ 13,AV_parts_Run.HIGHBYTE
READ 14,AV_Parts_Run.LOWBYTE
let AV_Parts_Run = AV_Parts_Run
PAUSE 150
LCDOUT $FE, $D4,"AV_Parts_Run =",DEC AV_Parts_Run
end
Bookmarks