2
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 0x00 Inicio bsf STATUS , RP0 ; Se accede a banco de memoria 1 bsf TRISA , .4 ; Configuramos RA4 como entrada clrf TRISB ; RB<7:0> config como salidas bcf STATUS , RP0 ; Se accede a banco de memoria 0 clrf PORTB ; PORTB inicia en 0 1

(ASM-pic16f84a) Display 7 segmentos anodo comun + 7447 + pic16f84a

  • 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

Page 1: (ASM-pic16f84a) Display 7 segmentos anodo comun + 7447 + pic16f84a

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

Page 2: (ASM-pic16f84a) Display 7 segmentos anodo comun + 7447 + pic16f84a

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