Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
PRÁCTICA 17 Elabora un programa en lenguaje ensamblador que permita el control del encendido y apagado de un LED con 2 botones. ; Configuración del microcontrolador __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC ; Definiciones de registros y constantes cblock 0x20 button1 ; Variable para almacenar el estado del botón 1 button2 ; Variable para almacenar el estado del botón 2 led ; Variable para almacenar el estado del LED endc org 0x0000 ; Dirección de inicio del programa ; Rutina de interrupción para manejar el botón 1 org 0x0004 btfss INTCON, INTF ; Verificar si la interrupción fue causada por el botón 1 goto $+2 ; Saltar si no fue causada por el botón 1 bsf button1, 0 ; Establecer el estado del botón 1 en "presionado" bcf INTCON, INTF ; Limpiar la bandera de interrupción ; Rutina de interrupción para manejar el botón 2 org 0x0008 btfss INTCON, RBIF ; Verificar si la interrupción fue causada por el botón 2 goto $+2 ; Saltar si no fue causada por el botón 2 bsf button2, 0 ; Establecer el estado del botón 2 en "presionado" bcf INTCON, RBIF ; Limpiar la bandera de interrupción ; Inicio del programa principal org 0x0000 goto Main ; Subrutina para encender el LED ToggleLED: bsf PORTB, 0 ; Establecer el pin RB0 en alto para encender el LED return ; Subrutina para apagar el LED TurnOffLED: bcf PORTB, 0 ; Establecer el pin RB0 en bajo para apagar el LED return ; Programa principal Main: banksel TRISB ; Seleccionar el banco de registros para TRISB movlw 0x01 ; Configurar RB0 como salida (LED) movwf TRISB ; Configurar el registro TRISB banksel INTCON ; Seleccionar el banco de registros para INTCON bcf INTCON, INTE ; Deshabilitar la interrupción externa bsf INTCON, RBIE ; Habilitar la interrupción por cambio de estado en PORTB bsf INTCON, GIE ; Habilitar las interrupciones globales banksel button1 ; Seleccionar el banco de registros para button1 clrf button1 ; Limpiar el estado del botón 1 banksel button2 ; Seleccionar el banco de registros para button2 clrf button2 ; Limpiar el estado del botón 2 Loop: banksel button1 ; Seleccionar el banco de registros para button1 btfss button1, 0 ; Verificar si el botón
Compartir