Hi all,
For my first post, I present to you Memopress; a PIC micro-controller project I made to help me learn about PIC micro-controllers. I have built a working prototype and would welcome any feedback from you before I build one in an enclosure and submit the project to the Completed projects forum.
Memopress is a Simon memory game clone with 4 speeds/levels, an LCD for displaying the high score and level, and an EEPROM memory save feature. It uses 4 buttons, 4 colored LEDs and a piezo speaker. The object of the game is to repeat a random sequence of flashing LEDs by pressing the corresponding button for each LED.
Prototype:
** The prototype was powered by connecting 5V to the terminal block represented by J1 in the schematic, and by moving a jumper from JP2 To JP1 to turn it on.
Parts required:
1 x 16f887 PIC microcontroller
1 x 8MHz crystal
2 x 22pF capacitors
1 x Blue LED
1 x Red LED
1 x Green LED
1 x Yellow LED
4 x N.O push buttons
4 x 330R resistors
1 x 10k resistor
1 x piezo transducer
1 x HD44780 compatible 2 x 16 LCD
1 x 5k potentiometer
1 x SPST switch
1 x 2 pin terminal block
1 x 2 pin jumper
2 x 2 pin jumper header
This project helped me understand how to :
1. Interface buttons with a PIC.
2. Interface an L.C.D(Hitachi 2 x 16 HD44780 compatible) with a PIC.
3. Program a PIC EEPROM.
4. Play sound with a microcontroller.
In the attached zip file you will find the HEX file, Assembly file, schematic, and a Proteus simulation file.
Cheers.
Terry C
Moderator edit: changed wording of buzzer to transducer
Mod edit 2: Posted source, hex files for download. Posted source code for review.
For my first post, I present to you Memopress; a PIC micro-controller project I made to help me learn about PIC micro-controllers. I have built a working prototype and would welcome any feedback from you before I build one in an enclosure and submit the project to the Completed projects forum.
Memopress is a Simon memory game clone with 4 speeds/levels, an LCD for displaying the high score and level, and an EEPROM memory save feature. It uses 4 buttons, 4 colored LEDs and a piezo speaker. The object of the game is to repeat a random sequence of flashing LEDs by pressing the corresponding button for each LED.
Prototype:
** The prototype was powered by connecting 5V to the terminal block represented by J1 in the schematic, and by moving a jumper from JP2 To JP1 to turn it on.
Parts required:
1 x 16f887 PIC microcontroller
1 x 8MHz crystal
2 x 22pF capacitors
1 x Blue LED
1 x Red LED
1 x Green LED
1 x Yellow LED
4 x N.O push buttons
4 x 330R resistors
1 x 10k resistor
1 x piezo transducer
1 x HD44780 compatible 2 x 16 LCD
1 x 5k potentiometer
1 x SPST switch
1 x 2 pin terminal block
1 x 2 pin jumper
2 x 2 pin jumper header
This project helped me understand how to :
1. Interface buttons with a PIC.
2. Interface an L.C.D(Hitachi 2 x 16 HD44780 compatible) with a PIC.
3. Program a PIC EEPROM.
4. Play sound with a microcontroller.
In the attached zip file you will find the HEX file, Assembly file, schematic, and a Proteus simulation file.
Cheers.
Terry C
Moderator edit: changed wording of buzzer to transducer
Mod edit 2: Posted source, hex files for download. Posted source code for review.
Code:
;MEMOPRESS - TERRY CHARALAMBOUS 2017 V2
LIST P=16F887
#INCLUDE "P16F887.INC"
__CONFIG _CONFIG1, _FOSC_XT & _WDTE_OFF & _PWRTE_OFF & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOREN_ON & _IESO_ON & _FCMEN_ON & _LVP_OFF
__CONFIG _CONFIG2, _BOR4V_BOR40V & _WRT_OFF
SHOWCHAR MACRO CHARACTER
MOVLW CHARACTER
CALL CHAR
ENDM
ORG 0X0
GOTO START
;INTERRUPT SERVICE ROUTINE
ORG 0X04
BCF INTCON,T0IF
DECFSZ COUNT1,F
RETFIE
DECFSZ COUNT,F
RETFIE
BSF SOUNDEND,0
RETFIE
;START OF PROGRAM
START:
BUTTON EQU 0X20
DELAY1 EQU 0X21
DELAY2 EQU 0X22
HS EQU 0X24 ;HIGH SCORE
HSDEC EQU 0X25
FREQ EQU 0X26 ;SOUND FREQUENCY
COUNT1 EQU 0X27
COUNT EQU 0X28 ;SOUND DELAY
EFEF EQU 0X30 ;FFH REGISTER
ERRO EQU 0X29
LEVEL EQU 0X31 ;GAME LEVEL
FREQTEMP EQU 0X32
SOUNDEND EQU 0X33 ;SOUND END FLAG
RAMST EQU 0X35 ;START OF PLAY MEMORY
TMDLY EQU 0X23 ;PAUSE DELAY
DLCD EQU 0X71
TEMPLCD EQU 0X70
HSLEVEL EQU 0X72
UNITS EQU 0X73
TENS EQU 0X74
HSUNITS EQU 0X75 ;UNITS OF HS
HSTENS EQU 0X76 ;TENS OF HS
HSUL1 EQU 0X77 ;HS UNITS LEV1 EEP
HSTL1 EQU 0X78 ;HS TENS LEV1 EEP
HSUL2 EQU 0X79 ;HS UNITS LEV2 EEP
HSTL2 EQU 0X7A ;HS TENS LEV2 EEP
HSUL3 EQU 0X7B ;HS UNITS LEV3 EEP
HSTL3 EQU 0X7C ;HS TENS LEV3 EEP
HSUL4 EQU 0X7D ;HS UNITS LEV4 EEP
HSTL4 EQU 0X7E ;HS TENS LEV4 EEP
EQUAL EQU 0X7F
ADDRESS EQU 0X110
;BANK 3
BSF STATUS,RP0
BSF STATUS,RP1
CLRF ANSEL ;ANALOG TO DIGITAL OFF
CLRF ANSELH
;BANK1
BCF STATUS,RP1
BCF OPTION_REG,T0CS
BSF OPTION_REG,PSA
BSF INTCON,GIE
BCF INTCON,T0IE
MOVLW 0XC0
MOVWF TRISA
MOVLW 0XFF
MOVWF TRISB
CLRF TRISC
CLRF TRISD
BCF OPTION_REG,7
;BANK0
BCF STATUS,RP0
CLRF PORTA
CLRF PORTC
CLRF PORTD
MOVLW 0X3
MOVWF FREQ
MOVLW 0X9
MOVWF COUNT
MOVF FREQ,W
MOVWF FREQTEMP
CLRF SOUNDEND
MOVLW 0X02
MOVWF HSUL1
MOVLW 0X0
MOVWF HSTL1
MOVLW 0X02
MOVWF HSUL2
MOVLW 00H
MOVWF HSTL2
MOVLW 0X02
MOVWF HSUL3
MOVLW 0X0
MOVWF HSTL3
MOVLW 0X02
MOVWF HSUL4
MOVLW 0X0
MOVWF HSTL4
CALL DELAYLCD
BSF PORTD,1 ;ENABLE HIGH
BCF PORTD,0 ;RS COMMAND MODE
MOVLW 0X20 ;4 BIT
MOVWF PORTC
BCF PORTD,1
CALL DELAYLCD
MOVLW 0X0C
CALL COMMAND
MOVLW 0X28 ;4 BIT 5X7 MODE
CALL COMMAND
MOVLW 0X01
CALL COMMAND
MOVLW 0X02
CALL COMMAND
SIMON: CLRF HSLEVEL
CLRF EQUAL
CLRF TENS
CLRF UNITS
MOVLW 0X01
CALL COMMAND
MOVLW 0X02
CALL COMMAND
MOVLW 0X82
CALL COMMAND
SHOWCHAR 'S'
SHOWCHAR 'e'
SHOWCHAR 'l'
SHOWCHAR 'e'
SHOWCHAR 'c'
SHOWCHAR 't'
SHOWCHAR ' '
SHOWCHAR 'L'
SHOWCHAR 'e'
SHOWCHAR 'v'
SHOWCHAR 'e'
SHOWCHAR 'l'
MOVLW 0XC5
CALL COMMAND
SHOWCHAR '1'
SHOWCHAR ' '
SHOWCHAR '2'
SHOWCHAR ' '
SHOWCHAR '3'
SHOWCHAR ' '
SHOWCHAR '4'
MOVLW 35H
MOVWF FSR
MOVLW 0X01
MOVWF HS
MOVLW 0X01
MOVWF HSDEC
LEV: BTFSS PORTB,0 ;CHOOSE LEVEL
GOTO LEVEL1
BTFSS PORTB,1
GOTO LEVEL2
BTFSS PORTB,2
GOTO LEVEL3
BTFSS PORTB,3
GOTO LEVEL4
GOTO LEV
LEVEL1: BSF HSLEVEL,0
BCF STATUS,RP0
BSF STATUS,RP1
MOVLW 0X0
MOVWF EEADR
BSF STATUS,RP0
BCF EECON1,EEPGD
BSF EECON1,RD
BCF STATUS,RP0
MOVF EEDATA,W
MOVWF HSTL1
BTFSC HSTL1,4
CLRF HSTL1
BCF STATUS,RP0
BSF STATUS,RP1
MOVLW 0X1
MOVWF EEADR
BSF STATUS,RP0
BCF EECON1,EEPGD
BSF EECON1,RD
BCF STATUS,RP0
MOVF EEDATA,W
MOVWF HSUL1
BTFSS HSUL1,4
GOTO $+3
INCF HSUL1,F
INCF HSUL1,F
BCF STATUS,RP1
MOVLW 0X01
CALL COMMAND
MOVLW 0X02
CALL COMMAND
SHOWCHAR 'L'
SHOWCHAR 'e'
SHOWCHAR 'v'
SHOWCHAR 'e'
SHOWCHAR 'l'
SHOWCHAR ' '
SHOWCHAR '1'
SHOWCHAR ' '
SHOWCHAR 'H'
SHOWCHAR 'i'
SHOWCHAR '_'
SHOWCHAR 'S'
SHOWCHAR 'c'
SHOWCHAR ':'
MOVLW 0XCA
CALL COMMAND
SHOWCHAR 'Y'
SHOWCHAR 'o'
SHOWCHAR 'u'
SHOWCHAR ':'
MOVLW 0XCF ;SET PLAYER SCORE TO 00
CALL COMMAND
MOVLW 0X30
CALL CHAR
MOVLW 0XCE
CALL COMMAND
MOVLW 0X30
CALL CHAR
MOVLW 0X8E
CALL COMMAND
MOVFW HSTL1
ADDLW 0X30
CALL CHAR
MOVFW HSUL1
ADDLW 0X30
CALL CHAR
MOVLW 0X4
MOVWF LEVEL
GOTO PLONE
LEVEL2: BSF HSLEVEL,1
BCF STATUS,RP0
BSF STATUS,RP1
MOVLW 0X2
MOVWF EEADR
BSF STATUS,RP0
BCF EECON1,EEPGD
BSF EECON1,RD
BCF STATUS,RP0
MOVF EEDATA,W
MOVWF HSTL2
BTFSC HSTL2,4
CLRF HSTL2
BCF STATUS,RP0
BSF STATUS,RP1
MOVLW 0X3
MOVWF EEADR
BSF STATUS,RP0
BCF EECON1,EEPGD
BSF EECON1,RD
BCF STATUS,RP0
MOVF EEDATA,W
MOVWF HSUL2
BTFSS HSUL2,4
GOTO $+3
INCF HSUL2,F
INCF HSUL2,F
BCF STATUS,RP1
MOVLW 0X01
CALL COMMAND
MOVLW 0X02
CALL COMMAND
SHOWCHAR 'L'
SHOWCHAR 'e'
SHOWCHAR 'v'
SHOWCHAR 'e'
SHOWCHAR 'l'
SHOWCHAR ' '
SHOWCHAR '2'
SHOWCHAR ' '
SHOWCHAR 'H'
SHOWCHAR 'i'
SHOWCHAR '_'
SHOWCHAR 'S'
SHOWCHAR 'c'
SHOWCHAR ':'
MOVLW 0XCA
CALL COMMAND
SHOWCHAR 'Y'
SHOWCHAR 'o'
SHOWCHAR 'u'
SHOWCHAR ':'
MOVLW 0XCF
CALL COMMAND
MOVLW 0X30
CALL CHAR
MOVLW 0XCE
CALL COMMAND
MOVLW 0X30
CALL CHAR
MOVLW 0X8E
CALL COMMAND
MOVFW HSTL2
ADDLW 30H
CALL CHAR
MOVFW HSUL2
ADDLW 0X30
CALL CHAR
MOVLW 0X3
MOVWF LEVEL
GOTO PLONE
LEVEL3: BSF HSLEVEL,2
BCF STATUS,RP0
BSF STATUS,RP1
MOVLW 0X4
MOVWF EEADR
BSF STATUS,RP0
BCF EECON1,EEPGD
BSF EECON1,RD
BCF STATUS,RP0
MOVF EEDATA,W
MOVWF HSTL3
BTFSC HSTL3,4
CLRF HSTL3
BCF STATUS,RP0
BSF STATUS,RP1
MOVLW 0X5
MOVWF EEADR
BSF STATUS,RP0
BCF EECON1,EEPGD
BSF EECON1,RD
BCF STATUS,RP0
MOVF EEDATA,W
MOVWF HSUL3
BTFSS HSUL3,4
GOTO $+3
INCF HSUL3,F
INCF HSUL3,F
BCF STATUS,RP1
MOVLW 0X01
CALL COMMAND
MOVLW 0X02
CALL COMMAND
SHOWCHAR 'L'
SHOWCHAR 'e'
SHOWCHAR 'v'
SHOWCHAR 'e'
SHOWCHAR 'l'
SHOWCHAR ' '
SHOWCHAR '3'
SHOWCHAR ' '
SHOWCHAR 'H'
SHOWCHAR 'I'
SHOWCHAR '_'
SHOWCHAR 'S'
SHOWCHAR 'C'
SHOWCHAR ':'
MOVLW 0XCA
CALL COMMAND
SHOWCHAR 'Y'
SHOWCHAR 'o'
SHOWCHAR 'u'
SHOWCHAR ':'
MOVLW 0XCF
CALL COMMAND
MOVLW 0X30
CALL CHAR
MOVLW 0XCE
CALL COMMAND
MOVLW 0X30
CALL CHAR
MOVLW 0X8E
CALL COMMAND
MOVFW HSTL3
ADDLW 0X30
CALL CHAR
MOVFW HSUL3
ADDLW 0X30
CALL CHAR
MOVLW 0X2
MOVWF LEVEL
GOTO PLONE
LEVEL4: BSF HSLEVEL,3
BCF STATUS,RP0
BSF STATUS,RP1
MOVLW 0X6
MOVWF EEADR
BSF STATUS,RP0
BCF EECON1,EEPGD
BSF EECON1,RD
BCF STATUS,RP0
MOVF EEDATA,W
MOVWF HSTL4
BTFSC HSTL4,4
CLRF HSTL4
BCF STATUS,RP0
BSF STATUS,RP1
MOVLW 0X7
MOVWF EEADR
BSF STATUS,RP0
BCF EECON1,EEPGD
BSF EECON1,RD
BCF STATUS,RP0
MOVF EEDATA,W
MOVWF HSUL4
BTFSS HSUL4,4
GOTO $+3
INCF HSUL4,F
INCF HSUL4,F
BCF STATUS,RP1
MOVLW 0X01
CALL COMMAND
MOVLW 0X02
CALL COMMAND
SHOWCHAR 'L'
SHOWCHAR 'e'
SHOWCHAR 'v'
SHOWCHAR 'e'
SHOWCHAR 'l'
SHOWCHAR ' '
SHOWCHAR '4'
SHOWCHAR ' '
SHOWCHAR 'H'
SHOWCHAR 'i'
SHOWCHAR '_'
SHOWCHAR 'S'
SHOWCHAR 'c'
SHOWCHAR ':'
MOVLW 0XCA
CALL COMMAND
SHOWCHAR 'Y'
SHOWCHAR 'o'
SHOWCHAR 'u'
SHOWCHAR ':'
MOVLW 0XCF
CALL COMMAND
MOVLW 0X30
CALL CHAR
MOVLW 0XCE
CALL COMMAND
MOVLW 0X30
CALL CHAR
MOVLW 0X8E
CALL COMMAND
MOVFW HSTL4
ADDLW 0X30
CALL CHAR
MOVFW HSUL4
ADDLW 0X30
CALL CHAR
MOVLW 0X1
MOVWF LEVEL
GOTO PLONE
;SUBROUTINES
RANDOM: MOVF TMR0,W
ANDLW 0X03
MOVWF BUTTON
RETURN
DELAY: MOVF LEVEL,W ;PAUSE BETWEEN NOTES IE:GAME SPEED
MOVWF TMDLY
MOVLW 0XFF
MOVWF DELAY1
MOVLW 0X6F
MOVWF DELAY2
LOOP: DECFSZ DELAY1,F
GOTO LOOP
DECFSZ DELAY2,F
GOTO LOOP
DECFSZ TMDLY,F
GOTO LOOP
RETURN
DELSND: DECFSZ EFEF,F ;SOUND DELAY
GOTO DELSND
DECFSZ FREQ,F
GOTO DELSND
MOVLW 0X10
XORWF PORTA,F
MOVF FREQTEMP,W
MOVWF FREQ
BTFSS SOUNDEND,0
GOTO DELSND
CLRF SOUNDEND
MOVLW 0X7
MOVWF COUNT
MOVLW 0XFF
MOVWF EFEF
BCF INTCON,T0IE
BCF PORTA,4
RETURN
DELAYLCD:
MOVLW 0X1F
MOVWF TEMPLCD
CLRF DLCD
LOOP2: DECFSZ DLCD,F
GOTO LOOP2
DECFSZ TEMPLCD,F
ENDLCD: GOTO LOOP2
RETURN
CHAR: MOVWF TEMPLCD
MOVF TEMPLCD,W
MOVWF PORTC
BSF PORTD,0
BSF PORTD,1
NOP
BCF PORTD,1
SWAPF TEMPLCD,W
MOVWF PORTC
BSF PORTD,1
NOP
BCF PORTD,1
CALL DELAYLCD
RETURN
COMMAND:
MOVWF TEMPLCD
MOVF TEMPLCD,W
MOVWF PORTC
BCF PORTD,0
BSF PORTD,1
NOP
BCF PORTD,1
SWAPF TEMPLCD,W
MOVWF PORTC
BSF PORTD,1
NOP
BCF PORTD,1
CALL DELAYLCD
RETURN
TEST1A: MOVF UNITS,W
MOVWF HSUL1
MOVF TENS,W
MOVWF HSTL1
MOVLW 0X8E
CALL COMMAND
MOVFW TENS
ADDLW 0X30
CALL CHAR
MOVFW UNITS
ADDLW 0X30
CALL CHAR
RETURN
TEST2A: MOVF UNITS,W
MOVWF HSUL2
MOVF TENS,W
MOVWF HSTL2
MOVLW 0X8E
CALL COMMAND
MOVFW TENS
ADDLW 0X30
CALL CHAR
MOVFW UNITS
ADDLW 0X30
CALL CHAR
RETURN
TEST3A: MOVF UNITS,W
MOVWF HSUL3
MOVF TENS,W
MOVWF HSTL3
MOVLW 0X8E
CALL COMMAND
MOVFW TENS
ADDLW 0X30
CALL CHAR
MOVFW UNITS
ADDLW 0X30
CALL CHAR
RETURN
TEST4A: MOVF UNITS,W
MOVWF HSUL4
MOVF TENS,W
MOVWF HSTL4
MOVLW 0X8E
CALL COMMAND
MOVFW TENS
ADDLW 0X30
CALL CHAR
MOVFW UNITS
ADDLW 0X30
CALL CHAR
RETURN
PLONE: CALL RANDOM
MOVF BUTTON,W
MOVWF INDF
GOTO PLAY
PLAY: BTFSC INDF,0
GOTO ENDONE
GOTO ENDZER
ENDZER: BTFSC INDF,1
GOTO YELLOW
GOTO BLUE
ENDONE: BTFSC INDF,1
GOTO RED
GOTO GREEN
YELLOW: BSF INTCON,T0IE
MOVLW 0X4
MOVWF FREQ
MOVLW 0X4
MOVWF FREQTEMP
BSF PORTA,2
CALL DELSND
BCF PORTA,2
CALL DELAY
DECFSZ HSDEC,F
GOTO INC
GOTO PRESS
BLUE: BSF INTCON,T0IE
MOVLW 0X5
MOVWF FREQ
MOVLW 0X5
MOVWF FREQTEMP
BSF PORTA,0
CALL DELSND
BCF PORTA,0
CALL DELAY
DECFSZ HSDEC,F
GOTO INC
GOTO PRESS
RED: BSF INTCON,T0IE
MOVLW 0X6
MOVWF FREQ
MOVLW 0X6
MOVWF FREQTEMP
BSF PORTA,3
CALL DELSND
BCF PORTA,3
CALL DELAY
DECFSZ HSDEC,F
GOTO INC
GOTO PRESS
GREEN: BSF INTCON,T0IE
MOVLW 0X3
MOVWF FREQ
MOVLW 0X3
MOVWF FREQTEMP
BSF PORTA,1
CALL DELSND
BCF PORTA,1
CALL DELAY
DECFSZ HSDEC,F
GOTO INC
GOTO PRESS
PRESS: MOVF HS,W
MOVWF HSDEC
MOVLW 0X35
MOVWF FSR
POLL: BTFSS PORTB,0 ;WAITING FOR BUTTON PRESS
GOTO CHECK0
BTFSS PORTB,1
GOTO CHECK1
BTFSS PORTB,2
GOTO CHECK2
BTFSS PORTB,3
GOTO CHECK3
GOTO POLL
CHECK0: BSF INTCON,T0IE
MOVF INDF,W
SUBLW 0X0
BTFSS STATUS,Z
GOTO ERR
MOVLW 0X5
MOVWF FREQ
MOVLW 0X5
MOVWF FREQTEMP
BSF PORTA,0
CALL DELSND
BCF PORTA,0
DECFSZ HSDEC,F
GOTO INC2
GOTO ADDNUM
CHECK1: BSF INTCON,T0IE
MOVF INDF,W
SUBLW 0X1
BTFSS STATUS,Z
GOTO ERR
MOVLW 3H
MOVWF FREQ
MOVLW 0X3
MOVWF FREQTEMP
BSF PORTA,1
CALL DELSND
BCF PORTA,1
DECFSZ HSDEC,F
GOTO INC2
GOTO ADDNUM
CHECK2: BSF INTCON,T0IE
MOVF INDF,W
SUBLW 0X2
BTFSS STATUS,Z
GOTO ERR
MOVLW 0X4
MOVWF FREQ
MOVLW 0X4
MOVWF FREQTEMP
BSF PORTA,2
CALL DELSND
BCF PORTA,2
DECFSZ HSDEC,F
GOTO INC2
GOTO ADDNUM
CHECK3: BSF INTCON,T0IE
MOVF INDF,W
SUBLW 0X3
BTFSS STATUS,Z
GOTO ERR
MOVLW 0X6
MOVWF FREQ
MOVLW 0X6
MOVWF FREQTEMP
BSF PORTA,3
CALL DELSND
BCF PORTA,3
DECFSZ HSDEC,F
GOTO INC2
GOTO ADDNUM
ADDNUM: CALL DELAY
MOVF UNITS,W
SUBLW 0X9
BTFSC STATUS,Z
GOTO TENZ
MOVLW 0XCF
CALL COMMAND
INCF UNITS,F
MOVF UNITS,W
ADDLW 0X30
CALL CHAR
GOTO CONT
TENZ: MOVLW 0XCF
CALL COMMAND
MOVLW 0X30
CALL CHAR
MOVLW 0XCE
CALL COMMAND
INCF TENS,F
MOVF TENS,W
ADDLW 0X30
CALL CHAR
CLRF UNITS
GOTO CONT
CONT: CALL SETUP
CALL DELAY ;ADD A TONE
CALL DELAY
CALL DELAY
CALL DELAY
CALL RANDOM
INCF FSR,F
MOVF BUTTON,W
ANDLW 0X03
MOVWF INDF
INCF HS,F
MOVF HS,W
MOVWF HSDEC
MOVLW 0X35
MOVWF FSR
GOTO PLAY
ERR: MOVLW 0X7
MOVWF ERRO
MOVLW 1H
MOVWF LEVEL
MOVLW 0X6
MOVWF FREQ
MOVLW 0X9
MOVWF FREQTEMP
LOOPIT: DECFSZ ERRO,F
GOTO FLASH
INFINI: CALL EEPROM
MOVLW 0X4
MOVWF LEVEL
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
CALL DELAY
GOTO SIMON
FLASH: COMF PORTA,F
BSF INTCON,T0IE
CALL DELSND
CALL DELAY
GOTO LOOPIT
INC: INCF FSR,F
GOTO PLAY
INC2: BTFSS PORTB,0 ;WAIT FOR BUTTON RELEASE
GOTO INC2
BTFSS PORTB,1
GOTO INC2
BTFSS PORTB,2
GOTO INC2
BTFSS PORTB,3
GOTO INC2
INCF FSR,F
GOTO POLL
SETUP: BTFSC HSLEVEL,0
GOTO TEST1
BTFSC HSLEVEL,1
GOTO TEST2
BTFSC HSLEVEL,2
GOTO TEST3
BTFSC HSLEVEL,3
GOTO TEST4
TEST1: BTFSC EQUAL,0
GOTO TEST1A
MOVF HSTL1,W
SUBWF TENS,W
BTFSS STATUS,Z
RETURN
MOVF HSUL1,W
SUBWF UNITS,W
BTFSS STATUS,Z
RETURN
BSF EQUAL,0
GOTO TEST1A
TEST2: BTFSC EQUAL,0
GOTO TEST2A
MOVF HSTL2,W
SUBWF TENS,W
BTFSS STATUS,Z
RETURN
MOVF HSUL2,W
SUBWF UNITS,W
BTFSS STATUS,Z
RETURN
BSF EQUAL,0
GOTO TEST2A
TEST3: BTFSC EQUAL,0
GOTO TEST3A
MOVF HSTL3,W
SUBWF TENS,W
BTFSS STATUS,Z
RETURN
MOVF HSUL3,W
SUBWF UNITS,W
BTFSS STATUS,Z
RETURN
BSF EQUAL,0
GOTO TEST3A
TEST4:
BTFSC EQUAL,0
GOTO TEST4A
MOVF HSTL4,W
SUBWF TENS,W
BTFSS STATUS,Z
RETURN
MOVF HSUL4,W
SUBWF UNITS,W
BTFSS STATUS,Z
RETURN
BSF EQUAL,0
GOTO TEST4A
EEPROM: BTFSS EQUAL,0
RETURN
BTFSC HSLEVEL,0
GOTO HS1
BTFSC HSLEVEL,1
GOTO HS2
BTFSC HSLEVEL,2
GOTO HS3
BTFSC HSLEVEL,3
GOTO HS4
HS1: BSF STATUS,RP0
BSF STATUS,RP1
BTFSC EECON1,WR
GOTO $-1
BCF STATUS,RP0
MOVLW 0X0
MOVWF EEADR
MOVF HSTL1,W
MOVWF EEDAT
BSF STATUS,RP0
BCF EECON1,EEPGD
BSF EECON1,WREN
BCF INTCON,GIE
MOVLW 0X55
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,WR
BSF INTCON,GIE
BCF EECON1,WREN
BSF STATUS,RP0
BSF STATUS,RP1
BTFSC EECON1,WR
GOTO $-1
BCF STATUS,RP0
MOVLW 0X01
MOVWF EEADR
MOVF HSUL1,W
MOVWF EEDAT
BSF STATUS,RP0
BCF EECON1,EEPGD
BSF EECON1,WREN
BCF INTCON,GIE
MOVLW 0X55
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,WR
BSF INTCON,GIE
BCF EECON1,WREN
BCF STATUS,RP0
BCF STATUS,RP1
RETURN
HS2: BSF STATUS,RP0
BSF STATUS,RP1
BTFSC EECON1,WR
GOTO $-1
BCF STATUS,RP0
MOVLW 0X2
MOVWF EEADR
MOVF HSTL2,W
MOVWF EEDAT
BSF STATUS,RP0
BCF EECON1,EEPGD
BSF EECON1,WREN
BCF INTCON,GIE
MOVLW 0X55
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,WR
BSF INTCON,GIE
BCF EECON1,WREN
BSF STATUS,RP0
BSF STATUS,RP1
BTFSC EECON1,WR
GOTO $-1
BCF STATUS,RP0
MOVLW 0X03
MOVWF EEADR
MOVF HSUL2,W
MOVWF EEDAT
BSF STATUS,RP0
BCF EECON1,EEPGD
BSF EECON1,WREN
BCF INTCON,GIE
MOVLW 0X55
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,WR
BSF INTCON,GIE
BCF EECON1,WREN
BCF STATUS,RP0
BCF STATUS,RP1
RETURN
HS3: BSF STATUS,RP0
BSF STATUS,RP1
BTFSC EECON1,WR
GOTO $-1
BCF STATUS,RP0
MOVLW 0X04
MOVWF EEADR
MOVF HSTL3,W
MOVWF EEDAT
BSF STATUS,RP0
BCF EECON1,EEPGD
BSF EECON1,WREN
BCF INTCON,GIE
MOVLW 0X55
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,WR
BSF INTCON,GIE
BCF EECON1,WREN
BSF STATUS,RP0
BSF STATUS,RP1
BTFSC EECON1,WR
GOTO $-1
BCF STATUS,RP0
MOVLW 0X05
MOVWF EEADR
MOVF HSUL3,W
MOVWF EEDAT
BSF STATUS,RP0
BCF EECON1,EEPGD
BSF EECON1,WREN
BCF INTCON,GIE
MOVLW 0X55
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,WR
BSF INTCON,GIE
BCF EECON1,WREN
BCF STATUS,RP0
BCF STATUS,RP1
RETURN
HS4: BSF STATUS,RP0
BSF STATUS,RP1
BTFSC EECON1,WR
GOTO $-1
BCF STATUS,RP0
MOVLW 0X6
MOVWF EEADR
MOVF HSTL4,W
MOVWF EEDAT
BSF STATUS,RP0
BCF EECON1,EEPGD
BSF EECON1,WREN
BCF INTCON,GIE
MOVLW 0X55
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,WR
BSF INTCON,GIE
BCF EECON1,WREN
BSF STATUS,RP0
BSF STATUS,RP1
BTFSC EECON1,WR
GOTO $-1
BCF STATUS,RP0
MOVLW 0X07
MOVWF EEADR
MOVF HSUL4,W
MOVWF EEDAT
BSF STATUS,RP0
BCF EECON1,EEPGD
BSF EECON1,WREN
BCF INTCON,GIE
MOVLW 0X55
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,WR
BSF INTCON,GIE
BCF EECON1,WREN
BCF STATUS,RP0
BCF STATUS,RP1
RETURN
END
Attachments
-
1.4 MB Views: 2
-
18.8 KB Views: 0
-
5.9 KB Views: 0
Last edited by a moderator: