| | #20 (permalink) Top | |
| User Data registr.: 12-04-2006 Residenza: Mondovì
Messaggi: 103
| Citazione:
A parte gli errori di "lingua", ovvero il ==, c' erano un po' di errori di concetto che adesso ti spiego. Per capire lo stato di un bit, non puoi fare un test secco, esempio if (portb == 0b00000001), perchè non testi il bit, ma l'intera porta. Questo significa che... questa condizione NON SOLO si verifica quando un pulsante è premuto E CONTEMPORANEAMENTE l'altro non lo è, ma anche quando I DUE LED SONO SPENTI. Ecco che... la condizione è un po' differente da quello che pensavi. Ma questo sarebbe valso in qualsiasi linguaggio. La condizione giusta la puoi (devi?) fare con una AND bit a bit, ovvero con la &. io infatti ho scritto if ((portb & PULSANTE1) ... dove pulsante 1 è stato definito con una direttiva "define" imponendo il valore 0b00000001. Questa operazione è una mascheratura che lascia "vivo" solo l'ultimo bit, poichè questo è a 1. In generale una mascheratura mediante AND bit a bit lascia "vivi" tutti i bit che nella mascheratura sono a 1 mentre quelli che sono a 0 vengono azzerati. Quindi il risultato di questa AND può essere 0b00000001 oppure 0b00000000, a seconda del valore dell'ultimo bit... nel caso di questa maschera. Altro nel caso di altre maschere, vedi PULSANTE2. L'altra operazione, la |, è una OR bit a bit, e funziona in maniera duale. Significa che... se faccio la OR con una maschera, i bit che nella maschera sono a 0 vengono lasciati invariati, quelli a 1 vengono settati a 1 indipendentemente dal loro valore. L'ultima operazione è una operazione sulla maschera, che ho fatto per "azzerare" il bit 6 o 7 indipendentemente dal valore degli altri. Questo lo puoi fare con una AND, ma devi "invertire il numero bit a bit" e lo fai con la "tilde", alt+126, ovvero la NOT. Questo significa che nel tuo caso, spegnevi il led non interessato... Anche qui la cosa è indipendente dal linguaggio. Per quanto riguarda le "define", abituati ad usarle abbondantemente, soprattutto perchè è più semplice leggere il mio programma del tuo. Inoltre, supponendo di voler invertire la mappatura dei pulsanti o dei led, cambi le define senza rincorrere il codice. Una domanda intelligente potrebbe essere "ma che differenza c'è tra le define e le const?". Prova a pensarci... se poi non lo capisci, chiedi. | |
| | |
| Bookmarks |
| |
Discussioni simili | ||||
| Discussione | Autore discussione | Forum | Commenti | Ultimo Messaggio |
| modificare linguaggio menù mc3030 | ravenlinux2000 | Radiocomandi | 0 | 24 aprile 07 20:03 |
| info | francescospina | Elimodellismo in Generale | 0 | 26 ottobre 06 11:41 |
| Linguaggio E Versioni Simulatore Reflex Xtr | ctenos | Simulatori | 1 | 30 novembre 05 16:02 |