PDA

View Full Version : [giúp] Giao Tiếp truyền thong RS232 giửa 2 PIC16f877a


lambaotrung
13-03-2012, 05:41 PM
hiện em đang làm bài tập về các cổng giao tiếp.... cơ bản trước tiên là làm RS232.

như thế này...

hiện em kết 2 con pic với truyền thông RS232.

múc đích : truyền 1 chuổi, hay 1 biến hoặc cùng lúc vừa chuổi vừa biến.

từ con PIC 1 đến còn thứ PIC 2.

Bài Tập 1: truyền 1 chuyển như chử " picvienam.com " từ con pic thứ nhất ( PIC 1 ) đến PIC thứ 2 ( PIC 2 ) xong rùi hiển thị lên LCD. chỉ thế thui.


hiện mạch của em mốc nói 2 cổng rs232 như sao:

chân Xmit( PIC 1) nối với SCV( PIC 2)/
chân SCV (PIC 1) nói với Xmit ( PIC 2).

ko biết như vậy có dc ko

con dây là đoạn code của 2 con PIC của em

CHƯƠNG TRÌNH BIÊN DỊCH KO BÁO LỔI NHƯNG NÓ KO HIỂU HAY SAO MÀ KO HIỆN CHỬ "HELLO!" LEN LCD. HIX BÁC GIÚP EM.

CODE PIC 1:

///////////////////////////////////////////////////


#include "E:\MACH DIEN\PIC\Khaibao\khaibao.c" // HÀM KHAI BÁO CỦA EM.
#use rs232(baud=9600,parity=N,xmit=PIN_C6,RCV=PIN_C7)
int i;
char string[10];
void main()
{
strcpy(string,"hello!"); //COPY chử " hello! " vào chuổi string
puts(string); //gởi chuổi string đi.
WHILE(1)
{
}
}


//////////////////////////////////////////////////////////////////

CODE PIC 2
////////////////////////////
#include "E:\MACH DIEN\PIC\khaibao\khaibao.c" HÀM KHAI BÁO CỦA EM.
//#include "string.h"
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)

char string[30];
int i;

void main()
{

set_tris_e(0);
set_tris_d(0);

gets(string); ĐỌC RS232 GÁN NÓ VÀO CHUỔI STRING CỦA PIC 2.
khoitao();

portd=0x80;
lenh();

for(i=0;i<10;i++)
{portd=string[i]; ĐỬA CHUỔI STRING LÊN LCD
xuat();
}
}

nguyenhung1811
25-03-2012, 10:04 PM
mình nghĩ như thế này
TX:
printf("Hello");

như thế là đủ, k cần phải dùng lệnh strcpy đâu.

RX thì nếu ở phần ngắt Rx UART dùng như thế này:

nhan=getc();//
lcd_putc(nhan);//cai ni fai khai báo lcd library

nguyenhung1811
25-03-2012, 10:05 PM
mình nghĩ như thế này
TX:
printf("Hello");

như thế là đủ, k cần phải dùng lệnh strcpy đâu.

RX thì nếu ở phần ngắt Rx UART dùng như thế này:

nhan=getc();//
lcd_putc(nhan);//cai ni fai khai báo lcd library

nguyenhung1811
25-03-2012, 10:07 PM
nếu bạn cần file mô phỏng thì về nhà mình sẽ gửi cho bạn

lambaotrung
25-04-2012, 11:57 PM
uh gởi mình đi.... mình cần để tham khảo................. cảm ơn nhé

toila83
15-01-2013, 11:18 PM
hiện em đang làm bài tập về các cổng giao tiếp.... cơ bản trước tiên là làm RS232.

như thế này...

hiện em kết 2 con pic với truyền thông RS232.

múc đích : truyền 1 chuổi, hay 1 biến hoặc cùng lúc vừa chuổi vừa biến.

từ con PIC 1 đến còn thứ PIC 2.

Bài Tập 1: truyền 1 chuyển như chử " picvienam.com " từ con pic thứ nhất ( PIC 1 ) đến PIC thứ 2 ( PIC 2 ) xong rùi hiển thị lên LCD. chỉ thế thui.


hiện mạch của em mốc nói 2 cổng rs232 như sao:

chân Xmit( PIC 1) nối với SCV( PIC 2)/
chân SCV (PIC 1) nói với Xmit ( PIC 2).

ko biết như vậy có dc ko

con dây là đoạn code của 2 con PIC của em

CHƯƠNG TRÌNH BIÊN DỊCH KO BÁO LỔI NHƯNG NÓ KO HIỂU HAY SAO MÀ KO HIỆN CHỬ "HELLO!" LEN LCD. HIX BÁC GIÚP EM.

CODE PIC 1:

///////////////////////////////////////////////////


#include "E:\MACH DIEN\PIC\Khaibao\khaibao.c" // HÀM KHAI BÁO CỦA EM.
#use rs232(baud=9600,parity=N,xmit=PIN_C6,RCV=PIN_C7)
int i;
char string[10];
void main()
{
strcpy(string,"hello!"); //COPY chử " hello! " vào chuổi string
puts(string); //gởi chuổi string đi.
WHILE(1)
{
}
}


//////////////////////////////////////////////////////////////////

CODE PIC 2
////////////////////////////
#include "E:\MACH DIEN\PIC\khaibao\khaibao.c" HÀM KHAI BÁO CỦA EM.
//#include "string.h"
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)

char string[30];
int i;

void main()
{

set_tris_e(0);
set_tris_d(0);

gets(string); ĐỌC RS232 GÁN NÓ VÀO CHUỔI STRING CỦA PIC 2.
khoitao();

portd=0x80;
lenh();

for(i=0;i<10;i++)
{portd=string[i]; ĐỬA CHUỔI STRING LÊN LCD
xuat();
}
}

Mình nghĩ ở chương trình Slave nên sử dụng ngắt:
#include <LCD.c>
char string;
#INT_RDA
ngat()
{
gets(string);
}
void main()
{
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
lcd_init();
While(1)
{
lcd_gotoxy(2,1);
lcd_putc(string);
}
}