Hola amigos de foros de electrónica. Esta es mi segunda pregunta en este foro 
El problema que ahora tengo, es que no puedo grabar mi PIC16F877A. Para grabar tengo el software del Master-Prog y de hecho ayer lo grabé y me andaba bien pero justo hoy en la mañana no graba ningún programa, ni el más sencillo.
El error que me muestra generalmente dice:
A veces cuando cambio de *.hex, me puede mostrar otra dirección como 0x000001 o algo por el estilo
A pesar de ello, ya no me graba los primeros programas que hice
y tengo que entregar esto para mañana 
Aquí les paso mi código:
Espero que me puedan ayudar. Saludos
El problema que ahora tengo, es que no puedo grabar mi PIC16F877A. Para grabar tengo el software del Master-Prog y de hecho ayer lo grabé y me andaba bien pero justo hoy en la mañana no graba ningún programa, ni el más sencillo.
El error que me muestra generalmente dice:
Error en la memoria FLASH en: 0x000000
A veces cuando cambio de *.hex, me puede mostrar otra dirección como 0x000001 o algo por el estilo
A pesar de ello, ya no me graba los primeros programas que hice
Aquí les paso mi código:
Código:
#include <16F877A.h>
#device adc=10
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS // Admite HS y XT
#FUSES PUT //Power Up Timer
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage programing, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOPROTECT
#use delay(clock=20000000)
#define Cero 0b01111110
#define Uno 0b00001100
#define Dos 0b10110110
#define Tres 0b10011110
#define Cuatro 0b11001100
#define Cinco 0b11011010
#define Seis 0b11111010
#define Siete 0b00001110
#define Ocho 0b11111110
#define Nueve 0b11001110
#define display1(d) output_b(d)
#define display2(d) output_c(d)
void show(int entero, int decimal){
switch (entero)
{
case 0:
{
display1(Cero);
} break;
case 1:
{
display1(Uno);
} break;
case 2:
{
display1(Dos);
} break;
case 3:
{
display1(Tres);
} break;
case 4:
{
display1(Cuatro);
} break;
case 5:
{
display1(Cinco);
} break;
case 6:
{
display1(Seis);
} break;
case 7:
{
display1(Siete);
} break;
case 8:
{
display1(Ocho);
} break;
case 9:
{
display1(Nueve);
} break;
}
switch (decimal)
{
case 0:
{
display2(Cero);
} break;
case 1:
{
display2(Uno);
} break;
case 2:
{
display2(Dos);
} break;
case 3:
{
display2(Tres);
} break;
case 4:
{
display2(Cuatro);
} break;
case 5:
{
display2(Cinco);
} break;
case 6:
{
display2(Seis);
} break;
case 7:
{
display2(Siete);
} break;
case 8:
{
display2(Ocho);
} break;
case 9:
{
display2(Nueve);
} break;
}
}
void convert(float voltaje){
unsigned int entero, decimal;
float masa;
/* Método numérico aplicado:
función = 5.84089 - (94.7218/V^3) + (99.9228/V^2) - (36.3907/V);
*/
masa = 5.84089 - (94.7218/(voltaje*voltaje*voltaje)) + (99.9228/(voltaje*voltaje)) - (36.3907/voltaje);
entero = masa;
decimal = 10*(masa-entero);
show(entero, decimal);
}
void main(void)
{
float medicion, voltaje;
setup_adc(adc_clock_internal);
setup_adc_ports(ALL_ANALOG);
set_adc_channel(0);// Patilla 2 (A0)
output_b(0x00);
output_c(0x00);
delay_ms(300);
while(TRUE){
medicion = read_adc();
voltaje = medicion*(0.00489); // (5/1023) = 0.0048876
convert(voltaje);
}
}
Espero que me puedan ayudar. Saludos