0% encontró este documento útil (0 votos)
2 vistas5 páginas

Program As

El documento describe un programa que utiliza dos botones para realizar un conteo ascendente y descendente, reflejando el resultado en 4 LEDs que representan números binarios. También incluye un segundo programa que controla el encendido y la dirección de un motor DC basado en la entrada de botones. Ambos programas están escritos en ensamblador para el microcontrolador PIC16F628A.

Cargado por

Rafael Medellín
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
2 vistas5 páginas

Program As

El documento describe un programa que utiliza dos botones para realizar un conteo ascendente y descendente, reflejando el resultado en 4 LEDs que representan números binarios. También incluye un segundo programa que controla el encendido y la dirección de un motor DC basado en la entrada de botones. Ambos programas están escritos en ensamblador para el microcontrolador PIC16F628A.

Cargado por

Rafael Medellín
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

;Programa que mediante el uso de dos push button realiza un conteo ascendente y

descendete respectivamente,

;esto se ve reflejado en 4 leds a la salida representando numeros binarios.

;Rafael Medellín García 2001626

list p=16f628a

include "[Link]"

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC & _LVP_OFF

org 0 ; Dirección de inicio

goto Inicio ; Saltar a la configuración inicial

; ============================

; Configuración de Puertos

Inicio:

bsf STATUS, RP0 ; Cambiar a Banco 1

movlw b'00110000' ; RB4 y RB5 como entradas (1), RB0-RB3 como salidas (0)

movwf PORTB ; Configurar PORTB

bcf STATUS, RP0 ; Regresar a Banco 0 (Acceder a PORTB)

clrf PORTB ; Limpiar Puerto B

clrf Contador ; Inicializar contador en 0

; ============================

; Bucle principal

Bucle:

btfsc PORTB, 4 ; Verifica si RB4 está presionado (Cuenta Ascendente)

call Incrementar ; Llama a la rutina de incremento

btfsc PORTB, 5 ; Verifica si RB5 está presionado (Cuenta Descendente)


call Decrementar ; Llama a la rutina de decremento

movf Contador, W ; Mueve el valor del contador a W

movwf PORTB ; Actualiza las salidas RB0-RB3 con el valor del contador

goto Bucle ; Repite el bucle

; ============================

; Rutina para Incrementar

Incrementar:

movlw 0x0F ; Valor máximo 15 (0b00001111)

subwf Contador, W ; Comparar W - Contador

btfsc STATUS, Z ; Si Contador = 15, no incrementar

return

incf Contador, F ; Incrementar el contador

call Retardo ; Espera para evitar rebotes

return

; ============================

; Rutina para Decrementar

Decrementar:

movf Contador, F ; Comprobar si Contador es 0

btfsc STATUS, Z ; Si es 0, regresa sin decrementar

return

decf Contador, F ; Decrementar el contador

call Retardo ; Espera para evitar rebotes

return

; ============================

; Rutina de Retardo (Anti-rebote)


Retardo:

movlw 0xFF ; Valor alto para el retardo

movwf Tiempo1

Retardo1:

movlw 0xFF

movwf Tiempo2

Retardo2:

decfsz Tiempo2, F

goto Retardo2

decfsz Tiempo1, F

goto Retardo1

return

; ============================

; Variables

Contador equ 0x20 ; Dirección en RAM para el contador

Tiempo1 equ 0x21 ; Variable para retardo

Tiempo2 equ 0x22 ; Variable para retardo

end
;Programa mediante el cual se controla el encendido y la dirección de un motor DC

;Rafael Medellín García

list p=16f628a

include "[Link]"

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC & _LVP_OFF

#DEFINE INM PORTB,5 ; Define INM como alias del pin RB5

#DEFINE INS PORTB,4 ; Define INS como alias del pin RB4

org 0 ; Dirección de inicio

; ============================

; Configuración de Puertos

bsf STATUS, RP0 ; Cambiar a Banco 1

bsf INM ; Configura RB5 como entrada (pone a 1 PORTB,5)

bsf INS ; Configura RB4 como entrada (pone a 1 PORTB,4)

clrf PORTA ; Limpia el puerto A (pone todos los pines en 0)

bcf STATUS, RP0 ; Regresa al Banco 0

; ============================

; Bucle principal

Bucle:

clrw ; Limpia el registro W (W = 0)

btfsc INM ; Si RB5 está en 1 (presionado), salta la siguiente instrucción

goto ActS ; Si RB5 está presionado, salta a ActS (PORTA = 0)

movlw b'00011000' ; Si RB5 no está presionado, carga en W con 00011000


btfsc INS ; Si RB4 está en 1 (presionado), salta la siguiente instrucción

movlw b'00010100' ; Si RB4 está presionado, carga W con 00010100

ActS:

movwf PORTA ; Mueve el contenido de W al puerto A (enciende los pines según W)

goto Bucle ; Vuelve al inicio del bucle para seguir verificando entradas

end

También podría gustarte