📄 ejem_19.asm
字号:
;
; EJEMPLO 19
; Autor: Mikel Etxebarria
; (c) Ingenier韆 de Microsistemas Programados S.L.
; www.microcontroladores.com
; Bilbao 2006
;
;Introducci髇 al manejo del teclado.
;
;Haciendo uso de las rutinas incluidas en el fichero TECLADO.INC, se trata de leer el tecla-
;do y, visualizar sobre los leds de la puerta B el c骴igo BCD de la tecla pulsada. La
;visualizaci髇 se mantiene estable durante dos segundos hasta una nueva pulsaci髇.
;
;Se trata de un ejemplo en el que la Puerta B se reconfigura din醡icamente. Inicialmente es
;configurada como salida para presentaci髇 del resultado. Posteriormente, la rutina de
;exploraci髇 del teclado reconfigura RB0-RB3 como salidas y RB4-RB7 como entradas
List p=16F876A ;Tipo de procesador
include "P16F876A.INC" ;Definiciones de registros internos
;Ajusta los valores de la palabra de configuraci髇 durante el ensamblaje:
;protecci髇 de c骴igo y datos=OFF, LVP=OFF, WDT=OFF y OSC=XT
__config _CP_OFF&_CPD_OFF&_LVP_OFF&_WDT_OFF&_XT_OSC
Key_var equ 0x20 ;Inicio de las 6 variables empleadas por las rutinas de manejo del teclado
Delay_Cont equ 0x26 ;Variable para la temporizaci髇
org 0x00 ;Vector de RESET
goto Inicio
org 0x05
include "TECLADO.INC" ;Incluye rutinas de manejo del teclado
;*********************************************************************************
;Delay_var: Esta rutina de prop髎ito general realiza una temporizaci髇 variable
;entre 10 mS y 2.5". Se emplea un preescaler de 256 y al TMR0 se le carga con 39.
;La velocidad de trabajo es de 4Mhz y por tanto el TMR0 se incrementa cada 1uS. De
;esta forma, el TMR0 debe contar 39 eventos que, con un preescaler de 256 hace una
;intervalo total de 10000 uS (39 * 256 * 1). Este intervalo de 10 mS se repite tantes veces como
;indique la variable "Delay_cont", es por ello que el delay m韓imo es de 10 mS ("Delay_cont=1)
;y el m醲imo de 2.5" (Delay_cont=255).
Delay_var: bcf INTCON,T0IF ;Desconecta el flag de rebosamiento
movlw ~.39
movwf TMR0 ;carga el TMR0 con 39
Intervalo btfss INTCON,T0IF ;Rebasamiento del TMR0 ??
goto Intervalo ;Todav韆 no
decfsz Delay_Cont,F;Decrementa contador de intervalos
goto Delay_var ;Repite el intervalo de 10 mS
return
Inicio clrf PORTB ;Borra los latch de salida
bsf STATUS,RP0 ;Selecciona banco 1
clrf TRISB ;Puerta B se configura como salida
movlw b'00000111'
movwf OPTION_REG ;Preescaler de 256 para el TMR0
bcf STATUS,RP0 ;Selecciona banco 0
Loop call Key_Scan ;Explora el teclado
movlw 0x80
subwf Tecla,W
btfsc STATUS,Z ;Hay alguna pulsada ??
goto Loop ;No
movf Tecla,W ;Lee el c骴igo de la tecla pulsada
movwf PORTB ;Lo visualiza sobre los leds de la Puerta B
movlw .200
movwf Delay_Cont
call Delay_var ;Temporiza 2 segundos
clrf PORTB ;Desactiva visualizaci髇
goto Loop
end ;Fin del programa fuente
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -