Buenas!!!haber el codigo BCD es un codigo byte, es decir necesita 8bits para su representacion y va desde el 0 hasta el 9
Codigo:
x3x2x1x0 | BCD
0 0 0 0 | 0
0 0 0 1 | 1
0 0 1 0 | 2
0 0 1 1 | 3
0 1 0 0 | 4
0 1 0 1 | 5
0 1 1 0 | 6
0 1 1 1 | 7
1 0 0 0 | 8
1 0 0 1 | 9
Para tu proyecto como dices que tienes un descodificador BCD-7Seg simplemente tendras que conectar 4 pines(corresponden a x3x2x1x0) a la entrada del descodificador, y para representar por ejemplo en 5, tendras que sacar el valor 5 por los pines declarados del pin. Por ejemplo, si tenemos declarados en puerto B como salidas de nuestro numero en BCD, conectamos el puerto B al descodificador
Codigo:
PIN_B0 -> A del deco
PIN_B1 -> B del deco
PIN_B2 -> C del deco
PIN_B3 -> D del deco
Si queremos representar el numero 5 haremos esto:
Codigo:
movlw d"5" ;cargamos el digito a representar d"5"=0b0101
movwf portB ;portb tiene que ser declarado -> aqui mostramos el digoto 5
Suerte!!!
Ke tal!haber como bien has dicho los display"s de 7seg deben estar multiplexados para la representacion de datos en los mismos, eso quiere decir que debes hacer un barrido de los display"s el cual entre display y display haya una pausa de 10 a 20 ms que es el tiempo donde el ojo humano no aprecia el parpadeo. Entonces para mostrar por ejemplo en numero 175 en los tres display"s de 7seg lo que debes hacer es lo siguiente:
Codigo:
ve movlw d"5" ;se carga el dato a iluminar
movwf portb ;se ilumina 1º 7seg
pausa entre 10 a 20 ms ;pausa para poder ser apreciada
movlw d"7" ;se carga el dato a iluminar
movwf portb ;se ilumina 2º 7seg
pausa entre 10 a 20 ms ;pausa para poder ser apreciada
movlw d"1" ;se carga el dato a iluminar
movwf portb ;se ilumina 3º 7seg
pausa entre 10 a 20 ms ;pausa para poder ser apreciada
goto ve ;bucle infinito
Tienes que tener en cuenta que tipo de 7seg estas utilizando si es anodo comun o catodo comun, para el caso de anodo comun el display correspondiente se ilumina con un valor de salida del pin del pic a cero y de forma contraria para el caso del catodo comun, esto es importante para el barrido de los display"s.
Suerte!!!
Ahí te pongo un par de ejemplos de rutinas que convierten un Byte en su correspondiente BCD para los 7 segmentos:
Ejemplo 1 (Generado por CCS PICC desde su correspondiente fuente en C)
Codigo:
cblock 0x20 ;RAM en el Bank0
l_digit
h_digit
valor
endc
B2BCD
CLRF h_digit
MOVF valor,W
SUBLW 09
BTFSC 03.0
GOTO B2BCD2
B2BCD1
MOVLW 0A
SUBWF valor,F
INCF h_digit,F
MOVF valor,W
SUBLW 09
BTFSS 03.0
GOTO B2BCD1
B2BCD2
MOVF valor,W
MOVWF l_digit
RETLW 00
Esto mismo en CCS PICC
Codigo:
void bin2bcd(int valor){ // Funcion que convierte de Binario a BCD
h_digit=0;
if (valor>=10)
{ do
{ valor-=10;
h_digit++; }
while (valor>=10); }
l_digit=valor;
}
Ejemplo 2 Rutina desarrollada directamente en MPASM:
Codigo:
;SUBRUTINA DE BINARIO A BCD
BINBCD
CLRF CENT ;CENTENAS
clrf MSD ;DECENAS
movwf LSD ;UNIDADES
gtenth movlw .10
subwf LSD,W
BTFSS STATUS,C
goto OVERHAUL
movwf LSD
incf MSD, F
goto gtenth
OVERHAUL
MOVLW .10
SUBWF MSD,W
BTFSS STATUS,C
GOTO OVER
MOVWF MSD
INCF CENT,F
GOTO OVERHAUL
OVER
RETLW 0
Pruebalas y me cuentas. (La primera es la que yo uso)