Contador decimal con visualización en display de 7 segmentos.
-Subrutina de retardo
-Tabla de datos de conversión Hexadecimal a 7 segmentos
Diagrama de conexión:
Prueba:
;-------------------------------------------------------------------
;Autor: LONELY113
; http://lonely113.blogspot.com
;
;Programa contador decimal 0-9
;Salida a display 7 segmentos catodo comun: Puerto B (RB1-RB7)
;
;-------------------------------------------------------------------
include "p16f84a.inc"
list P=16f84a
__CONFIG _WDT_OFF & _XT_OSC
COUNT1 equ 0x0C
COUNT2 equ 0x0D
COUNT3 equ 0x0E
COUNT0 equ 0x9F
org 0x00 ; Inicio de programa
bsf STATUS,5 ; Inicio configuracion E/S
movlw 0x00
movwf TRISB ; PORTB como salida
bcf STATUS,5 ; Fin configuracion E/S
movlw 0x00
movwf COUNT0 ; Iniciar cuenta en 0
BEGIN: movf COUNT0,0
call TABLE ; llamada a subrutina
movwf PORTB ; Mostrar cuenta
call DELAY ; Retardo
incf COUNT0,1 ; Incrementar cuenta
movlw 0x0A
subwf COUNT0,0 ; Comprobar si cuenta llega a 10d
btfsc STATUS,2
clrf COUNT0 ; Si COUNT=10d reiniciar inmediatamente
goto BEGIN ; Bucle infinito
;Subrutinas
DELAY movlw 0xFF ; Subrutina de retardo de cuenta
movwf COUNT1
movwf COUNT2
movwf COUNT3
LOOP: decfsz COUNT1
goto LOOP
decfsz COUNT2
goto LOOP
decfsz COUNT3
goto LOOP
return
;Tabla de datos
TABLE addwf PCL,1 ; Conversion hexadecimal a 7 segmentos
retlw 0x7E
retlw 0x0C
retlw 0xB6
retlw 0x9E
retlw 0xCC
retlw 0xDA
retlw 0xFA
retlw 0x0E
retlw 0xFE
retlw 0xDE
return
end ; Fin de programa
****Programa en Pic Basic (Microcode)****
'**************************************************************** '* Name : Contador_decimal.BAS * '* Author : LONELY113 * '* Notice : Copyright (c) 2011 LONELY113 * '* : All Rights Reserved * '* Date : 12/05/2011 * '* Version : 1.0 * '* Notes : Programa para PIC16f84a * '* : Salida a display cátodo común [RB1-RB7] * '**************************************************************** @ __config _HS_OSC & _WDT_OFF DEFINE OSC 10 '10 MHz trisb=$00 'Puerto B como salida cuenta VAR BYTE 'Contador tamaño byte dataout VAR BYTE cuenta=0 loop1: cuenta=cuenta+1 IF cuenta=10 THEN cuenta=0 'Cuenta de 0 a 9 PAUSE 1000 'Retardo de 1 segundo LOOKUP cuenta,[$7E,$0C,$B6,$9E,$CC,$DA,$FA,$0E,$FE,$DE,$EE,$F8,$72,$BC,$F2,$E2],dataout 'Conversión Hexadecimal a 7 segmentos portb=dataout ' Envio a Puerto B GOTO loop1 END
Archivos .ASM y .HEX
No hay comentarios:
Publicar un comentario