Code:ANSEL = %00000000 'Disable analog select so ports work as digital i/o. CMCON0 = %00000111 'Disable analog comparators. TRISA = %00100000 'Set PORTA.5 as INPUT. 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 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 gosub Parts_Run 'Number of parts made Start: if PORTA.5 = 0 then count_up: 'If 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 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 = Total 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 = Total - PS_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 = TOTAL - PS_2 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 = TOTAL - PS_3 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 = TOTAL - PS_4 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 return
Bookmarks