Upload
jeyson
View
225
Download
12
Embed Size (px)
DESCRIPTION
En un display de 7segmentos anodo comun se muestra la cantidad de veces que es oprimido un pulsador. El conteo va de 0 a 9. Luego reinicia en 0. Se hace uso de un 7447 para conectar el microcontrolador Pic 16f84a con el display de 7 seg anodo comun - El programa se encuentra en lenguaje ensamblador.07 de frebrero del 2016 -- 20:51 hrs
Citation preview
D:\Display7anodocomun-7447-PIC.asm
;*******************************************************************;* Nombre : Display7seg-7447-Pulsador.ASM *;* Autor : JeysonMG *;* Notas : - En un display de 7segmentos se muestra la cantidad *;* de veces que es oprimido un pulsador. *;* - Contador de 0 a 9. Reinicia en 0 *;* - Se hace uso de un 7447 para conectar el PIC *;* con el display (ánodo común) *;* *;* - Configuracion Pull-Up *;* *;* O +5v *;* | *;* < *;* R = 1Kohm > *;* < *;* | *;* |----------------o RA4 *;* | *;* | o *;* Pulsador |-| *;* | o *;* | *;* _____ OBS: *;* ___ Bajo esta configuración, cuando es *;* _ pulsado, envia un 0 lógico al PIC *;* *;*******************************************************************
; PIC ---- 7447 -------- > Display; --------------------; RB0 | A; RB1 | B; RB2 | C; RB3 | D
; Pulsador ---> RA4
__config _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC list p=16f84a #include <p16f84a.inc> cblock 0x0C ; A partir de esta direccion Variable_usada_para_retardo0 ; es la memoria RAM del usuario Variable_usada_para_retardo1 endc #define Pulsador PORTA,4 ; Pulsador en RA4 ORG 0x00Inicio bsf STATUS,RP0 ; Se accede a banco de memoria 1
bsf TRISA,.4 ; Configuramos RA4 como entrada clrf TRISB ; RB<7:0> config como salidasbcf STATUS,RP0 ; Se accede a banco de memoria 0clrf PORTB ; PORTB inicia en 0
1
D:\Display7anodocomun-7447-PIC.asm
Principal btfsc Pulsador ; ¿Pulsador=0? goto Principal ; Falso. Entonces, vuelvo a preguntar ; Si pulsador=0, hago un retardo de 100ms y vuelvo a preguntar ; con el fin de eliminar los "rebotes" call Retardo_100ms btfsc Pulsador ; ¿Pulsador=0? goto Principal
; Ahora bien, eliminado el rebote, preguntamos si el valor actual ; de PORTB es igual a 9. Si fuese así, reinicio PORTB en 0.; Caso contrario, incremento el contenido de PORTB
movlw .9 ; Cargamos en W el valor de 9subwf PORTB,W ; W = PORTB-W
; Si el resultado de la resta es 0, el bit Z del registro STATUS; se hace igual a 1, asi que preguntamos cual es su estado luego; de la operacion anterior.
btfss STATUS,Z ; ¿Z = 1?goto Incrementar ; Falso. Voy a etiq. "Incrementar"clrf PORTB ; Si Z=1. Reinicio PORTB en 0goto Preguntar ; Y voy directo a "Preguntar"
Incrementar incf PORTB,F ; PORTB=PORTB+1 ; Preguntamos si ya hemos soltado el pulsador. Si no hacemos esto ; PORTB incrementará varias veces, cuando a tu parecer, solo has ; oprimido el pulsador una sola vez....Preguntar btfss Pulsador ; ¿Pulsador=1? goto Preguntar ; Falso. Significa que no he soltado ; el pulsadorentonces vuelvo a preguntar.
; Si pulsador=1 significa que ya solte el pulsador, ; y regreso a Principal
goto Principal; Subrutina de Retardo_100ms:
Retardo_100ms: movlw .110
movwf Variable_usada_para_retardo0 movlw .181
movwf Variable_usada_para_retardo1 goto $+1
decfsz Variable_usada_para_retardo1, 1 goto $-2 decfsz Variable_usada_para_retardo0, 1 goto $-6
goto $+1 goto $+1 goto $+1 return
END ; Directiva para indicar que termina el programa ; Lo que esté despues no forma parte del programa
2