Autor Tema: BUSCO AYUDA CON CODIGO C  (Leído 1484 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado pachomil

  • PIC12
  • **
  • Mensajes: 70
BUSCO AYUDA CON CODIGO C
« en: 27 de Octubre de 2010, 17:09:38 »
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

Desconectado bmb

  • PIC18
  • ****
  • Mensajes: 423
Re: BUSCO AYUDA CON CODIGO C
« Respuesta #1 en: 27 de Octubre de 2010, 21:06:44 »
Hola pachomil, no he revisado tu programa a fondo, pero como veo que no estás usando el USB del PIC, mejor utiliza estos fuses y este encabezado en el main() de tu programa y asi te puedes evitar algunos problemas:

Código: [Seleccionar]
#include <18F2550.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES HS                       //High speed Osc (> 4mhz FOR PCM/PCH) (>10mhz for PCD)
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES BORV20                   //Brownout reset at 2.0V
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOCPD                    //No EE protection
#FUSES NOSTVREN                 //Stack full/underflow will not cause reset
#FUSES NODEBUG                  //No Debug mode FOR ICD
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used FOR I/O
#FUSES NOWRT                    //Program memory not write protected
#FUSES NOWRTD                   //Data EEPROM not write protected
#FUSES NOIESO                   //Internal External SWITCH Over mode disabled
#FUSES NOFCMEN                  //Fail-safe clock monitor disabled
#FUSES NOPBADEN                 //PORTB pins are configured as digital I/O on RESET
#FUSES NOWRTC                   //configuration not registers write protected
#FUSES NOWRTB                   //Boot block not write protected
#FUSES NOEBTR                   //Memory not protected from table reads
#FUSES NOEBTRB                  //Boot block not protected from table reads
#FUSES NOCPB                    //No Boot Block code protection
#FUSES MCLR                     //Master Clear pin enabled
#FUSES NOLPT1OSC                //Timer1 configured FOR higher power operation
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#FUSES PLL1                     //No PLL PreScaler
#FUSES CPUDIV1                  //No System Clock Postscaler
#FUSES NOUSBDIV                 //USB clock source comes from primary oscillator
#FUSES NOVREGEN                 //USB voltage regulator disabled

#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 ()
{
   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_CLOCK_DIV_2);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(CCP_OFF);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   enable_interrupts(INT_EXT);
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);

   //#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) ;
   output_low (pin_B7) ;
   port_b_pullups (true) ;
   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) ;
   }

   */
}

Saludos!
« Última modificación: 27 de Octubre de 2010, 21:09:09 por bmb »

Desconectado pachomil

  • PIC12
  • **
  • Mensajes: 70
Re: BUSCO AYUDA CON CODIGO C
« Respuesta #2 en: 27 de Octubre de 2010, 21:26:52 »
gracias bmb


lo voy a probar y le cuento como me fue muchas gracias por la ayuda




Desconectado pachomil

  • PIC12
  • **
  • Mensajes: 70
Re: BUSCO AYUDA CON CODIGO C
« Respuesta #3 en: 28 de Octubre de 2010, 18:12:52 »
BMB GRACIAS


si ya me funciono en el pic y pues el programa ya me toca ir depurandolo para lograr lo que estoy haciendo gracias
por la ayuda