fabianon Inserito: 21 febbraio 2014 Segnala Share Inserito: 21 febbraio 2014 ciao chi mi fa un esempio di utilizzo del WAND_W EN IN1 MW10 IN2 W#16#F ENO OUT MW20 Link al commento Condividi su altri siti More sharing options...
JumpMan Inserita: 21 febbraio 2014 Segnala Share Inserita: 21 febbraio 2014 (modificato) E' un AND tra le 2 word poste in IN1 e IN2, il risultato va in OUT Nel tuo caso IN2 è una costante che in binario vale: 0000 0000 0000 1111 Per cui fare l'AND tra la MW10 che entra in IN1 e la costante 0000 0000 0000 1111 equivale a dire mascherare i bit più significativi lasciando passare solo i primi 4 bit meno significativi, esempio: IN1 = 1010 1111 0100 0101 // <<< MW10 IN2 = 0000 0000 0000 1111 // <<< W#16#F OUT = 0000 0000 0000 0101 // <<< MW20 Modificato: 21 febbraio 2014 da JumpMan Link al commento Condividi su altri siti More sharing options...
fabianon Inserita: 21 febbraio 2014 Autore Segnala Share Inserita: 21 febbraio 2014 ti ringrazio per la spiegazione anche se non ho ancora afferrato bene in quali situazioni andrebbe usata. Link al commento Condividi su altri siti More sharing options...
JumpMan Inserita: 22 febbraio 2014 Segnala Share Inserita: 22 febbraio 2014 (modificato) Ti faccio un esempio in AWL dove UW corrisponde a WAND_W, supponiamo di voler rilevare il fronte positivo di uno qualsiasi tra 16 allarmi e in caso di nuovo allarme attivare una sirena, per farlo con la logica booleana servono grossomodo una settantina di istruzioni, lavorando con le word il codice si riduce a 10 istruzioni: L #MemAll_0_16 // Memorie 16 allarmi INVI // inverti tutti i bit (ACCU1 ha lo stato precedente NEGATO dei 16 allarmi) L #Allarmi_0_16 // 16 Allarmi (ACCU2 ha lo stato attuale dei 16 allarmi) T #MemAll_0_16 // (memorizza per il ciclo successivo senza cambiare ACCU1 e ACCU2) UW // WAND_W tra ACCU1 e ACCU2 (passano dall' UW solo i bit che sono a 1 e prima erano a 0) L 0 // Confronta il risultato del WAND_W con 0 <>I // se <>0 è stato rilevato un fronte S #Sirena // quindi setta il bit #Nuovo_Allarme U #Tacitazione // Pulsante tacitazione R #Sirena // resetta il bit Lavorando in doppia parola (INVD, UD, <>D) potrei anche gestire 32 allarmi sempre con 10 istruzioni in luogo di 140 istruzioni booleane ! ------------------ Ma ci sono anche applicazioni più banali, come p.es. filtrare la base dei tempi dal valore di un temporizzatore. Modificato: 22 febbraio 2014 da JumpMan Link al commento Condividi su altri siti More sharing options...
fabianon Inserita: 22 febbraio 2014 Autore Segnala Share Inserita: 22 febbraio 2014 grazie ora ho qualcosa su cui lavorare!! spero di riuscire a costruire qualcosa di buono. Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora