Visualizza messaggio singolo
Vecchio 21 ottobre 10, 19:07   #51 (permalink)  Top
Davide B.
User
 
Data registr.: 12-04-2006
Residenza: Mondovì
Messaggi: 103
Citazione:
cavolo,è tutto l opposto di quello che ho scritto io, con mikrobasic, bastava un niente a scrivere questo programma,ma con mikroc è tutta un altra storia
Sono convinto che la differenza non sia così grande come credi tu.
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.
Davide B. non è collegato   Rispondi citando