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


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 21 ottobre 10, 19:07   #51 (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
Vecchio 21 ottobre 10, 22:22   #52 (permalink)  Top
User
 
L'avatar di elicottero78
 
Data registr.: 14-05-2005
Residenza: bergamo
Messaggi: 1.278
ciao e grazie,devo ancora finire di leggere il linguaggio c e mi devo decidere a prendere un bel po di appunti.

comunque grazie della spiegazione

provo a rispondere alla tua domanda,ma parlo da inesperto

-define,credo che serva x dare un assegnazione riguardante al pic
--conts,che credo sia costante,penso venga usata x definire un bit,un numero........


bocciato?scusami,ma sono ancora indietro
__________________
NUOVO DRONE TAGLIATO AL LASER CO2 https://www.youtube.com/watch?v=cBgCVNyPH5c&t=7s
GRUPPO LASER https://www.facebook.com/groups/1880460478909243/
elicottero78 non è collegato   Rispondi citando
Vecchio 21 ottobre 10, 22:40   #53 (permalink)  Top
User
 
Data registr.: 12-04-2006
Residenza: Mondovì
Messaggi: 103
Citazione:
-define,credo che serva x dare un assegnazione riguardante al pic
--conts,che credo sia costante,penso venga usata x definire un bit,un numero........
bocciato?scusami,ma sono ancora indietro
Purtroppo si.
Ritenta.
Se poi hai bisogno di altro aiuto, fatti sentire.
Davide B. non è collegato   Rispondi citando
Vecchio 21 ottobre 10, 22:48   #54 (permalink)  Top
User
 
L'avatar di elicottero78
 
Data registr.: 14-05-2005
Residenza: bergamo
Messaggi: 1.278
ok,lasciami studiare ancora un po,cosi poi almeno non sparo cavolate....avevo postato il programma solo x tirarmi via un dubbio,se no non andavo piu avanti.....x ora ti ringrazio x il tuo aiuto
__________________
NUOVO DRONE TAGLIATO AL LASER CO2 https://www.youtube.com/watch?v=cBgCVNyPH5c&t=7s
GRUPPO LASER https://www.facebook.com/groups/1880460478909243/
elicottero78 non è collegato   Rispondi citando
Vecchio 21 ottobre 10, 23:37   #55 (permalink)  Top
User
 
L'avatar di MSchiepp
 
Data registr.: 21-01-2004
Residenza: Milano
Messaggi: 989
Citazione:
Originalmente inviato da Davide B. Visualizza messaggio
Rileggendo il programma il codice fa pure di peggio...
Azz... e io che pensavo ti fargli vedere gli errori uno per volta...

Michele
__________________
__________________________________________________
The worst day flying is better than the best day working.
MSchiepp non è collegato   Rispondi citando
Vecchio 22 ottobre 10, 13:27   #56 (permalink)  Top
Rivenditore - B.C.M. Power & Tools
 
L'avatar di claudio476
 
Data registr.: 28-09-2004
Residenza: Veroli (Fr)
Messaggi: 2.722
bel link da stampare e appendere al muro

Operators in C and C++ - Wikipedia, the free encyclopedia
__________________
www.quattrociocchi.it (aeromodellismo,fotografie,energie,varie ed eventuali..)
[Fusione Fredda, come spiegarla a mia nonna]

claudio476 non è collegato   Rispondi citando
Vecchio 22 ottobre 10, 13:41   #57 (permalink)  Top
Rivenditore - B.C.M. Power & Tools
 
L'avatar di claudio476
 
Data registr.: 28-09-2004
Residenza: Veroli (Fr)
Messaggi: 2.722
Citazione:
Originalmente inviato da Davide B. Visualizza messaggio
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.
ipotizziamo di avere una variabile Led1 che gestisca un pin di Output,
dalla tua risposta e dal link che ho postato prima deduco che scrivere

Led1 = !Led1
apparentemente simile a
Led1 = ~Led1

ma nel primo caso funziona ma solo per caso! in quanto sto prendendo in considerazione una variabile di un solo bit, giusto?

ne deduco che non funzionerebbe se scrivessi
portb = !portb

cioè tale istruzione non negherebbe tutti gli 8 bit singolarmente ma porterebbe portb a 0 o 1 a seconda se la porta B sia 1 o 0 e farebbe casino nel caso in cui sia un valore diverso da questi, giusto?
__________________
www.quattrociocchi.it (aeromodellismo,fotografie,energie,varie ed eventuali..)
[Fusione Fredda, come spiegarla a mia nonna]

claudio476 non è collegato   Rispondi citando
Vecchio 22 ottobre 10, 14:27   #58 (permalink)  Top
User
 
L'avatar di illez
 
Data registr.: 06-08-2007
Residenza: Empoli
Messaggi: 1.813
Citazione:
Originalmente inviato da claudio476 Visualizza messaggio
ipotizziamo di avere una variabile Led1 che gestisca un pin di Output,
dalla tua risposta e dal link che ho postato prima deduco che scrivere

Led1 = !Led1
apparentemente simile a
Led1 = ~Led1

ma nel primo caso funziona ma solo per caso! in quanto sto prendendo in considerazione una variabile di un solo bit, giusto?

ne deduco che non funzionerebbe se scrivessi
portb = !portb

cioè tale istruzione non negherebbe tutti gli 8 bit singolarmente ma porterebbe portb a 0 o 1 a seconda se la porta B sia 1 o 0 e farebbe casino nel caso in cui sia un valore diverso da questi, giusto?
Assolutamente si.
Il risultato della not logica è 1 oppure 0.
ESEMPIO:
i=0b0101;
j=!i;
b=~i;

Risultato assembler dopo la compilazione:

.................... i=0b0101;
004B: MOVLW 05
004C: BCF 03.5
004D: MOVWF 21


.................... j=!i;
004E: MOVF 21,F
004F: BTFSC 03.2
0050: GOTO 053
0051: MOVLW 00 <----- risultato = 0
0052: GOTO 054
0053: MOVLW 01
<----- risultato = 1
0054: MOVWF 22

.................... b=~i;
0055: MOVF 21,W
0056: MOVWF 23
0057: COMF 23,F


Nota come la NOT logica sia più lunga della semplice b=~i; già questo potrebbe suggerire ottimizzazioni nel programma
__________________
.......
illez non è collegato   Rispondi citando
Vecchio 22 ottobre 10, 22:08   #59 (permalink)  Top
User
 
Data registr.: 12-04-2006
Residenza: Mondovì
Messaggi: 103
Citazione:
Led1 = !Led1
apparentemente simile a
Led1 = ~Led1
Hai detto bene... apparentemente.
Ma la prima ha senso come...
if (a=b).
Il compilatore non si inca... ma non è detto che il risultato sia quello che deve.
Davide B. non è collegato   Rispondi citando
Vecchio 22 ottobre 10, 22:20   #60 (permalink)  Top
User
 
Data registr.: 12-04-2006
Residenza: Mondovì
Messaggi: 103
Citazione:
Originalmente inviato da Davide B. Visualizza messaggio
Hai detto bene... apparentemente.
Ma la prima ha senso come...
if (a=b).
Il compilatore non si inca... ma non è detto che il risultato sia quello che deve.
Così, per curiosità. Cosa ti ha fatto venire in mente di usare la NOT logica (!) e non quella Aritmetica (~)?
Davide B. non è collegato   Rispondi citando
Rispondi

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 00:37.


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