Merhaba ,
Aşagıdaki kodda seri haberlerşme yapıyorum gelen karakterleri pc ye gonderiyorum fakat gelen karakterler anlamsız..
fprintf(DIGERPIC,"ABCD%c%c",13,10);
delay_ms(200);
fgets(Gelen,SAYAC);
delay_ms(200);
fprintf(PC,"%S",Gelen);
Aşağıdaki kodda seri porttan gelen bilgi int_rda ile içeriden buffer dizisine alınır daha sonrada ekrana geri yazdırılır.
#include <16F877.H>
#fuses XT, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
#define BUFFER_SIZE 32
BYTE buffer[BUFFER_SIZE];
BYTE next_in = 0;
BYTE next_out = 0;
#int_rda
void serial_isr() {
int t;
buffer[next_in]=getc();
t=next_in;
next_in=(next_in+1) % BUFFER_SIZE;
if(next_in==next_out)
next_in=t; // Buffer full !!
}
#define bkbhit (next_in!=next_out)
BYTE bgetc() {
BYTE c;
while(!bkbhit) ;
c=buffer[next_out];
next_out=(next_out+1) % BUFFER_SIZE;
return(c);
}
void my_get_string(char* s, unsigned int8 max) {
unsigned int8 len;
char c;
--max;
len=0;
do {
//c=getc(); // Commented out.
c = bgetc(); // Call bgetc() instead of getc()
if(c==8) { // Backspace
if(len>0) {
len--;
putc(c);
putc(' ');
putc(c);
}
} else if ((c>=' ')&&(c<='~'))
if(len<=max) {
s[len++]=c;
putc(c);
}
} while(c!=13);
s[len]=0;
}
#define STRING_SIZE 40
//===================================
void main()
{
char input_str[STRING_SIZE];
enable_interrupts(int_rda);
enable_interrupts(global);
while(1)
{
printf("Enter a string of text: ");
my_get_string(input_str, STRING_SIZE-1);
printf("\n\rYou typed: %s \n\r\n\r", input_str);
}
}
Burada ise en sade hali yer almaktadır
#use rs232(Baud=19200, Xmit=PIN_C6, Rcv=PIN_C7)
void main()
{
char c;
while(1)
{
c = getc();
putc(c);
}
}
#use delay(clock=20000000)
#fuses NOWDT,WDT128,HS, NOPROTECT, NOOSCSEN, BROWNOUT, BORV20, NOPUT, STVREN, NODEBUG, LVP, NOWRT, NOWRTD, NOWRTB, NOWRTC, NOCPD, NOCPB, NOEBTR, NOEBTRB
#use rs232(baud=300,parity=E,xmit=PIN_C6,rcv=PIN_C7,bits=7,stream=SAYAC)
#use rs232(baud=9600,parity=N,xmit=PIN_B1,rcv=PIN_B0,bits=8,stream=PC)
300 baudta bağlantı kuruyorum fakak gelen dataları 300 de lıp 9600 da pc ye gonderince sacma sapan karakterler geliyor
bu işi nasıl çözerim.......