Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

RS232 ile veri alımı

Başlatan hemso, 11 Şubat 2011, 00:12:34

hemso

#15
Hocam bunları yazdığım gün bilgisayar başında 7 saat oturduktan sonra durumu hallettim:D Daha sonra da şimdiye kadar foruma girmedim maalesef. Şimdi gördüm yazdıklarınızı. Benim elimde şu an çalışan bir kod var işlevini yapan:D. Bende paylaşım olması açısından diğer arkadaşlar da görsün diye koyuyorum buraya. Ama genede bence esas -işte bu!- denilecek şey sizin öğrencilerinize bu kadar yardımcı oluyor olmanız. Sizi çok seviyoruz hocam:D Kod şöyle:
#include "D:\rflab\rfid_kapi\deneme3(16f877)\deneme3.h"
#include "string.h"



int i;
char klavye[10];

#int_RDA
void  RDA_isr(void) 
{
    disable_interrupts(int_rda);
     
    for(i=0;i<5;i++)
    {
      klavye[i]=getchar();
      putchar(klavye[i]);
    }
    
     
   if(klavye[0]=='0' && klavye[1]=='0' && klavye[2]=='d' && klavye[3]=='1' && klavye[4]=='1')/*bu kısım biraz kazmaca oldu ama artık sinir oldum en son böyle yazdım:D*/
   {
     output_b(0x0E); 
     delay_ms(1000);
     output_b(0x00);
     break;
   }
   if(klavye[0]=='0' && klavye[1]=='0' && klavye[2]=='y' && klavye[3]=='1' && klavye[4]=='1')
   {
     output_b(0x05);
     
     for(i=0;i<3;i++)
     {
        delay_ms(500);
        output_b(0b00000001);
        delay_ms(200);
        output_b(0b00000101);
     }
     
     output_b(0x00);
     break;
   }
}

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);

   enable_interrupts(GLOBAL);
  
   
   
   set_tris_a(0x00); 
   output_a(0x00);
   
   
   
   printf("quaresma");
   while(1)
   {
     enable_interrupts(INT_RDA);
   }

}


Başta Fatih hocama olmak üzere yardımını esirgemeyen herkese saygılar..

50Cal

Rda kesmesinin içindeki şu kısım kafamı karıştırdı;

    for(i=0;i<5;i++)
    {
      klavye=getchar();
      putchar(klavye);
    }

ilk '0' karakterini geldi klavye stringine atandı. i=1 oldu. 2. karakter alındı ve yine klavye= şeklinde diziye alındı. Dizi indeksi belirtilmeden 2. gelen karakteri klavye[1]'e 3. gelen karakteri klavye[2]'ye yerleştireceğini nasıl biliyor program?

string.h kütüphanesi eklemişsiniz, bununla bir ilgisi var mı?

eseneren

@50Cal
for(i=5;i<10;i++)
    {
      klavye=getchar(); //a.
      putchar(klavye);  //b.
    }
yazsanda aynı işi yapar, a. ve b. satır arka arkaya yazılsa 5 defa yıne aynı ısı yapar getchar klavyeden karakterı alıyor putcharda ekrana basıyor(neyse).
bır sonrakı karakter sonrakı haneye basılıyor aynı haneye basmak ıstersen b satırından sonra bırde backsspace koymak lazım.
yani putchar karakter bastıkdan sonra ne sayacı ıse artık bır artırıyor.

Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk

50Cal

Teşekkürler, fakat sanırım sormaya çalıştığım şey yanlış anlaşılmış. For döngüsüyle ilgili bir sıkıntım yok, yani fordaki i değeriyle dizi indeksini karıştırmıyorum.

Anlayamadığım satır;  klavye=getchar();

Bir stringimiz var, 2 byte olsun;  klavye="xx"  klavye[0]='x' ve klavye[1]='x'

klavye=getchar(); ile 'A' karakterini alıp klavyeye atıyoruz.Muhtemelen 0 indeksine atacaktır karakteri, yani: klavye="Ax" olmalı.
sonra bir karakter daha alıyoruz('B' olsun) ve yine klavye=getchar(); Bu satırdan sonra olmasını beklediğim durum şöyle;  klavye="Bx" . Fakat arkadaşın uygulamasına göre klavye="AB" olmuş.

Yani öğrenmeye çalıştığım; program, bir stringin en son hangi elemanına karakter ataması yapıldığını ve sıradaki elemanın hangisi olduğunu nasıl biliyor? Stringe yada diziye bir atama yapıldığında dizinin o elemanın indeksi saklanıyor mu bi yerde?



JKramer

O örnek düzeltilmiş sanırım :). Son halini yukarıda bir kontrol edin:
for(i=0;i<5;i++)
    {
      klavye[i]=getchar();
      putchar(klavye[i]);
    }

50Cal

Teşekkürler hocam, düzeltip kaçmışlar, hiç söylemiyorlar da    :P