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.