Hola,
Resulta que he hecho un pequeño programa que cuenta de 0-9 visualizando los números en un display de 7 segmentos de ánodo común.
El integrado es un 16F84A y el compilador XC8.
Al ser el display de ánodo común configuro todo el PORTB como entrada.
El programa funciona perfectamente mostrando todos los números en el display.
El problema esta en que por alguna extraña razón no se ilumina el segmento "a" del display, conectado al pin RB0/INT.
Al ser un pin para interrupciones externas he tratado de deshabilitar las interrupciones globales pero no soluciona nada.
Los segmentos del display funcionan y las conexiones están bien.
Decir que estoy aprendiendo a programar.
Adjunto programa:
A ver si alguien sabe que puede ser.
Saludos!
Resulta que he hecho un pequeño programa que cuenta de 0-9 visualizando los números en un display de 7 segmentos de ánodo común.
El integrado es un 16F84A y el compilador XC8.
Al ser el display de ánodo común configuro todo el PORTB como entrada.
El programa funciona perfectamente mostrando todos los números en el display.
El problema esta en que por alguna extraña razón no se ilumina el segmento "a" del display, conectado al pin RB0/INT.
Al ser un pin para interrupciones externas he tratado de deshabilitar las interrupciones globales pero no soluciona nada.
Los segmentos del display funcionan y las conexiones están bien.
Decir que estoy aprendiendo a programar.
Adjunto programa:
PHP:
/*
* File: main.c
* Author: nimio
*
* 16F84A
*
* PROGRAMA CONTADOR DE 0-9 CON DISPLAY 7 SEGMENTOS ÁNODO COMÚN.
*
*
* Created on 7 de noviembre de 2012, 6:19
*/
#include <xc.h>
//#include <stdio.h>
#define _XTAL_FREQ 4000000
#pragma config FOSC=XT, WDTE=OFF, PWRTE=ON, CP=OFF
/*
*
*/
void main(void) {
char i=0; //Variable contador inicializada a 0.
int tabla7seg [10]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x98}; // 0-9 ANODO COMÚN.
//int tabla7seg [10]={0b11000000, 0b11111001, 0b10100100, 0b10110000, 0b10011001, 0b10010010, 0b10000010, 0b11111000, 0b10000000, 0b10011000}; //0-9 ÁNODO COMÚN
//int tabla7seg [10]={0b00111111, 0b00000110, 0b01011011, 0b01001111, 0b01100110, 0b01101101, 0b01111101, 0b00000111, 0b01111111, 0b01100111}; //0-9 CÁTODO COMÚN
//int tabla7seg [10]={0x03F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67}; // 0-9 en HEX. 7 seg. CÁTODO COMÚN.
// Vector 10 elementos.
TRISB=1;
//PORTB=0b00000000;
//INTCONbits.GIE=0; // Se deshabilitan todas las interrupciones.
//INTCONbits.INTE=0; // Deshabilita interrupción en RB0/INT.
//di();
do {
PORTB=(tabla7seg [i]); // Muestra por PORTB el contenido de la tabla7seg según el valor de i.
__delay_ms(1000);
i++;
if (i>9){ // Si i es más grande que 9 quiere decir que ya se ha mostrado el 9.
i=0; // Entonces se inicializa a 0 i para empezar otra vez desde 0.
}
}
while(1); // Bucle infinito.
}
A ver si alguien sabe que puede ser.
Saludos!