Programación en Ensamblador de Juego de Luces

Embed Size (px)

DESCRIPTION

Uso de Plataforma MPLAB X para codificación de un programa en lenguaje ensamblador para manipular un LED y un juego de LED's de forma que enciendan y se apaguen. Con uso de microcontrolador Microchip PIC16F877A.

Citation preview

Instituto Tecnolgico de Nogales03/23/14Lenguajes de InterfazPrctica 1 y 2; encender LED, juego de LEDsDaniel Ramos Melndez11340405Prctica 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 STATUSTRISB equ 86h ;Direccin del registro tristate para el puerto BPORTB equ 06h ;Direccin de Port BCOUNT1 equ 20h ;Primer contador para nuestros retardosCOUNT2 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 1movlw 0h ;Inicia pines puerto Bmovwf TRISB ;como salidas.bcf STATUS,5 ;Cambia banco a banco 0

;****Enciende LED 0****Startmovlw 1h ;Enciende el LED poniendo 1 primero en el registro wmovwf PORTB ;y luego al puerto

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

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

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

;****Ahora vuelve al inicio del Programagoto 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 STATUSTRISB equ 86h ;Direccin del registro tristate para el puerto BPORTB equ 06h ;Direccin del puerto BTRISC equ 87h ;Direccin del registro tristate para el puerto CPORTC equ 07h ;Direccin del puerto CTRISD equ 88h ;Direccin del registro tristate para el puerto DPORTD equ 08h ;Direccin del puerto DCOUNT1 equ 20h ;Primer contador para nuestros retardosCOUNT2 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 1movlw 0h ;Asigna puertos D y Cmovwf TRISD ;a salida.movwf TRISC movlw 1h ;Asigna el pin 0 del puerto Bmovwf 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 wmovwf PORTC ;y despus en el puertomovwf PORTD

;****Lee el pin 0 del puerto B****InicioBTFSS PORTB, 0 ;si el pin 0 del puerto B es 1 vamos al Game1GOTO GAME2 ;si no vamos al Game2GOTO GAME1

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

;****Port C LED's****movlw 01h ;Enciende el LED 1 ponindolo primeromovwf PORTC ;en el registro w y despus;en el puertoCALL Loop ;Llamar retardomovlw 02h ;Enciende el LED 2 ponindolo primeromovwf PORTC ;en el registro w y despus;en el puertoCALL Loop ;Llamar retardomovlw 04h ;Enciende el LED 3 ponindolo primeromovwf PORTC ;en el registro w y despus;en el puertoCALL Loop ;Llamar retardomovlw 08h ;Enciende el LED 4 ponindolo primeromovwf PORTC ;en el registro w y despus;en el puertoCALL Loop ;Llamar retardomovlw 10h ;Enciende el LED 5 ponindolo primeromovwf PORTC ;en el registro w y despus;en el puertoCALL Loop ;Llamar retardomovlw 20h ;Enciende el LED 6 ponindolo primeromovwf PORTC ;en el registro w y despus;en el puertoCALL Loop ;Llamar retardomovlw 40h ;Enciende el LED 7 ponindolo primeromovwf PORTC ;en el registro w y despus;en el puertoCALL Loop ;Llamar retardomovlw 80h ;Enciende el LED 8 ponindolo primeromovwf PORTC ;en el registro w y despus;en el puertoCALL Loop ;Llamar retardomovlw 0h ;Apaga todos los LEDs primero ponindolomovwf 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 primeromovwf PORTD ;en el registro w y despus;en el puertoCALL Loop ;Llamar retardomovlw 40h ;Enciende el LED 7 ponindolo primeromovwf PORTD ;en el registro w y despus;en el puertoCALL Loop ;Llamar retardomovlw 20h ;Enciende el LED 6 ponindolo primeromovwf PORTD ;en el registro w y despus;en el puertoCALL Loop ;Llamar retardomovlw 10h ;Enciende el LED 5 ponindolo primeromovwf PORTD ;en el registro w y despus;en el puertoCALL Loop ;Llamar retardomovlw 08h ;Enciende el LED 4 ponindolo primeromovwf PORTD ;en el registro w y despus;en el puertoCALL Loop ;Llamar retardomovlw 04h ;Enciende el LED 3 ponindolo primeromovwf PORTD ;en el registro w y despus;en el puertoCALL Loop ;Llamar retardomovlw 02h ;Enciende el LED 2 ponindolo primeromovwf PORTD ;en el registro w y despus;en el puertoCALL Loop ;Llamar retardomovlw 01h ;Enciende el LED 1 ponindolo primeromovwf PORTD ;en el registro w y despus;en el puertoCALL Loop ;Llamar retardomovlw 0h ;Apaga todos los LEDs primero ponindolomovwf PORTD ;en el registro w y despus;en el puerto

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

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

;****Inicio del retardo****Loop1decfsz COUNT1,1 ;substrae 1 de 255goto Loop1 ;si COUNT es cero, continuar.decfsz COUNT2,1 ; substrae 1 de 255goto 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