Você está na página 1de 9

PRÁCTICA Nº 2

Microcontrolador PIC16F84A.

Objetivo:

Hacer juegos de encendidos y apagados de leds conectados al puerto B.

A la vez practicaremos con la intrucciones:

Swapf f,d

Rlf f,d

Rrf f,d

La instrucción swapf f,d intercambia los 4 bits de mayor peso por los cuatros de menor peso y viceversa
del dato contenido en el registro usado. Ejemplo:

swapf 0ch,1

Si tuviéramos en el registro 0ch el dato 0fh, al aplicar la instrucción el contenido se transformaría en f0h y
lo guardaríamos en 0ch por ser d= 1.

Si fuese d= 0 lo guardaríamos en el acumulador w.

La instrucción rlf f,d desplaza el contenido del registro usado hacia la izquierda, introduciendo por
el lugar del bit de menor peso el valor del acarreo. El acarreo es a su vez cargado con el contenido del bit
de más peso del dato contenido en el registro usado.
El contenido es almacenado en el registro si d= 1 y si no será guardado en el acumulador w por ser d= 0.
Ejemplo:

rlf 0ch,1

Si el valor contenido en el registro 0ch es 01h y el acarreo es cero, al desplazarse hacia la izquierda el
contenido será 02h. El valor 02h se guardará en 0ch por ser d= 1.

La instrucción rrf f, d desplaza el contenido del registro usado hacia la derecha introduciendo el
valor del acarreo por el bit de más peso y cargándose el acarreo con el valor del bit de menor peso del
registro. El valor del dato se guardará en el registro si d= 1 o en el acumulador w, si d= 0.

Ejemplo:
rrf 0ch,1

Si el contenido del registro 0ch fuese 00h y el acarreo valiese 1, el contenido del registro sería 80h,
y se guardaría en 0ch.

EL PROGRAMA SALTA A LA PRIMERA COMBINACION Y SE


REPITEN TODAS, HACIENDO

Esquema eléctrico:
Programa:

;--------------------------------------------------------

;PROGRAMA LED.ASM

;Apagar y encender el puerto B cada segundo

;--------------------------------------------------------

list p=16f84A

include "p16F84A.inc"

org 00h

reset
goto inicio

org 10h

inicio

;-------------------------------------------

;Configurar el puerto B como salida

;--------------------------------------------

;Registro TRISB=00h para salidas.

bsf STATUS,5; pongo a 1 el bit 5 del registro STATUS

; para entrar en el banco1.

movlw 00h; cargo w con el dato 00h.

movwf TRISB; cargo el registro TRISB con el w para

; hacer el puertoB como salida.

bcf STATUS,5; pongo a cero el bit 5 del registro

; STATUS para entrar en el banco 0.

;-----------------------------------

;PROGRAMA PRINCIPAL

;-----------------------------------

programa

movlw 00h; cargo w con el dato 00h.

movwf PORTB; cargo el registro PORTB con el w.

call sg1; subrutina de retardo de 1 seg.

call sg1

movlw 0fh; cargo w con el dato 0fh.

movwf PORTB; cargo el registro PORTB con el w.


call sg1

call sg1

swapf PORTB,1; aplico la intrucción al

; contenido del registro PORTB

; y lo deposito en el mismo ya

; que d= 1.

call sg1

call sg1

movlw 0ffh; cargo el w con el dato ffh.

movwf PORTB; cargo PORTB con el w.

call sg1

call sg1

call rotacion; subrutina de rotar un solo

; led de derecha a izquierda y

; viceversa ,una sola vez.

goto programa; salto al comienzo del progra-

; ma principal.

;-------------------------------------------------------------

;PROGRAMA DE ROTACION.

;-------------------------------------------------------------

rotacion

movlw 00h; cargo w con el dato 00h.

movwf 10h; cargo registro 10h con el w.


movlw 09h; cargo w con el dato 09h.

movwf 11h; cargo el registro 11h con w.

bsf STATUS,0; pongo a uno el bit 0 del STATUS

; ( bit 0 = C = acarreo ).

der

decfsz 11h,1; decremento el registro 11h y salto si

; es cero y deposito el contenido en

; 11h ya que d= 1.

goto derecha; salto a la etiqueta ( dirección ) llama-

; da derecha.

movlw 08h; cargo w con el dato 08h.

movwf 11h; cargo el registro 11h con w.

bcf STATUS,0; pongo a cero el bit 0 de STATUS

; ( bit 0 = C = acarreo ).

izq

decfsz 11h,1; decremento el registro 11h y salto

; si vale cero depositando el conteni-

; do en el mismo ya d= 1.

goto izquierda; salto a la etiqueta ( dirección ) lla-

; mada izquierda.

return; regreso de subrutina.


derecha

rrf 10h,0; roto a la derecha el contenido del

; registro 10h y lo almaceno en w ya

; que d= 0.

movwf 10h; cargo el registro 10h con el w.

movwf PORTB; cargo el registro PORTB con el w.

call sg1

goto der; salto a etiqueta der.

izquierda

rlf 10h,0; roto a la izquierda el contenido del

; registro 10h y lo almaceno en w ya

; que d= 0.

movwf 10h; cargo 10h con el w.

movwf PORTB; cargo PORTB con w.

call sg1

goto izq; salto a etiqueta izq.

;RETARDOS

;----------------------------------------

;ffh=255 goto=2 useg. decfsz=1 useg.

;(255 x 2) + 255= 765 useg

;(765 x 765) + 255= 585480 useg.

;(585480 x 2) + 1= 1170961 useg.

sg1
movlw 0ffh

movwf 0ch

movwf 0dh

movlw 01h

movwf 0eh

salto1

decfsz 0ch,1

goto salto1

decfsz 0dh,1

goto salto1

decfsz 0eh,1

goto salto1

return

end

Você também pode gostar