RS232 üzerinden PIC16F84A'ya komut göndeririken

Başlatan Digimensch, 28 Ağustos 2006, 02:22:25

Digimensch

Ben Com1 üzerinden PIC16F84A'ya  1 ve 2 sayilarini gönderip
bu gelen sayiya göre  RB1 bitine bagli olana Led lambayi yakip sönürmek istiyorum.
Söyle bir Kod yazdim derleniyor ama Kod'u ISIS'de denedim calismiyor.
#if defined(__PCM__)
#include <16F84.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)
#use rs232(baud=9600,rcv=PIN_A2,xmit=PIN_A2)
/*--------------------------------------------*/

#define LED_ON output_low(PIN_B1);
#define LED_OFF output_high(PIN_B1);


void main(){
int gelen;

while(true);
{
   gelen=getch();

   if ( gelen == 1 ){
   LED_ON;
   return;
   }
   else
   if ( gelen == 2 ){
  LED_OFF;
   return;
   }


}
}


Acaba Kodun neresinde hata var?
Yardimlarinizi bekliyorum

SpeedyX

Öncelikle şunu bilmeniz gerekiyor;
#use rs232(baud=9600,rcv=PIN_A2,xmit=PIN_A2)
rx ve tx pinleri,arada özel bir donanım olmadıkça aynı pin olmaz.

Digimensch

Yukardaki yazimda hatanin oldugu yeri belirttim.
Ben RS232 den sadece gönderme yapacagim.
Öyleyse sadece yöle yapsam olurmu?
#use rs232(baud=9600,rcv=PIN_A2)

SpeedyX

#include <16F84a.h>
#fuses XT,NOWDT,NOPROTECT
#use delay(clock=4000000)
#use rs232(baud=9600,rcv=PIN_A0,xmit=PIN_A1)

#byte porta = 5
#byte portb = 6
#bit  led = portb.1

char gelen;

void main() {
     SET_TRIS_A(0x01);
     SET_TRIS_B(0x00);
     porta=portb=0;
     led=1;
     printf("Start\n");
     for(;;) {
        gelen=getc();
        printf("%c",gelen);
        if (gelen=='1') {
           led=0;
        }
        else if (gelen=='2') {
           led=1;
        }
     }
}

Bu şekilde çalışıyor, bazı pinleri değiştirdim.

http://rapidshare.de/files/31003608/Basit_rs232.rar.html

#use rs232(baud=9600,rcv=PIN_A0)
şeklinde de olur tabi, birşey gönderilmeyecekse.

Digimensch

Merak ettigim bir konu var.
Simdi bu yukardaki Kodu  CCS kodu yani CCS'nin Kod icinde kendi özel Funktionlari var.
Peki ben bunu HI-Tech Compiler ile derlemek istedigim zaman tam Ansii C++ kodu olarak yazmam mi gerekli?
Bu Kodu HI-Tech ile nasil derlerim ?
Nasil yazilmali ?

SpeedyX

Assembly gibi düşüneceksiniz.
#use rs232 yok, getc() yok, printf() yok.
işlemcinin uart modülü varsa, gerekli ayarlamaları yaparak uart ı kurup veri transferi gerçekleştireceksiniz, yoksa kendi rutinlerinizi yazacaksınız.