CCS C string alım sorunu

Başlatan WrtM, 13 Mart 2014, 23:57:34

WrtM

İyi çalışmalar arkadaşlar,

Docklight programı ile pice rs232 portu kullanarak veri göndermeye çalışıyorum karakterleri getc() fonksiyonu ile alıyorum ancak pice string gönderemiyorum bu sorunu nasıl aşabilirim ?

#include <16F877A.h>           
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOBROWNOUT               //No brownout reset 
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Lower half of Program Memory is Write Protected

#use delay(clock=8000000)
#define use_portb_lcd TRUE                                    
#include <lcd_driver.c>
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

    char kal [15];


#int_rda 
void rs232_kesme()
{ 
   Disable_interrupts(int_rda);
   gets(kal);
   printf(lcd_putc,"%s",kal);                                                                                                                                                                                                                                                                                                                                       
}


void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   lcd_init();
   enable_interrupts(global);
   
   while(true)
   {
   enable_interrupts(int_rda);
   delay_ms(100);
   }
}

baran123

Merhaba c dilinde string yoktur kütüphanelerle olur fakat siz diziyi çağırdığınız zaman direk tek harf gelir string ifade almak için değişkeni diziye atarak bunu for döngüsü ile bütün harfleri tek tek almanız gerekir.

WrtM

Örnek kod verebilir misiniz ? Sözel olarak ifade edince pek anlayamadım.

Salih

Alıntı Yapgets (string)

value = fgets (string, stream)


Parameters:
string is a pointer to an array of characters.

Stream is a stream identifier (a constant byte)

Returns:
undefined

Function:
Reads characters (using getc()) into the string until a RETURN (value 13) is encountered. The string is terminated with a 0. Note that INPUT.C has a more versatile get_string function.

If fgets() is used then the specified stream is used where gets() defaults to STDIN (the last USE RS232).

CCS Help inde yazdığı gibi CCS de direk string alabilirsin.
Dikkat edilecek nokta, gönderdiğin programda ki stringin sonunda #0 ve #13 karakterleri olmak
zorunda.
örnek "ALİ"+#0+#13   ALİ  stringinin sonuna dediğim karakterler eklenip gönderilecek.

WrtM

Docklight programı ile yazdığım yazının sonunda dediğiniz rakamları ekleyerek gönderdim ancak durum yine aynı gönderdiğim rakamları hem ASCII hemde Hex formatında da yolladım ancak değişen bir durum olmadı. şimdilik string alamıyorum.

Salih

rakamları eklerken karakter olarak eklemiyorsunuz değil mi.
Direk sayısal değer olarak ekleyeceksiniz.
Yani 0'ın ascii kodunu değilde sayısal sıfır değeri eklenecek.

baran123

#6
Söyle bir sey denemek isterseniz,buradaki metin kelimesi 7 harfli yani index olarak 0,1,2,3,4,5,6 bu indexleri for döngüsü ile sıra ile alırsınız oda söyle olabilir mantıgını soyluyorum .

char metin[6] ;
metin[] = "Merhaba" ; 
for(int i = 0,i<7,i++) //for ile bütün harfleri bitene kadar döngü oluşturduk
{
  metin[i];"                                       //her artan sayıyı metin değişkeninin indexi yaptık 
  printf(i değişkeninide buraya yazdırın); //harfi yazdırdık 7 kere yapacagından bütün harfler yan yana olur 
}

orneklerini bakabilirsiniz pointer yöntemi falanda var onlarıda öğrenin derim iyi çalışmalar.