Logo Studenta

PRÁCTICA 17

¡Estudia con miles de materiales!

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

Continuar navegando