da
carlomusumeci » 9 mar 2015, 22:04
Ciao Floppinoo,,,Sono riuscito a far funzionare il tutto...anche se non ho usato molto di quanto mi hai mandato...(non sono riuscito a capire le macro)

sicuramente avrei potuto semplificare la parte che scrive un valore,ogni volta che premo il pulsante memorizza...
In ogni caso,il programma si comporta in questo modo:
Al Reset...vengono visualizzati automaticamente in seguenza i 6 giochi,una volta visti tutti e 6 i giochi,reincominciano ma si fermano al numero 1...
Da questo momento con il pulsante " CAMBIA GIOCO" si puo scegliere tra i 6 giochi luce...
Scelto il gioco,premo per qualche secondo il pulsante " MEMORIZZA" e mi memorizza quel gioco nella EEPROM
Ho verificato come mi hai detto tu,sono andato fisicamente a vedere cosa aveva scritto nel registro EEPROM tramite il programmatore,...ottimo Una volta memorizzato il gioco,
al reset riparte dal gioco memorizzatoQuesto è il codice,sicuramente avrei potuto evitarmi molti passaggi...ma non sono riuscito a usare le macro...
- Codice: Seleziona tutto
;**************************************************
;CENTRALINA LUCI CARLO MUSUMECI
;**************************************************
PROCESSOR 16F84A
RADIX DEC
INCLUDE "P16F84A.INC"
ERRORLEVEL -302
;Setup of PIC configuration flags
;XT oscillator
;Disable watch dog timer
;Enable power up timer
;Disable code protect
__CONFIG 3FF1H
LED EQU 0
NEXT EQU 4
MEMORIZZA EQU 7
LEGGI EQU 6
LEDP EQU 5
ORG 0CH
Count RES 2
registrogiochi RES 1
ORG 00H
INIZIO
bsf STATUS,RP0 ; seleziona banco registri 1
movlw 00010000B ;
movwf TRISA ;assegna IN OUT in TRISA
movlw 10000000B ; //////
movwf TRISB ; idem
movlw 00000100B
movwf OPTION_REG
bcf STATUS,RP0 ;seleziona Banco registri 0
CALL LEGGIEE
Main
btfsc registrogiochi,1
call GIOCOLUCI1
btfsc registrogiochi,2
call GIOCOLUCI2
btfsc registrogiochi,3
call GIOCOLUCI3
btfsc registrogiochi,4
call GIOCOLUCI4
btfsc registrogiochi,5
call GIOCOLUCI5
btfsc registrogiochi,6
call GIOCOLUCI6
btfsc registrogiochi,7
call settaggioiniziale
GOTO Main
settaggioiniziale
MOVLW 00000010B
MOVWF registrogiochi
return
cambiogioco ;pulsante che cambia il gioco
btfsc PORTA,NEXT
RLF registrogiochi
RETURN
GIOCOLUCI1
CALL cambiogioco ;chiama pulsante che modifica il valore di " registrogiochi"
movlw 00000110B ;mostra nel display 7 segmenti collegato in PORTB il numero " 1 "
movwf PORTB ;//////////////////////////////////////////////////////////
movlw 00000001B
movwf PORTA
call Delay
movlw 00000010B
movwf PORTA
call Delay
movlw 00000100B
movwf PORTA
call Delay
movlw 00001000B
movwf PORTA
call Delay
BTFSC PORTB,MEMORIZZA
call SCRIVIEE1
RETURN
GIOCOLUCI2
CALL cambiogioco
movlw 01011011B
movwf PORTB
movlw 00000001B
movwf PORTA
call Delay
movlw 00000011B
movwf PORTA
call Delay
movlw 00000111B
movwf PORTA
call Delay
movlw 00001111B
movwf PORTA
call Delay
BTFSC PORTB,MEMORIZZA
call SCRIVIEE2
return
GIOCOLUCI3
CALL cambiogioco
movlw 01001111B ; DISPLAY CHE TI DICE IL NUMERO DEL GIOCO
movwf PORTB
movlw 00001110B
movwf PORTA
call Delay
movlw 00001101B
movwf PORTA
call Delay
movlw 00001011B
movwf PORTA
call Delay
movlw 00000111B
movwf PORTA
call Delay
BTFSC PORTB,MEMORIZZA
call SCRIVIEE3
RETURN
GIOCOLUCI4
CALL cambiogioco
movlw 01100110B
movwf PORTB
movlw 00000001B
movwf PORTA
call Delay
movlw 00000011B
movwf PORTA
call Delay
movlw 00000111B
movwf PORTA
call Delay
movlw 00001111B
movwf PORTA
call Delay
movlw 00000111B
movwf PORTA
call Delay
movlw 00000011B
movwf PORTA
call Delay
movlw 00000001B
movwf PORTA
call Delay
movlw 00000000B
movwf PORTA
call Delay
BTFSC PORTB,MEMORIZZA
call SCRIVIEE4
RETURN
GIOCOLUCI5
CALL cambiogioco
movlw 01101101B ; DISPLAY CHE TI DICE IL NUMERO DEL GIOCO
movwf PORTB
;SEQUENZA LUCI 5
movlw 00000001B
movwf PORTA
call Delay
movlw 00000011B
movwf PORTA
call Delay
movlw 00000111B
movwf PORTA
call Delay
movlw 00001111B
movwf PORTA
call Delay
movlw 00001110B
movwf PORTA
call Delay
movlw 00001100B
movwf PORTA
call Delay
movlw 00001000B
movwf PORTA
call Delay
CALL SCRIVIEE5
RETURN
GIOCOLUCI6
CALL cambiogioco
movlw 01111101B ; DISPLAY CHE TI DICE IL NUMERO DEL GIOCO
movwf PORTB
;SEQUENZALUCI
movlw 00000001B
movwf PORTA
call Delay
movlw 00000011B
movwf PORTA
call Delay
movlw 00000110B
movwf PORTA
call Delay
movlw 00001100B
movwf PORTA
call Delay
movlw 00001000B
movwf PORTA
call Delay
CALL SCRIVIEE6
RETURN
Delay
movlw 6
movwf TMR0
movlw 16
movwf Count
DelayLoop
movf TMR0,W
btfss STATUS,Z
goto DelayLoop
movlw 6
movwf TMR0
decfsz Count,1
goto DelayLoop
return
SCRIVIEE1
bcf STATUS,5
movlw 0x10
movwf EEADR ;scrivo 0x10 in EEADR
movlw 00000010B
movwf EEDATA ;scrivo 0x02 in EEDATA
bsf STATUS,5
bsf EECON1,WREN ;imposto ad 1 bit WREN
bcf INTCON, GIE ; stop interrupt
movlw 0x55
movwf EECON2 ;inserisco 0x55 in EECON2
movlw 0xAA
movwf EECON2 ;inserisco 0xAA in EECON2
bsf EECON1,WR ;bit WR a 1 (inizio scrittura)
bsf INTCON, GIE ; riavvia interrupt
ATTESA1
btfsc EECON1,WR
goto ATTESA1
bcf STATUS,5
return
SCRIVIEE2
bcf STATUS,5
movlw 0x10
movwf EEADR ;scrivo 0x10 in EEADR
movlw 00000100B
movwf EEDATA ;scrivo 0x02 in EEDATA
bsf STATUS,5
bsf EECON1,WREN ;imposto ad 1 bit WREN
movlw 0x55
movwf EECON2 ;inserisco 0x55 in EECON2
movlw 0xAA
movwf EECON2 ;inserisco 0xAA in EECON2
bsf EECON1,WR ;bit WR a 1 (inizio scrittura)
ATTESA2
btfsc EECON1,WR
goto ATTESA2
bcf STATUS,5
RETURN
SCRIVIEE3
bcf STATUS,5
movlw 0x10
movwf EEADR ;scrivo 0x10 in EEADR
movlw 00001000B
movwf EEDATA ;scrivo 0x02 in EEDATA
bsf STATUS,5
bsf EECON1,WREN ;imposto ad 1 bit WREN
movlw 0x55
movwf EECON2 ;inserisco 0x55 in EECON2
movlw 0xAA
movwf EECON2 ;inserisco 0xAA in EECON2
bsf EECON1,WR ;bit WR a 1 (inizio scrittura)
ATTESA3
btfsc EECON1,WR
goto ATTESA3
bcf STATUS,5
RETURN
SCRIVIEE4
bcf STATUS,5
movlw 0x10
movwf EEADR ;scrivo 0x10 in EEADR
movlw 00010000B
movwf EEDATA ;scrivo 0x02 in EEDATA
bsf STATUS,5
bsf EECON1,WREN ;imposto ad 1 bit WREN
movlw 0x55
movwf EECON2 ;inserisco 0x55 in EECON2
movlw 0xAA
movwf EECON2 ;inserisco 0xAA in EECON2
bsf EECON1,WR ;bit WR a 1 (inizio scrittura)
ATTESA4
btfsc EECON1,WR
goto ATTESA4
bcf STATUS,5
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SCRIVO PER IL QUINTO GIOCO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SCRIVIEE5
bcf STATUS,5
movlw 0x10
movwf EEADR ;scrivo 0x10 in EEADR
movlw 00100000B
movwf EEDATA ;scrivo 0x02 in EEDATA
bsf STATUS,5
bsf EECON1,WREN ;imposto ad 1 bit WREN
movlw 0x55
movwf EECON2 ;inserisco 0x55 in EECON2
movlw 0xAA
movwf EECON2 ;inserisco 0xAA in EECON2
bsf EECON1,WR ;bit WR a 1 (inizio scrittura)
ATTESA5
btfsc EECON1,WR
goto ATTESA5
bcf STATUS,5
return
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SCRIVO PER IL SESTO GIOCO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SCRIVIEE6
bcf STATUS,5
movlw 0x10
movwf EEADR ;scrivo 0x10 in EEADR
movlw 01000000B
movwf EEDATA ;scrivo 0x02 in EEDATA
bsf STATUS,5
bsf EECON1,WREN ;imposto ad 1 bit WREN
movlw 0x55
movwf EECON2 ;inserisco 0x55 in EECON2
movlw 0xAA
movwf EECON2 ;inserisco 0xAA in EECON2
bsf EECON1,WR ;bit WR a 1 (inizio scrittura)
ATTESA6
btfsc EECON1,WR
goto ATTESA6
bcf STATUS,5
return
;;;;;;;;;;;;;;;;;;;;;;;,SUBROUTINE PER LEGGERE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LEGGIEE
BCF STATUS,RP0
MOVLW 0X10
MOVWF EEADR
BSF STATUS,RP0
BSF EECON1,RD
BCF STATUS,RP0
MOVF EEDATA,W
MOVWF registrogiochi
return
END
dimmi cosa ne pensi,e come potremmo semplificare il tutto (nelle operazioni di scrittura EEPROM)
GRAZIE PER AVERMI FATTO CAPIRE IL MECCANISMO :)