OR e set bit
COME IMPLEMENTARE L' “ OR “ CON GLI ST6
Nel set di istruzioni dei microcontrollori ST6 non é supportato l’istruzione OR la cui funzione logica é:
------->
dall’algebra boleana risulta infatti che U(or) = A + B é equivalente a
Quanto espresso é confermato anche dalla tabella di verità qui sotto riportata.
Ne consegue che la funzione OR può essere implementata usando le istruzioni COM ed AND supportate dagli ST6
pertanto OR di A e B (dove A e B possono essere registri o variabili) sará:
or com a ;complemento registro a (come un NOT su tutti i bit)
ld x,a ;salva reg. a in reg. x
ld a,b ;mette in a il valore di B
com a ;lo complementa
and a,x ;esegue l’ AND di
com a ;in a si trova l’OR di A e B
SET/RESET DEL BIT Nr DI UN BYTE
Dove Nr rappresenta una variabile o un registro.
Il set di istruzioni degli ST6 supporta il SET e RESET di un N bit del registro a o di una variabile ma solo nel modo immediato, cioè N deve essere un valore EQU o dato nel software come cifra di un numero compreso fra 0 e 7.
Esempio: SET 2,variabile ;mette a 1 il bit 2 della variabile
RES 0,variabile ;mette a 0 il bit 0 della var.
Se Nr é un registro o una variabile (con valore compreso tra 0 e 7)
non é ammesso usare direttamente:
SET Registro, Variabile.
Un metodo che permette di ottenere tale risultato é il seguente:
SET:
Nel registro a si ha il numero del bit da settare e nella variabile b il byte in cui settare il bit.
Set_ ld x,a ;in x il numero del bit da settare
ldi a,255 ;a = 11111111b
com a ;carry = 1 e a = 0
rcla rcl a ;ruota carry nel bit 0 e b7 in carry
dec x ;conta numero volte
jrnz rcla ;con nr. bit=5 si avrà a = 00010000b
or com a ;a = 11101111b
ld x,a ;salvo a in x
ld a,b ;a = byte b dove settare il bit 5 (ex: b=10001101b)
com a ;complementa a = 01110010b
and a,x ;a = 01100010b
com a ;a = 10011101b
ld b,a ;nel byte b dopo l’operazione si ha b=10011101
come si può osservare il bit numero 5 é settato mentre prima dell’operazione era resettato = 0.
RESET:
Nel registro a si ha il numero del bit da resettare e nella variabile b il byte in cui resettare il bit.
Res_ ld x,a ;in x il numero del bit da resettare
clr a ;carry = 0 e a =0
ldi a,255 ;a=11111111b
rcla rcl a ;ruota carry nel bit 0 e b7 in carry
dec x ;conta numero di volte
jrnz rcla ;con nr. bit= 4 si avrá a= 11110111b
ld x,a ;salva a in x
ld a,b ;a = byte b dove resettare il bit 4 (ex: b=10001101b)
and a,x ;a = 10000101b
ld b,a ;nel byte b dopo l’operazione si ha 10000101b
come si può osservare il bit numero 4 é resettato mentre prima dell’operazione era settato = 1.