18f87j60 Seri haberleşme sorunu VB ile

Başlatan nuri2978, 05 Temmuz 2008, 22:08:35

nuri2978

Arkadaşlar 18fj deneme boardu aldım şuan için sadece led yakabiliyorum ama ben bu işlemleri bilgisyar kontrollü yapmak istiyorum..Ama bir türlü beceeremedim..VB de MSCOMM Nesnesini kullanarak data gönderiyorum ve picden de bu data geldiği zaman git şu ledi yak diyorum ancak C7 ledi datayı aldığına dayir hafif bii flaşör yapıyor ama hiçbir şekilde ledi yakmıyor... yardımlarınızı bekliyorum arkadaşlar örnek kod aşağıda..Bu arada CCS C de yeniyim... Rs232 den 5 bilgisi geldiği zaman b0 da ki ledi yakmak istiyorum örneğin...
CCS C Kodları ;
/******************************************************
      PIC16F877 ile RS232 Seri İletişim Uygulaması
PIC PROG/DEKA     : Port B jumper'ı LCD konumunda olmalı
*******************************************************/

#include <18f87j60.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

#use delay (clock=25000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.

#use fast_io(b)
#byte portb=6
#use rs232 (baud=9600, xmit=pin_c6, rcv=pin_c7) // RS232 protokolünün 9600 bit/sn baud hızında olacağını ve
                                                                  // TX,RX uçlarının hangi pinler olacağını tanımlıyor
                                                                  // parity bitinin olmadığını, stop bitinin 1 bit olacağı belirtiliyor

char   klavye=0;  // klavye isminde 80 üyeli bir dizi tanımlanıyor

#int_rda   // RX ucuna veri gelince meydane gelen kesme
void serihaberlesme_kesmesi ()
{
   disable_interrupts(int_rda); // int_rda kesmesini pasif yap
  klavye=getch(); // String ifadeyi al ve "klavye" adlı dizi değişkenine aktar.
  printf("şifre gir");
  output_low(pin_c5); // RC5 çıkışı lojik-0
    if (klavye=5)
  {delay_us(200); output_high(pin_b0);}
   

}

void main ( )
{
   setup_spi(SPI_SS_DISABLED);     // SPI birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı
   set_tris_b(0x00);
   output_b(0x00);
   output_low(pin_c5); // RC5 çıkışı ilk anda sıfırlanıyor

   enable_interrupts(GLOBAL);  // Aktif edilen tüm kesmelere izin ver

   while(1) // Sonsuz döngü
   {
      enable_interrupts(int_rda); // int_rda kesmesi aktif
  puts("22");
   }
}



Bunlarda Visual basic kodları innternetten hazır buldum arkdaşlar..

Private Sub bilgigönder_Click()
Dim dec_sayi As Integer

dec_sayi = (((Text1.Text) * 1) + ((Text2.Text) * 2) + ((Text3.Text) * 4) + ((Text4.Text) * 8) + ((Text5.Text) * 16) + ((Text6.Text) * 32) + ((Text7.Text) * 64) + ((Text8.Text) * 128))

Text9.Text = dec_sayi                       'Binary sayının decimal karşılığı
Text10.Text = Hex(dec_sayi)                 'Binary sayının hexadecimal karşılığı
Text11.Text = Chr$(dec_sayi)                'Binary sayının ASCII kod karşılığı

For i = 1 To 10                             'Bilginin kesin gitmesi için 10 defa aynı bilgi gönderiliyor
        MSComm1.Output = Chr$(103)          '1. Önbilgiyi gönder
        MSComm1.Output = Chr$(104)          '2. Önbilgiyi Gönder
        MSComm1.Output = Chr$(dec_sayi)     'Gerçek Bilgiyi Gönder
Next i

End Sub

Private Sub CIKIS_Click()
End
End Sub

Private Sub Form_Load()
Text1.Text = "0"
Text2.Text = "0"
Text3.Text = "0"
Text4.Text = "0"
Text5.Text = "0"
Text6.Text = "0"
Text7.Text = "0"
Text8.Text = "0"
Text9.Text = ""
Text10.Text = ""
Text11.Text = ""


MSComm1.Settings = "2400,N,8,1"             ' Seri portun konfigürasyonlarının ayarlanması
MSComm1.CommPort = 1                        ' COM1'in seçilmesi
If MSComm1.PortOpen = False Then            ' Port açıkmı kapalımı bak
    MSComm1.PortOpen = True                 ' Eğer kapalı ise aç
End If

End Sub



şimdiden yardımlarınız için teşekkurler
Benimle gel arkadaşım gel ve sonu gor

SpeedyX

if (klavye=5)
yerine
   if (klavye==5)
yada
   if (klavye=='5')

nuri2978

Alıntı yapılan: "SpeedyX"if (klavye=5)
yerine
   if (klavye==5)
yada
   if (klavye=='5')

hocam dediğinii yaptım ama yine değişen birşey olmadı C7 ledi yine VB de her butona bastığımda yanıp sönüyor ama B0 a ait led bir türlü yanmıyor :S
Benimle gel arkadaşım gel ve sonu gor

SpeedyX

demekki 5 göndermiyorsun

if (klavye==5)
yerine
if (klavye!=5)

şimdi yanıyor mu led?

nuri2978

wala hocam 5 gönderiyrorum bu kodlada yanmadı :S VB de bii sorun olsa desem o kadar anlamıyorum ama internettekilerle kodları karşılaştırdım mantık aynı ama çalışmıyor
Benimle gel arkadaşım gel ve sonu gor

SpeedyX

şimdi farkettim, baud hızın farklı

nuri2978

yine olmadı ustam yaww :S neyse artık yaaa okulların acılmasını bekleyecem hocaya bizzat gidip sorsam görsel olarak en iyisi olacak benim sanırm haberleşmede problem var.. :S Teşekkur ederim yinede
Benimle gel arkadaşım gel ve sonu gor

SpeedyX

bu gidişle olacak gibi değil zaten
kitapları boşuna yazmıyorlar.

nuri2978

kitapdaki örneği yaptım ama olmadı :S
Benimle gel arkadaşım gel ve sonu gor

iyonosfer

#int_rda   // RX ucuna veri gelince meydane gelen kesme
void serihaberlesme_kesmesi ()
{
  if(getc() == 0x05)
  {
         output_high(PIN_B0);
   }    

 if(getc() == 0x06)
  {
         output_low(PIN_B0);
   }    

}


pc den 5 değeri gelince ledi açar 6 değeri gelince kapatır. (karakter olarak 5 ve 6 değerleri değil. 5 ve 6 degerlerini PC'den karakter olarak gonderiyorsan
if(getc()=='5')
if(getc()=='6')
şeklinde kullanmalısın

ana kodda şu değişiklkleri yap (puts(22) olmasın)

enable_interrupts(GLOBAL);
enable_interrupts(INT_RDA);
while(1){
}
Blog Sayfam: www.teknobakis.com

aliveli

if(getc()=='53')  olarak dene birde buradaki örnektende faydalanabilirsin