Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

usart haberleşme hata

Başlatan ugur20, 30 Nisan 2011, 22:10:04

ugur20

pc ye göndermek istediğim karakter ve ya pic den almak istediğim karakter doğru gelmiyor . farklı karakterler gelip gidiyor . acaba nerede hata yapıyorum?

#include "htc.h"
#include "delay.h"
#include "pic18.h"
#include "usart.h"
void gecikme(void)
{int e;   
for(e=17;e>1;e--)
{DelayUs(2500);

return;
}
}

void
putch(unsigned char byte)
{
 
   while(!TXIF);
       continue;
     TXREG = byte;
     
   return ;
}


void usart_init(void)
{
 

TXSTA = 0b00100100;
SPBRG = 25;
RCSTA = 0b10010000;


return;
}
void main(void){
float volt;
int a=200,b=600;
char f=3,h='d';
TRISA=0x01;
TRISC=0x00;
TRISC7 = 1;
TRISC6 = 0;
TRISB=0x00;
RCIE=1;
   PEIE=1;
   GIE=1;
usart_init();

ADCON1=0x8E;
ADCON0=0x41;
for(;;)
{


ADCON0=0x45;
while((ADCON0 &4) !=0);

volt=((256*ADRESH +ADRESL));

gecikme();
if(volt<a)
{RC1=0;
   RC2=0;
putch('a');
}
if(volt>b)
{RC1=1;
   RC2=1;
}
if(a<volt && volt<b)
{RC1=1;
   RC2=0;
   
gecikme();
}
}
}void interrupt kesme(void)
{
   if ((RCIE)&&(RCIF)) 
   {   
      unsigned char w;
      w = RCREG;
       putch(w);
      
      RCIF=0;
      RCIE=1;
       
   }
}

mozkan87

Usart pinlerini input olarak tanımlayın ve baudrate ayarlarınızı kontrol edin. Ve daha ayrıntılı bilgi verin.

ugur20

usart pinlerinden c7 set c6 da sıfırlanıyor diye biliyorum. baud rate hızı da asynchronous mode 1 olduğu ve 4mhz kristal de 9.6kpbs 25 değerine karşılık geldiği için spbrg yi de 25 yaptım.


mozkan87

void usart_init(void)
{
  SPBRG = 25;
TXSTA = 0b00100100;
RCSTA = 0b10010000;
TRISC7 = 1;
TRISC6 = 0;
return;
}


init fonsiyonunu yukarıdaki gibi
TRISC=0xC0;
olarak değiştirip deneyin birde. Bu şekilde ben sorunsuz 18f452 için çalıştırmıştım.
Birde delay kütüphanesinde DelayUs(2500) tanımlı mı? gözüme takıldıda. Char tipi tanımlı olmasın.

ugur20

biraz daha düzeldi gibi ama gönderdiğim karakterin hex karşılığına denk gelen desimal harf geliyor gibime geldi karakterin aynısını gelmesi için ne yapmalıyım

yamak

Alıntı Yapvoid gecikme(void)
{int e;   
for(e=17;e>1;e--)
{DelayUs(2500);

return;
}
}
bu fonksiyoda return bu şekilde kullanırsanız for döngüsü bir kere döner sonra fonksiyondan çıkar.
Alıntı Yapvoid
putch(unsigned char byte)
{
 
   while(!TXIF);
       continue;
     TXREG = byte;
     
   return ;
}
bu fonksiyonda da continue'yi burda neden kullandığınızı anlamadım.
void usart_gonder(unsigned const char *veri)
{
while(*veri){
TXREG=(*veri++);
while(!TXIF);//BU SATIR OLMAZSA HARFLER TAM GÖNDERİLMİYO...
}
TXIF=0;
}

bu şekilde bi fonksiyon yazabilirsiniz.Hem de içine yazdığınız cümleyi direkt olarak gönderir uarttan.Örneğin" usart_gonder("gonderildi");
gibi.

mozkan87

#include <stdio.h>
ekleyin
Ayrıca htc.h veya pic18.h dosyalarından sadece birini include etmeniz yeterli olacaktır.

ugur20


void usart_gonder(unsigned const char *veri)
{
while(*veri){
TXREG=(*veri++);
while(!TXIF);//BU SATIR OLMAZSA HARFLER TAM GÖNDERİLMİYO...
}
TXIF=0;
}

bu şekilde bi fonksiyon yazabilirsiniz.Hem de içine yazdığınız cümleyi direkt olarak gönderir uarttan.Örneğin" usart_gonder("gonderildi");
gibi.
[/quote]

bu komutlar hata veriyor. diğer dediğin yerleri düzelttim gözden kaçırmışım. teşekkürler

yamak

hatanın ne olduğunu yazar mısın?

ugur20

Warning [357] C:\Users\YILDIRIM\Desktop\AYDNLATMAMATREKS\asdas.c; 78.15 illegal conversion of integer to pointer

   usart_gonder("deneme") yaptığım zaman yukarıdaki gibi bir alarm veriyor ve alakasız karakterler gösteriyor hyper terminal de

yamak

Kütüphane dosyasına da bu fonksiyonu eklediniz mi?eklemeyi unutmuşsanız onadan veriyo olabilir bu hatayı

ugur20

kütüphane olarak değil de direkt olarak programa yazdım fonksiyon olarak
zaten hatada işaretçilerin kullanımı ile ilgili bi hatadan bahsediyor .

yamak

Yani ben bu şekilde kullanıyorum bi sorun yaşamıyorum hatta sizin için yine program derledim böyle bi hata oluyo mu diye ama vermedi.acaba gözden kaçırdığınız bişey mi var böyle bir hata vermesi şöyle bi hata yapılması lazım.Örneğin
int a=3;
usart_gonder(a);
gibi acaba buna benzer bir hata mı var programda

ugur20

#include "htc.h"
#include "delay.h"
#include "usart.h"
#include "stdio.h"
void gecikme(void)
{int e;   
for(e=17;e>1;e--)
{DelayUs(2500);


}return;
}

void usart_gonder(unsigned const char *veri)
{
while(*veri)
   {
TXREG = (*veri++);
while(!TXIF);
}
TXIF=0;return;
}




void usart_init(void)
{
  SPBRG = 25;
TXSTA = 0b00100100;
RCSTA = 0b10010000;
TRISC7 = 1;
TRISC6 = 0;
return;
}


void main(void){
float volt;
int a=200,b=600;
//char f=e,h=r;
TRISA=0x01;
TRISC=0xC0;

PORTC=0;
RCIE=1;
   PEIE=1;
   GIE=1;
usart_init();

ADCON1=0x8E;
ADCON0=0x41;
for(;;)
{


ADCON0=0x45;
while((ADCON0 &4) !=0);

volt=((256*ADRESH +ADRESL));

gecikme();
if(volt<a)
{RC1=0;
   RC2=0;
usart_gonder("light");
gecikme();
}
if(volt>b)
{RC1=1;
   RC2=1;
   gecikme();
   usart_gonder("dark");
}
if(a<volt && volt<b)
{RC1=1;
   RC2=0;
usart_gonder("sdark");   
gecikme();
}
}
}void interrupt kesme(void)
{
   if ((RCIE)&&(RCIF)) 
   {   
      unsigned char w;
      w = RCREG;
      usart_gonder("receive");
      
      RCIF=0;
      RCIE=1;
       
   }
}

program en son bu şekile herhangi bir hata yada uyarı vermiyor fakat göndermek istediğim kelimeler gitmiyor rastgele karakterler gidiyo bilgisayara

yamak

Bilgisayarınız baud hızını 9600 olarak ayarlamayı unutmuş olabiir misiniz? Genele bu tip hatalar bundan kaynaklanıyo