martes, 1 de marzo de 2011

Contador Decimal

Programa para PIC16F84A

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:

 

Programa en Assembler:

;-------------------------------------------------------------------
;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