Está en la página 1de 17

Instituto Tecnolgico de Nogales

03/23/14
Lenguajes de Interfaz
Prctica 1 y 2; encender LED, juego de LEDs
Daniel Ramos Melndez
11340405
Prctica 1; Encender un LED (sin incluir bibliotecas de PIC .inc)

Para esta primer prctica lo que realizaremos ser encender y apagar un LED por medio de la salida de
un 1 o un 0 en el respectivo pin del Microcontrolador, las caractersticas que utilizaremos sern las
siguientes en el cdigo que programaremos al PIC.

LIST p=16F877A ;le dice al ensamblador que micro est en uso
__config 3D38h ;asignacin de bits de configuracin
;hexadecimal 3D38 a binario = 11110100111000
;palabra de configuracin (direccin 2007h)
;Registros; CP, ?, DEBUG, WRT1, WRT0, CPD, LVP, BOREN, ?, ?, PWRTEN, WDTEN,
;FOSC1 y FOSC0

;11110100111000
;CP 1
;? sin aplicarse: leido como '1'
;DEBUG 1
;WRT1 1
;WRT0 0
;CPD 1
;LVP 0
;BOREN 0
;? sin aplicarse: leido como '1'
;? sin aplicarse: leido como '1'
;PWRTEN 1
;WDTEN 0
;FOSC1 0
;FOSC0 0

;CP --> 1; Proteccin de cdigo desactivada
;DEBUG --> 1; Depurador en circuito desactivado.
;WRT1, WRT0 --> 10; 0000h a 00FFh protegido contra escritura.
;CPD --> 1; Data EEPROM proteccin de cdigo desactivada
;LVP --> 0; RB3 es E/S digital.
;BOREN --> 0; BOR desactivado.
;PWRT --> 1; PWRT desactivado.
;WDTEN --> 0; WDT desactivado.
;FOSC1, FOSC0 --> 00; oscilador LP.

;*****Configuracin de Constantes****
STATUS equ 03h ;Direccin del registro STATUS
TRISB equ 86h ;Direccin del registro tristate para el puerto B
PORTB equ 06h ;Direccin de Port B
COUNT1 equ 20h ;Primer contador para nuestros retardos
COUNT2 equ 21h ;Segundo contador para nuestros retardos

org 0x0000 ;org asigna el origen, 0x0000 para el 16F877A,
;aqu es donde el programa comienza a correr
;****Iniciar puertos****
bsf STATUS,5 ;Cambio al Banco 1
movlw 0h ;Inicia pines puerto B
movwf TRISB ;como salidas.
bcf STATUS,5 ;Cambia banco a banco 0

;****Enciende LED 0****
Start
movlw 1h ;Enciende el LED poniendo 1 primero en el registro w
movwf PORTB ;y luego al puerto

;****Inicio del retardo 1****
Loop1
decfsz COUNT1,1 ;substrae 1 de 255
goto Loop1 ;si COUNT es cero, continuar.

;****Retardo terminado, ahora apaga el LED****
movlw 0h ; Apaga el LED poniendo 0 primero en el registro w
movwf PORTB ;y luego al puerto

;****Otro Retardo****
Loop2 decfsz COUNT2,1 ;Este segundo retardo mantiene el
goto Loop2 ;LED apagado lo suficiente para que nosotros lo veamos

;****Ahora vuelve al inicio del Programa
goto Start ;regresa al inicio y enciende el LED
;de nuevo

;****Fin del programa****
end ;Necesario para algunos compiladores,
;y tambin en caso de que olvidemos la instruccin ir a inicio


Anexo el Circuito


Prctica 2; Juego de Luces LED (sin incluir bibliotecas de PIC .inc)

Para esta segunda prctica lo que realizaremos ser encender y apagar una serie de LEDs por medio de
la salida de un 1 o un 0 en el respectivo pin del Microcontrolador, si la entrada de un switch es cambiada
se cambiar el juego actual, las caractersticas que utilizaremos sern las siguientes en el cdigo que
programaremos al PIC.

LIST p=16F877A ;le dice al ensamblador que micro est en uso
__config 3D38h ;asignacin de bits de configuracin
;hexadecimal 3D38 a binario = 11110100111000
;palabra de configuracin (direccin 2007h)
;Registros; CP, ?, DEBUG, WRT1, WRT0, CPD, LVP, BOREN, ?, ?, PWRTEN, WDTEN,
;FOSC1 y FOSC0

;11110100111000
;CP 1
;? sin aplicarse: leido como '1'
;DEBUG 1
;WRT1 1
;WRT0 0
;CPD 1
;LVP 0
;BOREN 0
;? sin aplicarse: leido como '1'
;? sin aplicarse: leido como '1'
;PWRTEN 1
;WDTEN 0
;FOSC1 0
;FOSC0 0

;CP --> 1; Proteccin de cdigo desactivada
;DEBUG --> 1; Depurador en circuito desactivado.
;WRT1, WRT0 --> 10; 0000h a 00FFh protegido contra escritura.
;CPD --> 1; Data EEPROM proteccin de cdigo desactivada
;LVP --> 0; RB3 es E/S digital.
;BOREN --> 0; BOR desactivado.
;PWRT --> 1; PWRT desactivado.
;WDTEN --> 0; WDT desactivado.
;FOSC1, FOSC0 --> 00; oscilador LP.

;*****Configuracin de Constantes****
STATUS equ 03h ;Direccin del registro STATUS
TRISB equ 86h ;Direccin del registro tristate para el puerto B
PORTB equ 06h ;Direccin del puerto B
TRISC equ 87h ;Direccin del registro tristate para el puerto C
PORTC equ 07h ;Direccin del puerto C
TRISD equ 88h ;Direccin del registro tristate para el puerto D
PORTD equ 08h ;Direccin del puerto D
COUNT1 equ 20h ;Primer contador para nuestros retardos
COUNT2 equ 21h ;Segundo contador para nuestros retardos

org 0x0000 ;org asigna el origen, 0x0000 para el 16F877A,
;aqu es donde el programa comienza a correr

;****Iniciar puertos****
bsf STATUS,5 ;Cambio al Banco 1
movlw 0h ;Asigna puertos D y C
movwf TRISD ;a salida.
movwf TRISC
movlw 1h ;Asigna el pin 0 del puerto B
movwf TRISB ;a entrada
bcf STATUS,5 ;Cambia banco a banco 0

;****Apaga todos los LED's****
movlw 00h ;Apaga todos los LEDs primero ponindolo primero en el registro w
movwf PORTC ;y despus en el puerto
movwf PORTD

;****Lee el pin 0 del puerto B****
Inicio
BTFSS PORTB, 0 ;si el pin 0 del puerto B es 1 vamos al Game1
GOTO GAME2 ;si no vamos al Game2
GOTO GAME1

;****Juego 1, luces encienden del inicio al final ****
GAME1
;****Port D LED's****
movlw 01h ;Enciende el LED 1 ponindolo primero
movwf PORTD ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 02h ;Enciende el LED 2 ponindolo primero
movwf PORTD ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 04h ;Enciende el LED 3 ponindolo primero
movwf PORTD ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 08h ;Enciende el LED 4 ponindolo primero
movwf PORTD ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 10h ;Enciende el LED 5 ponindolo primero
movwf PORTD ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 20h ;Enciende el LED 6 ponindolo primero
movwf PORTD ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 40h ;Enciende el LED 7 ponindolo primero
movwf PORTD ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 80h ;Enciende el LED 8 ponindolo primero
movwf PORTD ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 0h ;Apaga todos los LEDs primero ponindolo
movwf PORTD ;en el registro w y despus
;en el puerto

;****Port C LED's****
movlw 01h ;Enciende el LED 1 ponindolo primero
movwf PORTC ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 02h ;Enciende el LED 2 ponindolo primero
movwf PORTC ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 04h ;Enciende el LED 3 ponindolo primero
movwf PORTC ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 08h ;Enciende el LED 4 ponindolo primero
movwf PORTC ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 10h ;Enciende el LED 5 ponindolo primero
movwf PORTC ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 20h ;Enciende el LED 6 ponindolo primero
movwf PORTC ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 40h ;Enciende el LED 7 ponindolo primero
movwf PORTC ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 80h ;Enciende el LED 8 ponindolo primero
movwf PORTC ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 0h ;Apaga todos los LEDs primero ponindolo
movwf PORTC ;en el registro w y despus
;en el puerto

;****Game End****
goto Start ;Regresar a inicio

;****Game 2, luces encienden de fin a inicio ****
GAME2
;****Port D LED's****
movlw 80h ;Enciende el LED 8 ponindolo primero
movwf PORTD ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 40h ;Enciende el LED 7 ponindolo primero
movwf PORTD ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 20h ;Enciende el LED 6 ponindolo primero
movwf PORTD ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 10h ;Enciende el LED 5 ponindolo primero
movwf PORTD ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 08h ;Enciende el LED 4 ponindolo primero
movwf PORTD ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 04h ;Enciende el LED 3 ponindolo primero
movwf PORTD ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 02h ;Enciende el LED 2 ponindolo primero
movwf PORTD ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 01h ;Enciende el LED 1 ponindolo primero
movwf PORTD ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 0h ;Apaga todos los LEDs primero ponindolo
movwf PORTD ;en el registro w y despus
;en el puerto

;****Port C LED's****
movlw 80h ;Enciende el LED 8 ponindolo primero
movwf PORTC ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 40h ;Enciende el LED 7 ponindolo primero
movwf PORTC ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 20h ;Enciende el LED 6 ponindolo primero
movwf PORTC ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 10h ;Enciende el LED 5 ponindolo primero
movwf PORTC ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 08h ;Enciende el LED 4 ponindolo primero
movwf PORTC ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 04h ;Enciende el LED 3 ponindolo primero
movwf PORTC ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 02h ;Enciende el LED 2 ponindolo primero
movwf PORTC ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 01h ;Enciende el LED 1 ponindolo primero
movwf PORTC ;en el registro w y despus
;en el puerto
CALL Loop ;Llamar retardo
movlw 0h ;Apaga todos los LEDs primero ponindolo
movwf PORTC ;en el registro w y despus
;en el puerto

;****Game End****
goto Start ;Regresar a inicio

;****Inicio del retardo****
Loop1
decfsz COUNT1,1 ;substrae 1 de 255
goto Loop1 ;si COUNT es cero, continuar.
decfsz COUNT2,1 ; substrae 1 de 255
goto Loop ; si COUNT es cero, continuar.
return;****Fin de retardo****

;****Fin del programa****
end ;Necesario para algunos compiladores,
;y tambin en caso de que olvidemos la instruccin ir a inicio