Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Assegnazione valori in celle sequenziali

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Assegnazione valori in celle sequenziali

Messaggioda Foto Utentemros » 18 dic 2014, 16:01

Salve a tutti

esiste un modo, in assembler, per azzerare il contenuto delle "variabili" utilizzando un ciclo anzichè azzerare singola variabile?

questa è l'operazione che oggi faccio:

CLRF var1
CLRF var1+1
--------------
CLRF var1+n

grazie
Avatar utente
Foto Utentemros
10 1 5
Frequentatore
Frequentatore
 
Messaggi: 131
Iscritto il: 28 giu 2010, 9:23

3
voti

[2] Re: Assegnazione valori in celle sequenziali

Messaggioda Foto Utentec1b8 » 18 dic 2014, 17:17

Sarebbe molto utile sapere quale micro stai utilizzando, nell'ipotesi sia un PIC 16F la cosa è molto semplice.

L'esempio che segue pulisce 20 locazioni di memoria a partire dalla posizione della var1, si utilizza una variabile in memoria per il conteggio del loop da effettuare (loop_count):
Codice: Seleziona tutto
          movlw 20
          movwf loop_count
          movlw var1
          movwf FSR
next:     clrf INDF
          incf FSR
          decfsz   loop_count,F
          goto  next
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23

0
voti

[3] Re: Assegnazione valori in celle sequenziali

Messaggioda Foto Utentemros » 18 dic 2014, 18:15

esattamente il PIC16F677.


mille grazie
Avatar utente
Foto Utentemros
10 1 5
Frequentatore
Frequentatore
 
Messaggi: 131
Iscritto il: 28 giu 2010, 9:23

0
voti

[4] Re: Assegnazione valori in celle sequenziali

Messaggioda Foto Utentemros » 19 dic 2014, 13:29

Pertanto......volendo registrare nella eeprom interna di un PIC 16F677 - 90 valori partendo dall'indirizzo x00 e utilizzando il codice che hai condiviso, questa funzione dovrebbe andar bene:

Codice: Seleziona tutto
REG_EE
      
   CLRF   PARC
   MOVLW   90      ;AZZERO 90 VARIABILI
   MOVWF   loop_count
   MOVLW   T0
   MOVWF   FSR
next2
   Bank2
   MOVLW   INDF
   MOVWF   EEDATA   
   INCF   FSR,1
   Bank0
   MOVF   PARC,W
   INCF   PARC,F
   Bank2
   MOVWF   EEADR
   CALL   SCRIVI
   Bank0
   DECFSZ  loop_count,F
   GOTO   next2   

   RETURN


giusto?? ?%
Avatar utente
Foto Utentemros
10 1 5
Frequentatore
Frequentatore
 
Messaggi: 131
Iscritto il: 28 giu 2010, 9:23

1
voti

[5] Re: Assegnazione valori in celle sequenziali

Messaggioda Foto Utentec1b8 » 19 dic 2014, 13:50

Se lo scopo è quello di leggere 90 valori a partire dalla variabile T0 e scriverli nella EEPROM a partire dall'indirizzo 0, direi che ci sei quasi ma c'è un piccolo errore:
Codice: Seleziona tutto
MOVLW   INDF

questa istruzione non legge il contenuto della T0 (e successivamente delle altre locazioni di RAM), ma legge l'indirizzo del registro INDF.... dovrebbe essere:
Codice: Seleziona tutto
MOVW   INDF, W



Se lo scopo è altro allora...
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23

0
voti

[6] Re: Assegnazione valori in celle sequenziali

Messaggioda Foto Utentemros » 19 dic 2014, 14:39

ancora grazie per la dritta......ho capito dove ho sbagliato
Avatar utente
Foto Utentemros
10 1 5
Frequentatore
Frequentatore
 
Messaggi: 131
Iscritto il: 28 giu 2010, 9:23

0
voti

[7] Re: Assegnazione valori in celle sequenziali

Messaggioda Foto Utentemros » 23 dic 2014, 12:06

Ciao, purtroppo il micro quando esegue il seguente codice si blocca......

Codice: Seleziona tutto
    MOVLW   92      ;AZZERO 92 VARIABILI
    MOVWF   loop_count
    MOVLW   T0
    MOVWF   FSR
next   
   CLRF   INDF
    INCF   FSR,1
    DECFSZ  loop_count,F
    GOTO   next



dove sbaglio??
Avatar utente
Foto Utentemros
10 1 5
Frequentatore
Frequentatore
 
Messaggi: 131
Iscritto il: 28 giu 2010, 9:23

1
voti

[8] Re: Assegnazione valori in celle sequenziali

Messaggioda Foto Utentec1b8 » 23 dic 2014, 12:43

Difficile a dirsi dove possa essere il problema.
Alcune domande:
1) In quale banco di memoria si trova l'area di 92 byte da azzerare ed in quale banco la variabile loop_count che serve al controllo del loop?
2) loop_count è prima o dopo i 92 byte da azzerare?

Ipotesi possibile: con il codice che riporti loop_count e l'area di 92 byte devono essere nello stesso banco di memoria, e per il 16F677 che stai utilizzando, devono stare nel banco 0. Nello stesso banco possono stare solo altri 3 byte. Se così non fosse allora il loop è imprevedibile.
Altra possibilità: hai definito la loop_count e l'area di 92 byte nel banco 0, ma la loop_count è dopo l'area di 92 byte e questa è in realtà non riservata correttamente. In questo caso il tuo loop cancella la loop_count portandoti ad un loop imprevedibile.
Fabio
Avatar utente
Foto Utentec1b8
3.595 3 8 13
G.Master EY
G.Master EY
 
Messaggi: 1770
Iscritto il: 15 gen 2009, 15:23

1
voti

[9] Re: Assegnazione valori in celle sequenziali

Messaggioda Foto Utentemros » 23 dic 2014, 14:28

Grazie Fabio, effettivamente ho commesso l'errore che dicevi:

Codice: Seleziona tutto
        cblock     0x20
   Count:3      ;PER IL RITARDO
   PARC
   T0:2
   T1:2
   T2:2
   T3:2
   T4:2
   T5:2
   T6:2
   T7:2
   T8:2
   T9:2
   T10:2
   T11:2
   T12:2
   T13:2
   T14:2
   T15:2
   T16:2
   T17:2
   T18:2
   T19:2
   T20:2
   T21:2
   T22:2
   T23:2
   T24:2
   T25:2
   T26:2
   T27:2
   T28:2
   T29:2
   T30:2
   T31:2
   T32:2
   T33:2
   T34:2
   T35:2
   T36:2
   T37:2
   T38:2
   T39:2
   T40:2
   T41:2
   T42:2
   T43:2
   T44:2
   T45:2
   loop_count
   RIF:2

   ENDC


a questo punto però ne approfitto ....... la memoria interna del pic16f677 è di 128 byte e io ne ho riservato meno...perché allora mi crea casini?? ?%

comunque grazie sei un grande
Avatar utente
Foto Utentemros
10 1 5
Frequentatore
Frequentatore
 
Messaggi: 131
Iscritto il: 28 giu 2010, 9:23

0
voti

[10] Re: Assegnazione valori in celle sequenziali

Messaggioda Foto Utentemros » 23 dic 2014, 14:32

.....ho ri-letto il datasheet e adesso mi è chiaro.....il problema è che ho solo 96 byte sul banco 0.
Avatar utente
Foto Utentemros
10 1 5
Frequentatore
Frequentatore
 
Messaggi: 131
Iscritto il: 28 giu 2010, 9:23

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti