hola a todos
estoy haciendo un programa para un pic 18f2550, el problema es que lo simulo en proteus y me funciona muy bien pero al pasarlo al pic no me hace nada, pense que era el pic entonces lo programe con assambler y si me funciono, les paso el codigo aver quien me puede ayudar, ahh estoy usando un quemador pic kit2.
#include <18F2550.h> //pic a utilizar
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=20000000)
//#use spi(DI=PIN_B0, DO=PIN_B3, CLK=PIN_B1, ENABLE=PIN_B4, SAMPLE_RISE, MSB_FIRST, BITS=32)
#USE RS232(BAUD=9600, XMIT=PIN_C6, RCV=PIN_C7, PARITY=N,BITS=8,) //ERRORS,stream=RF,disable_ints)//Mediante HW
//#use rs232(baud=9600, xmit=PIN_B6, rcv=PIN_B7)
#use fast_io(B)
/////////////////////////////////constantes
#define leer "AT+CMGR="
#define program "AT+IPR=9600"
#define program_1 "AT+IFC=0,0"
#define texto "AT+CMGF=1"
#define borrar "AT+CMGD="
//#define output_low = apaga
//#define output_high= prende
/////////////////////////////////vaiables utiles
int num_uno=1;
int num_dos=2;
int num_tres=3;
int num_cuatro=4;
int num_cinco=5;
int num_seis=6;
int x=0;
/////////////////////////////////variables de clave
char clave_1=0x31;
char clave_2=0x32;
char clave_3=0x33;
char clave_4=0x34;
char clave_grabada=0x30;
/////////////////////////////////variables del mensaje de texto
char CH[115];
/////////////////////////////////variables de posicion en memoria eeprom
char cero=0;
char uno=1;
char dos=2;
char tres=3;
char cuatro=4;
char cinco=5;
char seis=6;
char siete=7;
char ocho=8;
char nueve=9;
/////////////////////////////////variables del contador de rb0
char conta_1=0;
char conta_2=0;
char conta_3=0;
char conta_4=0;
char conta_5=0;
#int_rda //interrupcion de usart
void serial_isr() {
gets(ch);
puts (ch);
}
void grabar_clave(){
clave_grabada=1;
write_eeprom(cinco,clave_1); //guardo clave de configuracion
write_eeprom(seis,clave_2);
write_eeprom(siete,clave_3);
write_eeprom(ocho,clave_4);
write_eeprom(nueve,clave_grabada);
}
void leer_clave(){
clave_1=read_EEPROM(cinco);
clave_2=read_EEPROM(seis);
clave_3=read_EEPROM(siete);
clave_4=read_EEPROM(ocho);
//return
}
#int_ext //interrupcion de rb0
void ext_isr()
{
//#use rs232(baud=9600, xmit=PIN_C2)
conta_1=read_EEPROM(cero); //leo la memoria de los contadores
conta_5=read_EEPROM(uno);
conta_2=read_EEPROM(dos);
conta_3=read_EEPROM(tres);
conta_4=read_EEPROM(cuatro);
conta_1++; //incremento los contadores
if( conta_1== 10) conta_1=0, conta_2++;
if (conta_2==10)conta_2=0, conta_3++;
if (conta_3==10) conta_3=0, conta_4++;
if (conta_4==10) conta_4=0, conta_5++;
if (conta_5==10) conta_5=0;
write_eeprom(cero,conta_1); //guardo contadores en la memoria
write_eeprom(uno,conta_1);
write_eeprom(dos,conta_1);
write_eeprom(tres,conta_1);
write_eeprom(cuatro,conta_1);
write_eeprom(cuatro,conta_5);
puts(conta_5);
printf("%x ",conta_5), //mando los contadores al visor
printf("%x ",conta_4),
printf("%x ",conta_3),
printf("%x ",conta_2),
printf("%x ",conta_1);
}
////////////////////////PROGRAMA PRINCIPAL///////////////////////////////////////////////////////////////////////
void main () {
//#USE RS232(BAUD=9600, XMIT=PIN_C6, RCV=PIN_C7, PARITY=N,BITS=8,ERRORS,stream=RF,disable_ints)//Mediante HW
set_tris_b(0x01);
set_tris_a(0xff);
//enable_interrupts(int_rda);
output_low(pin_B7);
port_b_pullups(true);
//enable_interrupts(int_ext);
//ext_int_edge(h_to_l);
//enable_interrupts(GLOBAL);;
output_low(PIN_A5);
output_low(PIN_B5);
output_low(PIN_B6);
output_low(PIN_B7);
delay_ms(500);
printf(program);
delay_ms(500);
printf("\r\n"program_1);
delay_ms(500);
printf("\r\n"texto);
delay_ms(500);
printf("\r\n"borrar), printf("%u",num_uno);
output_low(PIN_C5);
delay_ms(1000);
output_high(PIN_C5);
delay_ms(1000);
clave_grabada=read_EEPROM(nueve);
if (clave_grabada!=0x31)grabar_clave();
/*write_eeprom(cinco,clave_1); //graba la clave en memoria eeprom del pic
write_eeprom(seis,clave_2);
write_eeprom(siete,clave_3);
write_eeprom(ocho,clave_4);
*/
do{
//#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
if(CH[10]==0x4D) leer_clave(), printf(leer), printf("%u",num_uno), ch[10]=0x00,x=1 ; // lee mensaje
}
WHILE (x!=1);
/*
for (;
{
if(ch[0]==clave_1) if(ch[1]==clave_2) if(ch[2]==clave_3) if(ch[3]==clave_4) if(ch[4]==clave_4) if(ch[5]==clave_4)
clave_1=ch[6], clave_2=ch[7], clave_3=ch[8], clave_4=ch[9], grabar_clave(),
printf(clave_1),
printf(clave_2),
printf(clave_3),
printf(clave_4);
}
*/
}
gracias por la ayuda que me puedan dar