PIC memory game- suggestions welcome

Thread Starter

sotos1

Joined Jul 2, 2017
4
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.
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

Last edited by a moderator:

Thread Starter

sotos1

Joined Jul 2, 2017
4
Small error in the parts required( can't edit, not enough posts ):

It should be 1 x piezo speaker not 1 x piezo buzzer.
 

MrChips

Joined Oct 2, 2009
30,806
This could be moved to the Completed Project forum if you provided a complete program listing.
(We don't extract zipped files for security reasons.)
 

blocco a spirale

Joined Jun 18, 2008
1,546
That looks like a well executed project and an ideal platform from which to learn PIC programming. I would have made the PIC-crystal-capacitor connections shorter but it appears to work OK as it is.
 
Last edited:
Top