Es interesante como estan modificando los mensajes para que no sepan de que se trata (incluso tu ocmpañero de clase "Seon" pidio que borraran el mensaje con el mismo problema, a dodne apunta el link que pase antes), hasta el titulo cambiaron. No hagan eso por que perjudican a cualquiera que necesite la informacion.
Si tienen otro problema y que no tiene relacion con este, por favor creen un nuevo post en la seccion adecuada.
El problema se trataba de esto:
Resulta que para el colegio necesito hacer este codigo, usamos el mplab x con el compilador xc8 de lenguaje C y el PIC es el 16F84A. Aqui el problema:
Se necesita construir un contador de 1 digito de 0 a 9. Para eso se desea conectar un PIC16F84A a un display de 7 segmentos. Cada vez que se recibe un cambio de 0 a 1 en RA2 se desea que el display incremente su valor en 1 y si llega a 9 debera volver a 0 nuevamente en forma repetitiva. La señal recibida en RA2 es enviada en otro equipo y solo cada cambio de 0 a 1 debe ser considerado para incrementar la numeracion. El display esta conectado asi y debe mostrar un numero en el display: a=RB0 b=RB1 c=RB2 d=RB3 e=RB4 f=RB5 g=RB6
Respuesta:
// PIC16F84A Configuration Bit Settings
// 'C' source line config statements
#include <xc.h>
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
// CONFIG
#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF // Watchdog Timer (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (Power-up Timer is disabled)
#pragma config CP = OFF // Code Protection bit (Code protection disabled)
short int contador=0;
short int tabla[10] = { 0b0000000, // Numero 0
0b0000000, // Numero 1
0b0000000, // 2
0b0000000, // 3
0b0000000, // 4
0b0000000, // 5
0b0000000, // 6
0b0000000, // 7
0b0000000, // 8
0b0000000}; // 9
void main() {
// Aca la configuracion de los puertos,TRIS, etc
TRISA = 0xFF; // Puerto A como entradas
TRISB = 0; // Puerto B como salidas
PORTB = tabla[0]; // Que el display comienze con el valor de 0
while(1) // Loop principal
{
if(PORTAbits.RA2) // RA2 en 1?
{
delay_ms(10); // Espero, antirebote
contador++; // Aumento el numero en 1
if(contador==10) { contador=0; } // Si se paso a 10, lo pongo en 0
PORTB = tabla[contador]; // Muestro el valor nuevo
while(PORTAbits.RA2); // Espero que suelte el boton (asi no cuenta varias veces
}
}
}
En donde dice tabla,, ahi tenes para cada numero tenes que ponerle un 1 o un 0 para que se encienda el segmento de cada led.. Supongamos que tenes el 7 segmento de catodo comun
Para el 0 deberias encender los segmentos: abcdef
Segun te dieron especificado: a=RB0 b=RB1 c=RB2 d=RB3 e=RB4 f=RB5 g=RB6
Entonces el primer valor es:
0b0111111, // Numero 0
Recorda que RB0 es el de la derecha, es decir Rb7 Rb6 Rb5 Rb4 Rb3 Rb2 Rb1 Rb0.