Bien esta vez haremos un contador de 0 a 9 mediante un pulsador en Ra0 que cada vez que es pulsado incrementara la cuenta en el contador en forma binaria y mostrado por el puerto B, usando un decodificador 7447 convertiremos este conteo de binario a decimal, si la cuenta llega a 9 se reiniciara el conteo.
Esto mismo se puede hacer sin usar el 7447 usando las famosas tablas del pic, pero queria hacerlo de esta forma para entender el algoritmo de programacion, en una proxima publicacion haremos el contador sin 7447.
;EL PROGRAMA
list p=16f84
status equ 0x03
trisb equ 0x86
portb equ 0x06
trisa equ 0x85
porta equ 0x05
reg1 equ 0x0C ; Estos 3 registros los utilizaré
reg2 equ 0x0D ; para hacer el retardo
reg3 equ 0x0E
org 0x00 ;inicio del programa
bsf status,5 ;vamos al banco1
clrf trisb ;portb es salida
movlw b'00000001' ;Ra0 es entrada
movwf trisa
bcf status,5 ;regresamos al banco0
inicio clrf portb
repite btfss porta,0 ;presiono pulsador Rao?
goto $-1 ;si no regresa atras
call rebote ;llama antirebote
incf portb,1 ;incrementa el conteo mas 1
;comparacion del conteo=9
MOVF portb,0
XORLW B'1010' ;pregunta si conteo=9
BTFSC status,2 ;aqui ve la respuesta
goto inicio ;si es asi vuelve a inicio
btfsc porta,0 ;solto el pulsador?
goto $-1 ;si no regresa atras
goto repite
rebote movlw 10 ; Aquí se cargan los registros
movwf reg1 ; reg1, reg2 y reg3
tres movlw 10 ; respectivamente
movwf reg2
dos movlw 10
movwf reg3
uno decfsz reg3,1 ; Aquí se comienza a decrementar
goto uno ; Cuando reg3 llegue a 0
decfsz reg2,1 ; le quitare 1 a reg2
goto dos ; cuando reg2 llegue a 0
reg1,1 ; le quitare 1 a reg1
goto tres ; cuando reg1 llegue a 0
return ; regresare al lugar
end
Aqui tienen el archivo HEX. comprobado y lo pueden bajar del siguiente link:
http://www.4shared.com/file/nCXiviU8/contador.html
Esto mismo se puede hacer sin usar el 7447 usando las famosas tablas del pic, pero queria hacerlo de esta forma para entender el algoritmo de programacion, en una proxima publicacion haremos el contador sin 7447.
;EL PROGRAMA
list p=16f84
status equ 0x03
trisb equ 0x86
portb equ 0x06
trisa equ 0x85
porta equ 0x05
reg1 equ 0x0C ; Estos 3 registros los utilizaré
reg2 equ 0x0D ; para hacer el retardo
reg3 equ 0x0E
org 0x00 ;inicio del programa
bsf status,5 ;vamos al banco1
clrf trisb ;portb es salida
movlw b'00000001' ;Ra0 es entrada
movwf trisa
bcf status,5 ;regresamos al banco0
inicio clrf portb
repite btfss porta,0 ;presiono pulsador Rao?
goto $-1 ;si no regresa atras
call rebote ;llama antirebote
incf portb,1 ;incrementa el conteo mas 1
;comparacion del conteo=9
MOVF portb,0
XORLW B'1010' ;pregunta si conteo=9
BTFSC status,2 ;aqui ve la respuesta
goto inicio ;si es asi vuelve a inicio
btfsc porta,0 ;solto el pulsador?
goto $-1 ;si no regresa atras
goto repite
rebote movlw 10 ; Aquí se cargan los registros
movwf reg1 ; reg1, reg2 y reg3
tres movlw 10 ; respectivamente
movwf reg2
dos movlw 10
movwf reg3
uno decfsz reg3,1 ; Aquí se comienza a decrementar
goto uno ; Cuando reg3 llegue a 0
decfsz reg2,1 ; le quitare 1 a reg2
goto dos ; cuando reg2 llegue a 0
reg1,1 ; le quitare 1 a reg1
goto tres ; cuando reg1 llegue a 0
return ; regresare al lugar
end
Aqui tienen el archivo HEX. comprobado y lo pueden bajar del siguiente link:
http://www.4shared.com/file/nCXiviU8/contador.html