C de Rf

Başlatan x-nomek, 25 Kasım 2011, 02:13:04

x-nomek

Arkdaşlar PBP de HSERİN (komutu var USART olan picler için (16f628a,16f877)

Peki biz c de bunu nasıl kullanacaz. c de karşiliği nedir. bir örnekle anlatabilirmisiniz??

-Hasan-

Hangi C ' yi kullanıyorsunuz? Hi Tech, CCS...?

zakbay

C de usart kesmesinden yararlanacaksınız. usart kesmesi olunca ilgili register i okuyup işlemlerinizi gerçekleştireceksiniz.
hserin gibi basic komutları bunları bize hissettirmeden kendisi yapıyor
Tek dostum çalışmak...

x-nomek

Alıntı yapılan: -Hasan- - 25 Kasım 2011, 14:10:53
Hangi C ' yi kullanıyorsunuz? Hi Tech, CCS...?

ccs c  ye başladım

örnek verebilirmisniz.

-Hasan-

#4
#include <16f877.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES PUT                      //Power Up Timer
#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                    //Program memory not write protected
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOPROTECT                //Code not protected from reading

#use delay (clock=20000000)

#use rs232(baud=300,parity=N,xmit=PIN_D0,bits=8,stream=PORT1,invert) // Kullanılacak Pin, Baudrate ve Terseleme Olup Olmayacağı Durumuna Göre Ayarlanır

char preamble[]={0xAA,0xAA,0xAA,0xAA,0xAA,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF}; // Uyandırma Verisi
char senkron[]={0x20,0x30}; // Kontrol Byte ' ları Karşı Taraftan Bunlar Okunacak
char veri[]={"PIC"}; // PIC Karakterleri Karşı Tarafa Gönderilir


void main()
{

   puts(preamble);
   puts(senkron);
   puts(veri);

   while(1);

}


Bu şekilde olabilir. Eğer devreniz hazırsa deneyin. Karşı taraftan; 0x20, 0x30 sayılarını doğru şekilde aldıktan sonra "PIC" karakterlerini okumanız gerekir.

x-nomek

Sizden yararlanarak şöyle birşey yaptım ama çaliştiramadım nerede yanliş yaptım bilmiyorum ve bulamadım preample ve senkronu bilerek yazmadım

#include <16F628A.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOMCLR                     //Master Clear pin enabled
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES RESERVED                 //Used to set the reserved FUSE bits

#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_A3,rcv=PIN_A2,bits=8)


char veri1[]={"ABDULLAH"};
char veri2[]={"AZMİAZMİ"};


void main()
{

   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);
  output_b(0x00);

basla:
   delay_ms(100);
   putc(0x00); 
   putc(0x00);
   putc(0x00);
   putc(0x00);
 while (TRUE)
  if(!input(pin_b0))
 { 
   delay_ms(100);
  puts(veri1);
   
 }     
 else  
  if(!input(pin_b1))
 {
   delay_ms(100);
    puts(veri2);
 }
}




buda alicisi



#include <16F628A.h>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOMCLR                     //Master Clear pin enabled
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES RESERVED                 //Used to set the reserved FUSE bits
#byte TRISB = 0x86
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_A2,rcv=PIN_A3,bits=8)

void main()
{
   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);
   TRISB = 0 ;

while(TRUE)
  { 
         
 if(getch()=="ABDULLAH")
   { output_b(0b00000001);}
 else if(getch()=="AZMİAZMİ")
    {output_b(0b00000010); }
   else
    {output_b(0b00000000);}
    
  
  }}



Hatayı nerede  yapıyorum bulamadım

ertsen

Merhaba,
Bende tam Rf ve seri iletişimi öğrenmeye çalışıyorum. dün karakter göndermeyi başardım. ancak sizin örneğinizdeki gibi bir string ifadeyi ya gönderemedim yada alıcıda gelen veriyi gösteremedim. bildiğim kadarıyla puts komutuyla gönderiliyor ve gets komutuyla alınıyor ancak bendee çalışmadı. son çare olarak arka arkaya karakter gönderip bir döngüyle alıcıdan bu verileri aldım ancak bunun daha basit bir yolu olduğunu düşünüyorum.

Eğer bu konuda elinde temel bir kod olan arkadaşlar varsa , bana ve konuyu açan x-nomek arkadaşımıza çok yardımcı olursunuz. Şimdiden teşekkürler.