Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Scrivere solo alcuni bit di una PORTA

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[11] Re: Scrivere solo alcuni bit di una PORTA

Messaggioda Foto UtenteWALTERmwp » 7 giu 2015, 22:53

Orionis ha scritto:la sequenza che ho inviato fa esattamente quello che Davide90 chiede
se lo hai verificato immagino sia così.
Però, riscrivo, e potrei sbagliarmi, che se parto dal presupposto che la define "w" vale zero, le assegnazioni avvengono tutte sul registro W mentre LATA e LATB rimangono invariati ad eccezione, per LATA, nell'ultima istruzione.
I valori, se non erro, dovrebbero essere questi:
Codice: Seleziona tutto
   ISTRUZIONE          W       LATA    LATB
1) movlw   0xf0    -   0xF0    0x15    0x73
2) andwf   LATB,w  -   0x70    0x15    0x73
3) xorlw   0xf0    -   0x80    0x15    0x73
4) xorwf   LATA,w  -   0x95    0x15    0x73
5) xorlw   0x0f    -   0x9A    0x15    0x73
6) movwf   LATA    -   0x9A    0x9A    0x73
dove, a destra dell'istruzione, ci sono i valori che si dovrebbero trovare dopo l'esecuzione della stessa.
Magari mi è sfuggito qualcosa, poi ci riguardo.
Intanto, potresti controllare per favore ?
Grazie.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8990
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[12] Re: Scrivere solo alcuni bit di una PORTA

Messaggioda Foto UtenteOrionis » 8 giu 2015, 11:10

:oops: :oops: :oops:
Hai ragione Foto UtenteWALTERmwp
Il fulmine cada su di me (come é quasi successo ieri sera :shock: ).
il codice che ho inviato non funziona; so che avevo usato valori diversi per la prova (che ora non ricordo) e con quelli funzionava, sicuramente per caso. Mi impegno a rivedere i miei calcoli appena possibile.

A mia parziale riscatto, posto il codice che ho trovato a questo link:
http://www.talkingelectronics.com/projects/PICK%20A%20PIC%20Project/XOR-Trick-1.html
E' perfetto (provato con almeno 5 combinazioni diverse) e assolutamente minimale: solo 4 istruzioni.

Codice: Seleziona tutto
  movf latb,w
  xorwf lata,w
  andlw 0xf0  ;sostituire con la maschera voluta
  xorwf lata,f


In ingresso: LATA = 0x15, LATB = 0x73
In uscita: LATA = 0x75, come voluto

Meglio di cosi' la vedo impossibile.
O_/
Nemmeno gli Dei possono nulla contro la stupidità umana ?
Avatar utente
Foto UtenteOrionis
2.083 1 6 13
Expert
Expert
 
Messaggi: 103
Iscritto il: 16 mag 2015, 10:33
Località: Bergamo

0
voti

[13] Re: Scrivere solo alcuni bit di una PORTA

Messaggioda Foto UtenteWALTERmwp » 8 giu 2015, 12:58

Orionis ha scritto:Hai ragione WALTERmwp
purtroppo si.
Orionis ha scritto:(...) la sequenza che ho inviato fa esattamente quello che Davide90 chiede (...)

Orionis ha scritto:(...) il codice che ho inviato non funziona; so che avevo usato valori diversi per la prova (che ora non ricordo) e con quelli funzionava, sicuramente per caso. (...)

Ecco, quanto sopra non è per farla "pesare" più di tanto ma se spacci per buono quello che non lo è non va bene.
E non è l'errore in sé, cosa che accade e può accadere a tutti, ma il fatto di non aver controllato quanto invece era possibile (non occorre un simulatore); avevi scritto di avere verificato quando, evidentemente, non è stato fatto.
Lo zelo è apprezzato, ma anche l'attenzione che occorre per evitare di scrivere spropositi.
Orionis ha scritto:(...) A mia parziale riscatto, posto il codice che ho trovato a questo link (...)
si, ora ti puoi avviare verso il processo di riabilitazione ... funziona, ed è ottimizzato; vediamo se l'OP lo apprezza.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8990
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[14] Re: Scrivere solo alcuni bit di una PORTA

Messaggioda Foto UtenteDavide90 » 10 giu 2015, 19:35

Ragazzi, grazie a tutti per l 'impegno!

Appena avrò la possibilità proverò il codice, e sono sicuro che funzionerà, dovrei iniziare ad approfondire la mia scarsa conoscenza dell' assembly.

Se uso queste questo statement :

Codice: Seleziona tutto
#asm

#endasm


a tempo di compilazione, il compilatore dovrebbe "prendere per buono" il codice assembly che c' è nello statement oppure effettua una riconversione?

Io penso che lasci inalterate queste istruzioni o sbaglio?
Avatar utente
Foto UtenteDavide90
29 6
Frequentatore
Frequentatore
 
Messaggi: 130
Iscritto il: 5 lug 2012, 11:34

0
voti

[15] Re: Scrivere solo alcuni bit di una PORTA

Messaggioda Foto UtenteIlGuru » 1 set 2015, 12:15

Davide90 ha scritto:C' è un modo per ottenere la stessa cosa, scrivendo la PORTA tutta in un colpo? Usando uno shadow_reg ma poi quale operatore usare ?


Codice: Seleziona tutto
PORTA |= (PORTB & 0b11110000);


Fa la stessa cosa ed è più compatto, spero vada bene.
\Gamma\nu\tilde{\omega}\theta\i\ \sigma\epsilon\alpha\upsilon\tau\acute{o}\nu
Avatar utente
Foto UtenteIlGuru
5.482 2 10 13
G.Master EY
G.Master EY
 
Messaggi: 1924
Iscritto il: 31 lug 2015, 23:32

Precedente

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 10 ospiti