Consiste en un contador desde 000 hasta 999 y después de terminar el conteo, comienza automáticamente desde 000.
;**********************************************************************
; Contador binario
;**********************************************************************
; Requiere archivos: P16F690.INC
; RETARDOS.INC
;**********************************************************************
;**********************************************************************
list p=16f690 ;Especifica microcontrolador
#include <P16F690.inc>
;Fusibles de configuración
__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
;ZONA DE DECLARACIÓN DE VARIABLES
;********************************
cblock 0x20
Cuenta ;Registro para llevar el conteo
Unidad ;Variable que lleva el conteo de unidades
Decena ;Variable que lleva el conteo de Decenas
Centena ;Variable que lleva el conteo de Centenas
Digito
endc
;Define nombres descriptivos para constantes y puertos
#define DISPLAY PORTC
;INICIALIZACION
;********************************
ORG 0x00 ;vector de reset
;Registros de configuración
bsf STATUS,RP0 ;Selecciona página #1
clrf TRISC ;PORTC será salida
clrf TRISA ;PORTA será salida
bcf STATUS,RP0 ;Regresa a página #0
;Inicialización de variables
clrf Cuenta ;Cuenta comienza en cero
clrf Unidad ;comienza en cero
clrf Decena ;comienza en cero
clrf Centena ;comienza en cero
;INSTRUCCIONES
;------------------------------------------------
Inicio
incf Cuenta,f ;Incrementa el contador
;(Para el resto de instrucciones no estamos
;usando este registro aún)
ComparaUnidad
movf Unidad,w ;Carga el registro Unidad en W
sublw .9 ;Compara con 9 (9 - Unidad)
btfsc STATUS,Z ;¿Unidad = 9?
goto IncrementaDecena ;Sí, incrementa decena
goto IncrementaUnidad ;No, incrementa unidad
IncrementaUnidad
incf Unidad ;Incrementa Unidad
goto ComparaCentena ;Salta a ComparaCentena
IncrementaDecena
incf Decena ;Incrementa Decena
clrf Unidad ;Vuelve unidad a Cero
goto ComparaCentena ;Salta a ComparaCentena
ComparaCentena
movf Decena,w ;Carga el registro Unidad en W
sublw .10 ;Compara con 9 (9 - Decena)
btfsc STATUS,Z ;¿Decena = 9?
goto IncrementaCentena ;Sí, incrementa decena
goto MuestraValores ;No, hace un salto a la etiqueta "MuestraValores"
IncrementaCentena
incf Centena ;Incrementa Centena
;con esta parte del progrma vuelvo a 0 la variable centena cuando llega a 9
;para iniciar nuevamente el ciclo de conteo
movf Centena,w ;Carga el registro Centena en W
sublw .1,5 ;Compara con 10 (10 - Centena)
btfsc STATUS,Z ;¿Centena = 10?
clrf Centena ;Sí, Deja en 0 la variable Centena
clrf Decena ;No, Deja en 0 la variable Decena
MuestraValores
call EnviaUnidad ;Activa el display de unidades
movf Unidad,W ;Carga en W el valor guardado en Unidad
call MuestraDigito ;lo envía al display
call Retardo_10ms
call EnviaDecena ;Activa el display de decenas
movf Decena,W ;Carga en W el valor guardado en Decena
call MuestraDigito ;lo envía al display
call Retardo_10ms
call EnviaCentena ;Activa el display de Centenas
movf Centena,W ;Carga en W el valor guardado en Centena
call MuestraDigito ;lo envía al display
call Retardo_10ms
goto Inicio
;SUBRUTINAS
;------------------------------------------------
;MuestraDigito selecciona el dígito a mostrar en display.
;Subrutinas Envia0 - Envia9 dibujan el dígito correspondiente
;en un display de 7 segmentos. EnviaE dibuja el caracter "E".
;La subrutina activa los segmentos de un display de cátodo común
;según la siguiente configuración:
;DISPLAY CATODO COMUN: g f e d c b a
;PUERTO "DISPLAY" (PORTC): RC6 RC5 RC4 RC3 RC2 RC1 RC0
MuestraDigito
movwf Digito ;Carga el valor de W en Dígito
movlw .0 ;Compara con 0
xorwf Digito,W
btfsc STATUS,Z ;Cuenta = 0?
goto Envia0 ;Sí: Envia Dígito
movlw .1 ;No: Compara con 1
xorwf Digito,W
btfsc STATUS,Z ;Cuenta = 1?
goto Envia1 ;Sí: Envia Dígito
movlw .2 ;No: Compara con 2
xorwf Digito,W
btfsc STATUS,Z ;Cuenta = 2?
goto Envia2 ;Sí: Envia Dígito
movlw .3 ;No: Compara con 3
xorwf Digito,W
btfsc STATUS,Z ;Cuenta = 3?
goto Envia3 ;Sí: Envia Dígito
movlw .4 ;No: Compara con 4
xorwf Digito,W
btfsc STATUS,Z ;Cuenta = 4?
goto Envia4 ;Sí: Envia Dígito
movlw .5 ;No: Compara con 5
xorwf Digito,W
btfsc STATUS,Z ;Cuenta = 5?
goto Envia5 ;Sí: Envia Dígito
movlw .6 ;No: Compara con 6
xorwf Digito,W
btfsc STATUS,Z ;Cuenta = 6?
goto Envia6 ;Sí: Envia Dígito
movlw .7 ;No: Compara con 7
xorwf Digito,W
btfsc STATUS,Z ;Cuenta = 7?
goto Envia7 ;Sí: Envia Dígito
movlw .8 ;No: Compara con 8
xorwf Digito,W
btfsc STATUS,Z ;Cuenta = 8?
goto Envia8 ;Sí: Envia Dígito
movlw .9 ;No: Compara con 9
xorwf Digito,W
btfsc STATUS,Z ;Cuenta = 9?
goto Envia9 ;Sí: Envia Dígito
Envia0
movlw b'00111111'
movwf DISPLAY
return
Envia1
movlw b'00000110'
movwf DISPLAY
return
Envia2
movlw b'01011011'
movwf DISPLAY
return
Envia3
movlw b'01001111'
movwf DISPLAY
return
Envia4
movlw b'01100110'
movwf DISPLAY
return
Envia5
movlw b'01101101'
movwf DISPLAY
return
Envia6
movlw b'01111100'
movwf DISPLAY
return
Envia7
movlw b'00000111'
movwf DISPLAY
return
Envia8
movlw b'01111111'
movwf DISPLAY
return
Envia9
movlw b'01100111'
movwf DISPLAY
return
EnviaUnidad
movlw b'00000110'
movwf PORTA
return
EnviaDecena
movlw b'00000101'
movwf PORTA
return
EnviaCentena
movlw b'00000011'
movwf PORTA
return
INCLUDE <RETARDOS.INC> ;Libreria de retardos
END ;Fiin del programa.
Esquemático en Proteus:
(http://i44.tinypic.com/2ilmsr8.jpg)
Link de descarga del proyecto: https://mega.co.nz/#!chdXXBAC!3qxPGomOGK3ZPSbo1Xsh0unUefEnyiNXgX8C-15botQ (https://mega.co.nz/#!chdXXBAC!3qxPGomOGK3ZPSbo1Xsh0unUefEnyiNXgX8C-15botQ)
Que buenos aportes has dejado!
Muchisimas gracias bro!!
Saludos!
ANTRAX
No tienes permitido ver los links.
Registrarse o Entrar a mi cuenta
Que buenos aportes has dejado!
Muchisimas gracias bro!!
Saludos!
ANTRAX
ANTRAX?? ;D soy tu admirador!!! un genio en malwares y seguridad informática. jajaja
Saludos.
Hola sabes que me aparece al momento de compilar error 129,linea 2 expected (END) y no lo puedo solucionar...ayuda porfa