Instituto Tecnológico de Nogales
03/23/14
Lenguajes de Interfaz
Práctica 1 y 2; encender LED, juego de LED’s
Daniel Ramos Meléndez
11340405
Práctica 1; Encender un LED (sin incluir bibliotecas de PIC .inc) Para esta primer práctica 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 caracte rísticas que utilizaremos serán las siguientes en el código que programaremos al PI C.
LIST p=16F877A ;le dice al ensamblador que micro está en uso __config 3D38h ;asignación de bits de configuración ;hexadecimal 3D38 a binario = 11110100111000 ;palabra de configuración (dirección 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; Protección de código desactivada
;DEBUG
--> 1; Depurador en circuito desactivado.
;WRT1, WRT0 --> 10; 0000h a 00FFh protegido contra escritura. ;CPD
--> 1; Data EEPROM protección de código 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.
;*****Configuración de Constantes**** STATUS equ 03h ;Dirección del re gistro STATUS TRISB equ 86h ;Dirección del registro tristate para el puerto B PORTB equ 06h ;Dirección 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 m antiene el goto Loop2 ;LED apagado lo suficiente para que nosotros lo veamos
;****Ahora vuelve al inicio del P rograma goto Start ;regresa al inicio y enciende el LED ;de nuevo
;****Fin del programa**** end ;Necesario para algunos compiladores, ;y también en caso de que olvidemos la instrucción ir a inicio
Anexo el Circuito
Práctica 2; Juego de Luces LED (sin incluir bibliotecas de PIC .inc) Para esta segunda práctica lo que realizaremos será encender y apagar una serie de LED’s 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 características que utilizaremos serán las siguientes en el código que programaremos al PIC.
LIST p=16F877A ;le dice al ensamblador que mic ro está en uso __config 3D38h ;asignación de bits de configuración ;hexadecimal 3D38 a binario = 11110100111000 ;palabra de configuración (dirección 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; Protección de código desactivada
;DEBUG
--> 1; Depurador en circuito desactivado.
;WRT1, WRT0 --> 10; 0000h a 00FFh protegido contra escritura. ;CPD
--> 1; Data EEPROM protección de código 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.
;*****Configuración de Constantes**** STATUS equ 03h ;Dirección del re gistro STATUS TRISB equ 86h ;Dirección del registro tristate para el puerto B PORTB equ 06h ;Dirección del puerto B TRISC equ 87h ;Dirección del registro tristate para el puerto C PORTC equ 07h ;Dirección del puerto C TRISD equ 88h ;Dirección del registro tristate para el puerto D PORTD equ 08h ;Dirección 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 LED’s primero poniéndolo primero en el registro w movwf PORTC ;y después 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 poniéndolo primero movwf PORTD ;en el registro w y después ;en el puerto CALL Loop ;Llamar retardo movlw 02h ;Enciende el LED 2 poniéndolo primero movwf PORTD ;en el registro w y después ;en el puerto CALL Loop ;Llamar retardo movlw 04h ;Enciende el LED 3 poniéndolo primero movwf PORTD ;en el registro w y después ;en el puerto CALL Loop ;Llamar retardo movlw 08h ;Enciende el LED 4 poniéndolo primero movwf PORTD ;en el registro w y después ;en el puerto CALL Loop ;Llamar retardo movlw 10h ;Enciende el LED 5 poniéndolo primero movwf PORTD ;en el registro w y después ;en el puerto CALL Loop ;Llamar retardo movlw 20h ;Enciende el LED 6 poniéndolo primero movwf PORTD ;en el registro w y después ;en el puerto
CALL Loop ;Llamar retardo movlw 40h ;Enciende el LED 7 poniéndolo primero movwf PORTD ;en el registro w y después ;en el puerto CALL Loop ;Llamar retardo movlw 80h ;Enciende el LED 8 poniéndolo primero movwf PORTD ;en el registro w y después ;en el puerto CALL Loop ;Llamar retardo movlw 0h ; Apaga todos los LED’s primero poniéndolo movwf PORTD ;en el registro w y después ;en el puerto
;****Port C LED's**** movlw 01h ;Enciende el LED 1 poniéndolo primero movwf PORTC ;en el registro w y después ;en el puerto CALL Loop ;Llamar retardo movlw 02h ;Enciende el LED 2 poniéndolo primero movwf PORTC ;en el registro w y después ;en el puerto CALL Loop ;Llamar retardo movlw 04h ;Enciende el LED 3 poniéndolo primero movwf PORTC ;en el registro w y después ;en el puerto
CALL Loop ;Llamar retardo movlw 08h ;Enciende el LED 4 poniéndolo primero movwf PORTC ;en el registro w y después ;en el puerto CALL Loop ;Llamar retardo movlw 10h ;Enciende el LED 5 poniéndolo primero movwf PORTC ;en el registro w y después ;en el puerto CALL Loop ;Llamar retardo movlw 20h ;Enciende el LED 6 poniéndolo primero movwf PORTC ;en el registro w y después ;en el puerto CALL Loop ;Llamar retardo movlw 40h ;Enciende el LED 7 poniéndolo primero movwf PORTC ;en el registro w y después ;en el puerto CALL Loop ;Llamar retardo movlw 80h ;Enciende el LED 8 poniéndolo primero movwf PORTC ;en el registro w y después ;en el puerto CALL Loop ;Llamar retardo movlw 0h ;Apaga todos los LED’s primero poniéndolo movwf PORTC ;en el registro w y después ;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 poniéndolo primero movwf PORTD ;en el registro w y después ;en el puerto CALL Loop ;Llamar retardo movlw 40h ;Enciende el LED 7 poniéndolo primero movwf PORTD ;en el registro w y después ;en el puerto CALL Loop ;Llamar retardo movlw 20h ;Enciende el LED 6 poniéndolo primero movwf PORTD ;en el registro w y después ;en el puerto CALL Loop ;Llamar retardo movlw 10h ;Enciende el LED 5 poniéndolo primero movwf PORTD ;en el registro w y después ;en el puerto CALL Loop ;Llamar retardo movlw 08h ;Enciende el LED 4 poniéndolo primero movwf PORTD ;en el registro w y después ;en el puerto
CALL Loop ;Llamar retardo movlw 04h ;Enciende el LED 3 poniéndolo primero movwf PORTD ;en el registro w y después ;en el puerto CALL Loop ;Llamar retardo movlw 02h ;Enciende el LED 2 poniéndolo primero movwf PORTD ;en el registro w y después ;en el puerto CALL Loop ;Llamar retardo movlw 01h ;Enciende el LED 1 poniéndolo primero movwf PORTD ;en el registro w y después ;en el puerto CALL Loop ;Llamar retardo movlw 0h ; Apaga todos los LED’s primero poniéndolo movwf PORTD ;en el registro w y después ;en el puerto
;****Port C LED's**** movlw 80h ;Enciende el LED 8 poniéndolo primero movwf PORTC ;en el registro w y después ;en el puerto CALL Loop ;Llamar retardo movlw 40h ;Enciende el LED 7 poniéndolo primero movwf PORTC ;en el registro w y después ;en el puerto
CALL Loop ;Llamar retardo movlw 20h ;Enciende el LED 6 poniéndolo primero movwf PORTC ;en el registro w y después ;en el puerto CALL Loop ;Llamar retardo movlw 10h ;Enciende el LED 5 poniéndolo primero movwf PORTC ;en el registro w y después ;en el puerto CALL Loop ;Llamar retardo movlw 08h ;Enciende el LED 4 poniéndolo primero movwf PORTC ;en el registro w y después ;en el puerto CALL Loop ;Llamar retardo movlw 04h ;Enciende el LED 3 poniéndolo primero movwf PORTC ;en el registro w y después ;en el puerto CALL Loop ;Llamar retardo movlw 02h ;Enciende el LED 2 poniéndolo primero movwf PORTC ;en el registro w y después ;en el puerto CALL Loop ;Llamar retardo movlw 01h ;Enciende el LED 1 poniéndolo primero movwf PORTC ;en el registro w y después ;en el puerto CALL Loop ;Llamar retardo
movlw 0h ; Apaga todos los LED’s primero poniéndolo movwf PORTC ;en el registro w y después ;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 también en caso de que olvidemos la instrucción ir a inicio