Picproje Elektronik Sitesi

DERLEYİCİLER => PIC C => Konuyu başlatan: askin - 20 Mart 2005, 00:03:10

Başlık: hata nerede anlayamadım "usart"
Gönderen: askin - 20 Mart 2005, 00:03:10
Merhaba,
Aşağıdaki programı derlediğimde rs232 üzerinden veri gönderebilyorum yani "void putrsUSART(const char *data)" fonksiyonu hatasız çalışıyor fakat veri almaya çalıştığımda program hyperterminalden gönderdiğim bilgiyi almıyor. Hata nerede anlayamadım, yardımcı olursanız sevinirim.

Alıntı Yap
#include   <pic.h>

void Setup(void);
void putrsUSART(const char *data);

char udata;


const char ready[] = "\n\rREADY>";

void main(void)
{
Setup();
putrsUSART(ready);
while(1)
{
   if(RCIF==1)
     {
      RCIF=0;
        udata = RCREG;
      if(udata=='x')
         putrsUSART("received x");
   }
}
}

void Setup(void)
{
   TRISC = 0xdb;
   SPBRG = 15;                  // 19200 baud @ 20MHz
   TXSTA = 0x20;               // setup USART transmit
   RCSTA = 0x90;               // setup USART receive

}
void putrsUSART(const char *data)
{
   do
   {            
      while(!(TXSTA & 0x02));
      TXREG = *data;
   } while( *data++ );
}
Başlık: hata nerede anlayamadım "usart"
Gönderen: ahmetu - 20 Mart 2005, 02:00:29
RCIF=0;
udata = RCREG;

satırlarını

udata = RCREG;
RCIF=0;

şeklinde değiştirirsen sanırım olay çözülür, önce RCREG registeri okuyup ardından RCIF'i sıfırlıyorsun önce sıfırlarsan RCREG'de birşey kalmıyor.
Başlık: hata nerede anlayamadım "usart"
Gönderen: james - 20 Mart 2005, 02:21:09
RCIF sadece okunabilir bir flag oldugundan RCREG i okuduktan sonra kendiliginden sifirlanacaktir.RCIF=0 satirini kaldirirsan problem çözülür
Başlık: hata nerede anlayamadım "usart"
Gönderen: askin - 20 Mart 2005, 10:08:23
RCIF=0;
satırını tamamen kaldırdım fakat bir değişiklik olmadı.
Başlık: hata nerede anlayamadım "usart"
Gönderen: james - 20 Mart 2005, 14:57:14
setup ayarlarinda eksiklik göremedim.devreni bi kontrol et veya buraya koy bakalim
Başlık: hata nerede anlayamadım "usart"
Gönderen: askin - 20 Mart 2005, 15:16:16
Aşağıdaki program sorunsuz çalışıyor

#include <pic.h>

void Setup(void);
void putrsUSART(const char *data);

unsigned char udata;

const char ready[] = "\n\rREADY>";

void main(void)
{
Setup();
putrsUSART(ready);
while(1)
{
if(RCIF==1)
  {
udata = RCREG;
putrsUSART(&udata);
}
}
}

void Setup(void)
{

TRISC7   = 1;
TRISC6   = 0;
SPBRG = 15; // 19200 baud @ 20MHz
TXSTA = 0x20; // setup USART transmit
RCSTA = 0x90; // setup USART receive

}
void putrsUSART(const char *data)
{
do
{
while(!(TXSTA & 0x02));
TXREG = *data;
} while( *data++ );
}



fakat if(udata=='x')
putrsUSART("received x");

satırlarını eklediğimde hyperterminalden gönderdiğim x karakterini okumuyor.[/quote]
Başlık: hata nerede anlayamadım "usart"
Gönderen: SpeedyX - 20 Mart 2005, 23:29:55
hoca bide şunu bi dene. önceden h-tech takılırken bununla bir uygulama yapmıştım. veriyi pc ye gönderdim sadece. çalışıyordu. ama almayı denememiştim hiç. daha sonradan da ccs ye geçtim zaten. bence çalışır.
#include <pic.h>
#include <conio.h>

/* Transmit and Receive port bits */

static bit TxData @ (unsigned)&PORTA*8+3; /* bit3 in port A */
static bit RxData @ (unsigned)&PORTA*8+2; /* bit2 in port A */
#define INIT_PORT TRISA = 7 /* set up I/O direction */

/* Xtal frequency */

#define XTAL 4000000

/* Baud rate */

#define BRATE 9600

/* Don't change anything else */

#define DLY 3 /* cycles per null loop */
#define TX_OHEAD 13 /* overhead cycles per loop */
#define RX_OHEAD 12 /* receiver overhead per loop */

#define DELAY(ohead) (((XTAL/4/BRATE)-(ohead))/DLY)

void
putch(char c)
{
unsigned char dly, bitno;

bitno = 11;

INIT_PORT;
TxData = 0; /* start bit */
bitno = 12;
do {
dly = DELAY(TX_OHEAD); /* wait one bit time */
do
/* nix */ ;
while(--dly);
if(c & 1)
TxData = 1;
if(!(c & 1))
TxData = 0;
c = (c >> 1) | 0x80;
} while(--bitno);
}

char
getch(void)
{
unsigned char c, bitno, dly;

for(;;) {
while(RxData)
continue; /* wait for start bit */
dly = DELAY(3)/2;
do
/* nix */;
while(--dly);
if(RxData)
continue; /* twas just noise */
bitno = 8;
c = 0;
do {
dly = DELAY(RX_OHEAD);
do
/* nix */;
while(--dly);
c = (c >> 1) | (RxData << 7);
} while(--bitno);
return c;
}
}

char
getche(void)
{
char c;

putch(c = getch());
return c;
}
Başlık: hata nerede anlayamadım "usart"
Gönderen: raprap17 - 31 Mart 2006, 18:21:19
Kod:
Alıntı Yap
void putrsUSART(const char *data)
{
  do
  {            
     while(!(TXSTA & 0x02));
     TXREG = *data;
  } while( *data++ );
}  

böyle yapmakla gonderilen data sürekli ekrana yazıyor.
Misal: "ali" stringini parametre olarak gonderince çıktı şöyle oluyo.
alialialialialialialiali...
bunu birkez yazdırmanın yolu nedir?
örnek çıktı: ali
Başlık: Ynt: hata nerede anlayamadım "usart"
Gönderen: izwirlee_35 - 22 Ekim 2010, 15:12:37
bu sorunla defalarca karşılaştım ve bazen şöle aştım
void main ()
{
....
seri_gonder("ali");while(1);
}

bazense
void main ()
{
....
seri_gonder("ali");while(1);

      do{
         if(kontrol_1)seri_gonder("ali");
         else seri_temizle();
          }

}


yardım edebilmişimdir umarım .kolay gelsin