Citazione:
Originalmente inviato da claudio476 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