Torna indietro   BaroneRosso.it - Forum Modellismo > Elettronica > Circuiti Elettronici


 
 
Strumenti discussione Visualizzazione
Prev Messaggio precedente   Prossimo messaggio Next
Vecchio 21 ottobre 10, 19:07   #20 (permalink)  Top
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
 

Bookmarks




Regole di scrittura
Non puoi creare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è Attivato
Le faccine sono Attivato
Il codice [IMG] è Attivato
Il codice HTML è Disattivato
Trackbacks è Disattivato
Pingbacks è Disattivato
Refbacks è Disattivato


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



Tutti gli orari sono GMT +2. Adesso sono le 19:08.


Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2026
www.baronerosso.it - www.toymagazine.it