- Messaggi: 32
- Ringraziamenti ricevuti 0
Chi mi da una mano a modificare un file asm ? [ RISOLTO ]
- lo_sty
- Autore della discussione
- Giovane Utente
-
Less
Di più
10 Anni 5 Mesi fa - 10 Anni 3 Mesi fa #1
da lo_sty
Chi mi da una mano a modificare un file asm ? [ RISOLTO ] è stato creato da lo_sty
Ho ritrovato un vecchio progetto lasciato in garage e vorrei renderlo " FUNZIONANTE " ( in realtà lo è già ) -
Il problema è che l'ho scritto in assembly ed essendo passato al C quel poco che conoscevo l'ho dimenticato .
Il programma modifica dei valori in una eeprom esterna tramite dati ed indirizzi preimpostati nel programma .
Originariamente l'operazione viene effettuata nel momento che viene alimentato il pic16f84 .
Voglio aggiungere un pulsante su RB2 e fare in modo che alla pressione del pulsante il programma inizia la scrittura ed a fine scrittura va in pausa .
La modifica è semplice ma non riesco -.-''
Mi dareste gentilmente una mano ?
Se qualcuno mi dice di si posto volentieri il codice
Grazie
Il problema è che l'ho scritto in assembly ed essendo passato al C quel poco che conoscevo l'ho dimenticato .
Il programma modifica dei valori in una eeprom esterna tramite dati ed indirizzi preimpostati nel programma .
Originariamente l'operazione viene effettuata nel momento che viene alimentato il pic16f84 .
Voglio aggiungere un pulsante su RB2 e fare in modo che alla pressione del pulsante il programma inizia la scrittura ed a fine scrittura va in pausa .
La modifica è semplice ma non riesco -.-''
Mi dareste gentilmente una mano ?
Se qualcuno mi dice di si posto volentieri il codice
Grazie
Ultima Modifica 10 Anni 3 Mesi fa da lo_sty.
Si prega Accesso o Crea un account a partecipare alla conversazione.
10 Anni 5 Mesi fa #2
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Chi mi da una mano a modificare un file asm ?
Non so cosa faccia di preciso il tuo sistema, ma le librerie LaurTec includono le funzioni per scrittura di EEPROM esterne.
magari non ti sara' difficile riscrivere il tutto in C.
...ora hai capito di persona, perche' sconsiglio di scrivere in Assembly.
Quando sei dentro capisci tutto...ma dopo che lasci il progetto torna tutto piu' difficile.
..Con il C, una buona organizzazione e commenti, tutto e' piu' facile.
Magari posta comunque il software.
Saluti,
Mauro
magari non ti sara' difficile riscrivere il tutto in C.
...ora hai capito di persona, perche' sconsiglio di scrivere in Assembly.
Quando sei dentro capisci tutto...ma dopo che lasci il progetto torna tutto piu' difficile.
..Con il C, una buona organizzazione e commenti, tutto e' piu' facile.
Magari posta comunque il software.
Saluti,
Mauro
Si prega Accesso o Crea un account a partecipare alla conversazione.
- lo_sty
- Autore della discussione
- Giovane Utente
-
Less
Di più
- Messaggi: 32
- Ringraziamenti ricevuti 0
10 Anni 5 Mesi fa #3
da lo_sty
Risposta da lo_sty al topic Chi mi da una mano a modificare un file asm ?
Il programma gira su un pic16f84 .
Il codice è questo
In pratica non ricordo come far partire il micro dall'indirizzo 00h e far eseguire il programma se viene premuto un pulsante messo su RB2 .
1 - Inizio programma
2 - Controlla RB2 . Se viene premuto il pulsante inizia scrittura , altrimenti controlla RB2
3 - Se la scrittura è ok accendi il led e torna a controllare RB2
Il codice è questo
Code:
LIST P=16C84
list r=hex
CONSTANT INDF=00H,TMR0=01H,FSR=04H,PORTA=05H,PORTB=06H
CONSTANT EEADR=09H,EEDATA=08H,EECON1=88H,EECON2=89H
CONSTANT CODELAY=11H,CICLI=12H,TRISB=86H,TRISA=85H
CONSTANT ANTIR=13H,USER=16H,NUMCAR=15H,CODCAR=17H
CONSTANT RESULT=1AH,INTCON=0BH,OKLOW=1EH,STATUS=03H
AVVIO CLRF USER
CLRF PORTA
CLRF PORTB
CALL DELAY15 ;ASPETTA STABILIZZAZIONE TENSIONE
BSF STATUS,5 ;SELECT BANK 1
MOVLW 00H ;CONFIGURA LA PORTA A TUTTA OUTPUT..
MOVWF TRISA ;..
MOVLW 00H ;LA PORTA B TUTTA COME OUTPUT...
MOVWF TRISB ;...
BCF STATUS,5 ;SELECT BANK 0,QUELLO DELLE PORTE I/O
CALL WRITE24 ;SCRIVE IL BYTE SELEZIONATO AL IND.
OK BSF PORTB,1 ;LED VERDE SCRITTURA OK
GOTO OK
WRITE24 MOVLW 08H ;CONTA 8 BIT...
MOVWF NUMCAR ;...PER OGNI BYTE TRASMESSO
BSF PORTA,3 ;SDA HIGH
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BCF PORTA,3 ;SDA LOW WHILE SCL HIGH=START C.
MOVLW 0A0H ;DEVICE ID A0 A1 A2 = 0 + WR
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 0BH ;QUESTO E'L'INDIRIZZO DOVE SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 07H ;QUESTO E' IL DATO DA SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
BCF PORTA,2 ;SCL LOW
CALL DELAY100
BCF PORTA,3 ;SDA=LOW
CALL DELAY100
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BSF PORTA,3 ; SDA HIGH WHILE SCL HIGH=STOP C.
CALL DELAY15 ;ASPETTA TEMPO DI WRITE
MOVLW 08H ;CONTA 8 BIT...
MOVWF NUMCAR ;...PER OGNI BYTE TRASMESSO
BSF PORTA,3 ;SDA HIGH
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BCF PORTA,3 ;SDA LOW WHILE SCL HIGH=START C.
MOVLW 0A0H ;DEVICE ID A0 A1 A2 = 0 + WR
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 18H ;QUESTO E'L'INDIRIZZO DOVE SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 0E0H ;QUESTO E' IL DATO DA SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
BCF PORTA,2 ;SCL LOW
CALL DELAY100
BCF PORTA,3 ;SDA=LOW
CALL DELAY100
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BSF PORTA,3 ; SDA HIGH WHILE SCL HIGH=STOP C.
CALL DELAY15 ;ASPETTA TEMPO DI WRITE
MOVLW 08H ;CONTA 8 BIT...
MOVWF NUMCAR ;...PER OGNI BYTE TRASMESSO
BSF PORTA,3 ;SDA HIGH
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BCF PORTA,3 ;SDA LOW WHILE SCL HIGH=START C.
MOVLW 0A0H ;DEVICE ID A0 A1 A2 = 0 + WR
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 01BH ;QUESTO E'L'INDIRIZZO DOVE SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 07H ;QUESTO E' IL DATO DA SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
BCF PORTA,2 ;SCL LOW
CALL DELAY100
BCF PORTA,3 ;SDA=LOW
CALL DELAY100
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BSF PORTA,3 ; SDA HIGH WHILE SCL HIGH=STOP C.
CALL DELAY15 ;ASPETTA TEMPO DI WRITE
MOVLW 08H ;CONTA 8 BIT...
MOVWF NUMCAR ;...PER OGNI BYTE TRASMESSO
BSF PORTA,3 ;SDA HIGH
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BCF PORTA,3 ;SDA LOW WHILE SCL HIGH=START C.
MOVLW 0A0H ;DEVICE ID A0 A1 A2 = 0 + WR
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 44H ;QUESTO E'L'INDIRIZZO DOVE SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 80H ;QUESTO E' IL DATO DA SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
BCF PORTA,2 ;SCL LOW
CALL DELAY100
BCF PORTA,3 ;SDA=LOW
CALL DELAY100
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BSF PORTA,3 ; SDA HIGH WHILE SCL HIGH=STOP C.
CALL DELAY15 ;ASPETTA TEMPO DI WRITE
MOVLW 08H ;CONTA 8 BIT...
MOVWF NUMCAR ;...PER OGNI BYTE TRASMESSO
BSF PORTA,3 ;SDA HIGH
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BCF PORTA,3 ;SDA LOW WHILE SCL HIGH=START C.
MOVLW 0A0H ;DEVICE ID A0 A1 A2 = 0 + WR
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 45H ;QUESTO E'L'INDIRIZZO DOVE SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 0C2H ;QUESTO E' IL DATO DA SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
BCF PORTA,2 ;SCL LOW
CALL DELAY100
BCF PORTA,3 ;SDA=LOW
CALL DELAY100
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BSF PORTA,3 ; SDA HIGH WHILE SCL HIGH=STOP C.
CALL DELAY15 ;ASPETTA TEMPO DI WRITE
MOVLW 08H ;CONTA 8 BIT...
MOVWF NUMCAR ;...PER OGNI BYTE TRASMESSO
BSF PORTA,3 ;SDA HIGH
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BCF PORTA,3 ;SDA LOW WHILE SCL HIGH=START C.
MOVLW 0A0H ;DEVICE ID A0 A1 A2 = 0 + WR
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 46H ;QUESTO E'L'INDIRIZZO DOVE SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 040H ;QUESTO E' IL DATO DA SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
BCF PORTA,2 ;SCL LOW
CALL DELAY100
BCF PORTA,3 ;SDA=LOW
CALL DELAY100
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BSF PORTA,3 ; SDA HIGH WHILE SCL HIGH=STOP C.
CALL DELAY15 ;ASPETTA TEMPO DI WRITE
MOVLW 08H ;CONTA 8 BIT...
MOVWF NUMCAR ;...PER OGNI BYTE TRASMESSO
BSF PORTA,3 ;SDA HIGH
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BCF PORTA,3 ;SDA LOW WHILE SCL HIGH=START C.
MOVLW 0A0H ;DEVICE ID A0 A1 A2 = 0 + WR
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 47H ;QUESTO E'L'INDIRIZZO DOVE SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 08CH ;QUESTO E' IL DATO DA SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
BCF PORTA,2 ;SCL LOW
CALL DELAY100
BCF PORTA,3 ;SDA=LOW
CALL DELAY100
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BSF PORTA,3 ; SDA HIGH WHILE SCL HIGH=STOP C.
CALL DELAY15 ;ASPETTA TEMPO DI WRITE
MOVLW 08H ;CONTA 8 BIT...
MOVWF NUMCAR ;...PER OGNI BYTE TRASMESSO
BSF PORTA,3 ;SDA HIGH
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BCF PORTA,3 ;SDA LOW WHILE SCL HIGH=START C.
MOVLW 0A0H ;DEVICE ID A0 A1 A2 = 0 + WR
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 4CH ;QUESTO E'L'INDIRIZZO DOVE SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 81H ;QUESTO E' IL DATO DA SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
BCF PORTA,2 ;SCL LOW
CALL DELAY100
BCF PORTA,3 ;SDA=LOW
CALL DELAY100
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BSF PORTA,3 ; SDA HIGH WHILE SCL HIGH=STOP C.
CALL DELAY15 ;ASPETTA TEMPO DI WRITE
MOVLW 08H ;CONTA 8 BIT...
MOVWF NUMCAR ;...PER OGNI BYTE TRASMESSO
BSF PORTA,3 ;SDA HIGH
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BCF PORTA,3 ;SDA LOW WHILE SCL HIGH=START C.
MOVLW 0A0H ;DEVICE ID A0 A1 A2 = 0 + WR
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 4DH ;QUESTO E'L'INDIRIZZO DOVE SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 44H ;QUESTO E' IL DATO DA SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
BCF PORTA,2 ;SCL LOW
CALL DELAY100
BCF PORTA,3 ;SDA=LOW
CALL DELAY100
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BSF PORTA,3 ; SDA HIGH WHILE SCL HIGH=STOP C.
CALL DELAY15 ;ASPETTA TEMPO DI WRITE
MOVLW 08H ;CONTA 8 BIT...
MOVWF NUMCAR ;...PER OGNI BYTE TRASMESSO
BSF PORTA,3 ;SDA HIGH
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BCF PORTA,3 ;SDA LOW WHILE SCL HIGH=START C.
MOVLW 0A0H ;DEVICE ID A0 A1 A2 = 0 + WR
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 4EH ;QUESTO E'L'INDIRIZZO DOVE SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 4FH ;QUESTO E' IL DATO DA SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
BCF PORTA,2 ;SCL LOW
CALL DELAY100
BCF PORTA,3 ;SDA=LOW
CALL DELAY100
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BSF PORTA,3 ; SDA HIGH WHILE SCL HIGH=STOP C.
CALL DELAY15 ;ASPETTA TEMPO DI WRITE
MOVLW 08H ;CONTA 8 BIT...
MOVWF NUMCAR ;...PER OGNI BYTE TRASMESSO
BSF PORTA,3 ;SDA HIGH
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BCF PORTA,3 ;SDA LOW WHILE SCL HIGH=START C.
MOVLW 0A0H ;DEVICE ID A0 A1 A2 = 0 + WR
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 4FH ;QUESTO E'L'INDIRIZZO DOVE SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 44H ;QUESTO E' IL DATO DA SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
BCF PORTA,2 ;SCL LOW
CALL DELAY100
BCF PORTA,3 ;SDA=LOW
CALL DELAY100
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BSF PORTA,3 ; SDA HIGH WHILE SCL HIGH=STOP C.
CALL DELAY15 ;ASPETTA TEMPO DI WRITE
MOVLW 08H ;CONTA 8 BIT...
MOVWF NUMCAR ;...PER OGNI BYTE TRASMESSO
BSF PORTA,3 ;SDA HIGH
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BCF PORTA,3 ;SDA LOW WHILE SCL HIGH=START C.
MOVLW 0A0H ;DEVICE ID A0 A1 A2 = 0 + WR
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 54H ;QUESTO E'L'INDIRIZZO DOVE SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 80H ;QUESTO E' IL DATO DA SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
BCF PORTA,2 ;SCL LOW
CALL DELAY100
BCF PORTA,3 ;SDA=LOW
CALL DELAY100
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BSF PORTA,3 ; SDA HIGH WHILE SCL HIGH=STOP C.
CALL DELAY15 ;ASPETTA TEMPO DI WRITE
MOVLW 08H ;CONTA 8 BIT...
MOVWF NUMCAR ;...PER OGNI BYTE TRASMESSO
BSF PORTA,3 ;SDA HIGH
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BCF PORTA,3 ;SDA LOW WHILE SCL HIGH=START C.
MOVLW 0A0H ;DEVICE ID A0 A1 A2 = 0 + WR
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 55H ;QUESTO E'L'INDIRIZZO DOVE SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 82H ;QUESTO E' IL DATO DA SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
BCF PORTA,2 ;SCL LOW
CALL DELAY100
BCF PORTA,3 ;SDA=LOW
CALL DELAY100
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BSF PORTA,3 ; SDA HIGH WHILE SCL HIGH=STOP C.
CALL DELAY15 ;ASPETTA TEMPO DI WRITE
MOVLW 08H ;CONTA 8 BIT...
MOVWF NUMCAR ;...PER OGNI BYTE TRASMESSO
BSF PORTA,3 ;SDA HIGH
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BCF PORTA,3 ;SDA LOW WHILE SCL HIGH=START C.
MOVLW 0A0H ;DEVICE ID A0 A1 A2 = 0 + WR
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 56H ;QUESTO E'L'INDIRIZZO DOVE SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 40H ;QUESTO E' IL DATO DA SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
BCF PORTA,2 ;SCL LOW
CALL DELAY100
BCF PORTA,3 ;SDA=LOW
CALL DELAY100
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BSF PORTA,3 ; SDA HIGH WHILE SCL HIGH=STOP C.
CALL DELAY15 ;ASPETTA TEMPO DI WRITE
MOVLW 08H ;CONTA 8 BIT...
MOVWF NUMCAR ;...PER OGNI BYTE TRASMESSO
BSF PORTA,3 ;SDA HIGH
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BCF PORTA,3 ;SDA LOW WHILE SCL HIGH=START C.
MOVLW 0A0H ;DEVICE ID A0 A1 A2 = 0 + WR
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 57H ;QUESTO E'L'INDIRIZZO DOVE SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 08CH ;QUESTO E' IL DATO DA SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
BCF PORTA,2 ;SCL LOW
CALL DELAY100
BCF PORTA,3 ;SDA=LOW
CALL DELAY100
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BSF PORTA,3 ; SDA HIGH WHILE SCL HIGH=STOP C.
CALL DELAY15 ;ASPETTA TEMPO DI WRITE
MOVLW 08H ;CONTA 8 BIT...
MOVWF NUMCAR ;...PER OGNI BYTE TRASMESSO
BSF PORTA,3 ;SDA HIGH
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BCF PORTA,3 ;SDA LOW WHILE SCL HIGH=START C.
MOVLW 0A0H ;DEVICE ID A0 A1 A2 = 0 + WR
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 5CH ;QUESTO E'L'INDIRIZZO DOVE SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 81H ;QUESTO E' IL DATO DA SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
BCF PORTA,2 ;SCL LOW
CALL DELAY100
BCF PORTA,3 ;SDA=LOW
CALL DELAY100
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BSF PORTA,3 ; SDA HIGH WHILE SCL HIGH=STOP C.
CALL DELAY15 ;ASPETTA TEMPO DI WRITE
MOVLW 08H ;CONTA 8 BIT...
MOVWF NUMCAR ;...PER OGNI BYTE TRASMESSO
BSF PORTA,3 ;SDA HIGH
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BCF PORTA,3 ;SDA LOW WHILE SCL HIGH=START C.
MOVLW 0A0H ;DEVICE ID A0 A1 A2 = 0 + WR
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 5DH ;QUESTO E'L'INDIRIZZO DOVE SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 04H ;QUESTO E' IL DATO DA SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
BCF PORTA,2 ;SCL LOW
CALL DELAY100
BCF PORTA,3 ;SDA=LOW
CALL DELAY100
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BSF PORTA,3 ; SDA HIGH WHILE SCL HIGH=STOP C.
CALL DELAY15 ;ASPETTA TEMPO DI WRITE
MOVLW 08H ;CONTA 8 BIT...
MOVWF NUMCAR ;...PER OGNI BYTE TRASMESSO
BSF PORTA,3 ;SDA HIGH
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BCF PORTA,3 ;SDA LOW WHILE SCL HIGH=START C.
MOVLW 0A0H ;DEVICE ID A0 A1 A2 = 0 + WR
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 5EH ;QUESTO E'L'INDIRIZZO DOVE SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 4FH ;QUESTO E' IL DATO DA SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
BCF PORTA,2 ;SCL LOW
CALL DELAY100
BCF PORTA,3 ;SDA=LOW
CALL DELAY100
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BSF PORTA,3 ; SDA HIGH WHILE SCL HIGH=STOP C.
CALL DELAY15 ;ASPETTA TEMPO DI WRITE
MOVLW 08H ;CONTA 8 BIT...
MOVWF NUMCAR ;...PER OGNI BYTE TRASMESSO
BSF PORTA,3 ;SDA HIGH
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BCF PORTA,3 ;SDA LOW WHILE SCL HIGH=START C.
MOVLW 0A0H ;DEVICE ID A0 A1 A2 = 0 + WR
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 5FH ;QUESTO E'L'INDIRIZZO DOVE SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
MOVLW 44H ;QUESTO E' IL DATO DA SCRIVERE
MOVWF CODCAR
CALL TRASMETTIBYTE
BCF PORTA,2 ;SCL LOW
CALL DELAY100
BCF PORTA,3 ;SDA=LOW
CALL DELAY100
BSF PORTA,2 ;SCL HIGH
CALL DELAY100
BSF PORTA,3 ; SDA HIGH WHILE SCL HIGH=STOP C.
CALL DELAY15 ;ASPETTA TEMPO DI WRITE
RETURN
;*** SUBROUTINE DI TRASMISSIONE DI UN BYTE NELLA 24C02 (SISTEMA IIC BUS)
TRASMETTIBYTE CALL DELAY100
BCF PORTA,2 ;SCL LOW
RLF CODCAR,1 ;RUOTA A SINISTRA IL BYTE...
BTFSS STATUS,0
GOTO SDALOW
SDAHIGH BSF PORTA,3
GOTO NEXT
SDALOW BCF PORTA,3
NEXT CALL DELAY100
BSF PORTA,2 ;SCL HIGH
DECFSZ NUMCAR,1
GOTO TRASMETTIBYTE
BCF PORTA,2 ;SCL LOW PER ACK
BSF STATUS,5 ;BANK 1
BSF TRISA,3 ;CONFIGURA SDA COME INPUT PER ACK
BCF STATUS,5 ;BANK 0
CALL DELAY100
BSF PORTA,2 ;SCL HIGH LATCHA
TESTACK BTFSC PORTA,3
GOTO TESTACK
BSF STATUS,5 ;BANK 1
BCF TRISA,3 ;SDA COME OUTPUT
BCF STATUS,5 ;BANK 0
MOVLW 08H
MOVWF NUMCAR
RETURN
;*** SUBROUTINE DI RITARDO 5 MICROSECONDI ************************
DELAY100 MOVLW 10H
MOVWF 0EH
DECE100 DECFSZ 0EH,1
GOTO DECE100
RETURN
;*** SUBROUTINE DELAY 15 mS **************************************
DELAY15 MOVLW 64H ;DUE REGISTRI...
MOVWF 0DH ;...CHE SONO 0D & 0E
LOOPE15 MOVLW 32H
MOVWF 0EH
REDEC15 DECFSZ 0EH,1 ; E IL REGISTRO C...
GOTO REDEC15
DECFSZ 0DH,1
GOTO LOOPE15 ;..CARICATO ESTERNAMENTE...
RETURN
END
In pratica non ricordo come far partire il micro dall'indirizzo 00h e far eseguire il programma se viene premuto un pulsante messo su RB2 .
1 - Inizio programma
2 - Controlla RB2 . Se viene premuto il pulsante inizia scrittura , altrimenti controlla RB2
3 - Se la scrittura è ok accendi il led e torna a controllare RB2
Si prega Accesso o Crea un account a partecipare alla conversazione.
10 Anni 4 Mesi fa #4
da Mauro Laurenti
Risposta da Mauro Laurenti al topic Chi mi da una mano a modificare un file asm ?
L'inizio del programma e' definito dalla direttiva ORG che non vedo.
La direttiva ORG deve essere seguita dalla chiamata alla funzione principale.
Nel tuo caso credo che stai facendo uso di qualche valore di default per ORG e al reset vector poni l'etichetta AVVIO.
Per il controllo dei bit devi far uso delle istruzioni Bit Test, sulla porta PORTB bit 2.
Tali istruzioni ti permettono di saltare una istruzione. Questi test sono seguiti da un'istruzione CALL o GOTO, le quali ti permettono di andare ad una nuova etichetta e quindi proseguire in altre parti del codice. Se l'istruzione non viene saltata il codice salta con CALL o GOTO, mentre se l'istruzione e' saltata il codice continua con il resto del programma.
Devi pero' implementare anche un filtro, anti rimbalzo.
Onestamente mettere mani in un codice assembly non e' la mia passione, se non strettamente necessario.
Saluti,
Mauro
La direttiva ORG deve essere seguita dalla chiamata alla funzione principale.
Nel tuo caso credo che stai facendo uso di qualche valore di default per ORG e al reset vector poni l'etichetta AVVIO.
Per il controllo dei bit devi far uso delle istruzioni Bit Test, sulla porta PORTB bit 2.
Tali istruzioni ti permettono di saltare una istruzione. Questi test sono seguiti da un'istruzione CALL o GOTO, le quali ti permettono di andare ad una nuova etichetta e quindi proseguire in altre parti del codice. Se l'istruzione non viene saltata il codice salta con CALL o GOTO, mentre se l'istruzione e' saltata il codice continua con il resto del programma.
Devi pero' implementare anche un filtro, anti rimbalzo.
Onestamente mettere mani in un codice assembly non e' la mia passione, se non strettamente necessario.
Saluti,
Mauro
Si prega Accesso o Crea un account a partecipare alla conversazione.
- lo_sty
- Autore della discussione
- Giovane Utente
-
Less
Di più
- Messaggi: 32
- Ringraziamenti ricevuti 0
10 Anni 3 Mesi fa #5
da lo_sty
Risposta da lo_sty al topic Chi mi da una mano a modificare un file asm ?
Alla fine ho risolto riscrivendo tutto in C

Si prega Accesso o Crea un account a partecipare alla conversazione.
Moderatori: Mauro Laurenti, StefA, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.
Forum - Ultimi messaggi
-
- Strana anomalia LT lib module_EEPROM
- da marcoilgrande
-
- Nuova versione Kicad 9
- da Mauro Laurenti
-
- MODULO GSM SIM900A
- da embedded
-
- Freedom III e compilazioni fallite
- da Black
-
- LTerminal - nuove funzioni
- da Mauro Laurenti