Está en la página 1de 2

; **** Encabezado **** list p=16F84A #include P16F84A.

inc __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC ;**** Definicion de variables **** Unidad equ 0x0C ; Guardamos conteo unidad Decena equ 0x0D ; Centena equ 0x0E ; Contador1 equ 0x0F ; Registro utilizado en demora.Contador2 equ 0x10 ; Registro utilizado en demora.Contador equ 0x11 ; Control de Refresco de Display.MuestroU equ 2 ; Para control del 1 Display MuestroD equ 1 ; Para control del 2 Display MuestroC equ 0 ; Para control del 3 Display ;**** Inicio del Micro **** Reset org 0x00 ; Aqu comienza el micro.goto Inicio ; Salto a inicio de mi programa.;**** Tabla de conversion BCD a 7 Segmentos **** ; Se coloca al inicio para asegurar ubicacion en Pagina.org 0x05 ; Origen del cdigo de tabla.BCD7SEG ; retlw b'gfedcba' para display catodo comun addwf PCL,1 ; Se incrementa el contador del programa.DT 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0xFF, 0x6F ;**** Programa principal **** ;**** Configuracion de puertos **** Inicio bsf STATUS,RP0 ; Pasamos de Banco 0 a Banco 1.clrf TRISA ; PORTA como salida clrf TRISB ; PORTB como salida.bcf STATUS,RP0 ; Paso del Banco 1 al Banco 0 clrf PORTA ; Desactivo todos los Displays clrf Unidad ; Comienza en cero --> 0 0 0.clrf Decena clrf Centena goto Actualizo_Display ; Esta rutina multiplexa los displays.;**** Testeo de Pulsador **** Bucle incf Unidad,1 ; Incremeto Unidad. movlw d'10' ; Si es 10 reseteo e incremento Decena subwf Unidad,0 ; btfss STATUS,Z ; goto Actualizo_Display ; no es 10 clrf Unidad ; Si, reseteo.incf Decena,1 ; Incremento Decena.movlw d'10' ; Si Decena = 10, reseteo e incremento Centena subwf Decena,0 ; btfss STATUS,Z ; goto Actualizo_Display ; No es 10.-

clrf Decena ; Si, reseteo.incf Centena,1 ; Incremento Centena.movlw d'10' ; Si es 10 Reseteo.subwf Centena,0 btfss STATUS,Z goto Actualizo_Display ; No es 10.clrf Centena ; Si, reseto ;**** Se multiplexan los Display **** Actualizo_Display movlw d'20' ; Cargo Contador = 20 movwf Contador ; Para repeticiones de visualizacion del mismo valor ; durante 150 ms.Refresco movfw Unidad ; Obtengo cdigo de 7 Segmentos para Unidad.call BCD7SEG ; bcf PORTA,MuestroC ; Apago Display de Centena, Se entiende al mirar rutina.movwf PORTB ; Cargo unidad en PORTB.bsf PORTA,MuestroU ; Enciendo Display de Unidad.call Demora_5ms movfw Decena ; Obtengo cdigo 7 Segmentos para Decena.call BCD7SEG bcf PORTA,MuestroU ; Apago Display de Unidad.movwf PORTB ; Cargo PORTB con Decena.bsf PORTA,MuestroD ; Enciendo Display de Decena.call Demora_5ms movfw Centena ; Obtengo codigo de 7 Segmentos para Centena.call BCD7SEG bcf PORTA,MuestroD ; Apago Display de Decena.movwf PORTB ; Cargo PORTB con Centena.bsf PORTA,MuestroC ; Enciendo Display Centena.call Demora_5ms decfsz Contador,1 ; Pregunto si ya se ha repetido 10 veces el ciclo? goto Refresco ; No, repito.goto Bucle ; Si, actualizo cuenta.;**** Demora **** Demora_5ms movlw 0xFF ; movwf Contador1 ; Iniciamos contador1.Repeticion1 movlw 0x05 ; movwf Contador2 ; Iniciamos contador2 Repeticion2 decfsz Contador2,1 ; Decrementa Contador2 y si es 0 sale.goto Repeticion2 ; Si no es 0 repetimos ciclo.decfsz Contador1,1 ; Decrementa Contador1.goto Repeticion1 ; Si no es cero repetimos ciclo.return ; Regresa de la subrutina.end