Problas con los puertos del pic 16f877

#1
Hola a todos.

Estoy haciendo un programa con un 16F877 y he llegado a un punto de bloqueo que me está matando en vida :LOL:

Tengo que controlar 4 display de 7 segmentos y lo hago mediante cuatro 74LS48 (convertidores de BCD y 7 segmentos). O sea, uno para cada display.

Utilizo el PORTB para controlar dos displays y el PORTD para controlar los otros dos. La parte baja del PORTB va conectada a un 74LS48 y la parte alta a otro 74LS48, de forma que con un puerto puedo controlar dos displays.

Cada dos displays forman un bloque, es decir, que empiezan los dos marcando 0, y cuando se les da pulsos por el bit 0 de PORTA el de la derecha marcha uno, y cuando llega a nueve y vuelve a dar la vuelta el de la izquierda marca un uno. Es decir, como un contador.

Utilizo un pulsador conectado al bit 1 de PORTA para conmutar que los pulsos (y por tanto el contaje) afecten a los displays que controla el puerto B o a los que controla el puerto D.

El problema es el siguiente. Cuando va por 79 ya no llega a 80, sino que aparece un símbolo de un cuatro,pero sin el rabo de abajo, en el display de las decenas (las unidades van bien). Ese es un símbolo que dibujan los 74LS48, pero yo no lo tengo programado para que salga.

Hice una prueba y puse por el puerto B este valor 1111 1111, y cual es mi sorpresa de que no me lo escriben los puertos.

Mi pregunta es si los puertos admiten valores de 0 a 255 o de -127 a 127, porque entonces me explicaría el problema porque 80 (dibujado en los displays) en binario es 1000 0000 y pasado a decimal es el valor 128, por lo que a lo mejor el problema vendría por desbordamiento de los puertos. No se si es una chorrada lo que estoy diciendo, pero el programa está mas que revisado y si no es eso o algo parecido no me explico que puede estar pasando porque está perfectamente escrito.

A ver si alguien sabe del tema y me puede echar un cable...
 
#2
Tu problema no son los puertos, es el manejo de tus datos que no es en BCD sino en Hex, y el 7448 al ser con convertidor de BCD a 7 segmentos no puede mostrar los datos que sobran (A a F)

revisa la rutina de tu programa, casi estoy seguro que el PIC en vez de subir de 79 a 80 esta subiendo a 7A, y despues cuando pones FF en el puerto los 7448 muestran el display en blanco por que asi lo indica su tabla de verdad

http://www.datasheetcatalog.org/datasheet/motorola/74LS48.pdf
 
#3
Pero es lo que te decía que cuando pongo por el puerto B el valor 1111 1111 en esas 8 patillas no hay 5V en todas sino en algunas. Y eso es antes del 7448. O sea a la entrada....
 
Arriba