Ðề tài: Giao tiếp UART
View Single Post
Old 08-10-2006, 11:01 AM   #1
hoangminh1234
Đệ tử 1 túi
 
Tham gia ngày: Nov 2005
Bài gửi: 23
:
Giao tiếp UART

Em đang viết chương trình giao tiếp giữa hai con 16f877 với mục đích là truyền hàng loạt byte từ con này sang con kia. Chương trình truyền được rồi và hiển thị khá đúng theo ý muốn. Nhưng cái hạn chế quá lớn của chương trình là tốc độ truyền chậm quá. Mỗi lần truyền một byte xong thì phải delay_ms(250) thì con tớ mới nhận được đúng.Mình đã thử nhiều số khác nhau nhưng khi giảm nhỏ xuống còn delay_ms(200) thì không nhận được nữa. Các huynh (đặc biệt là anh LaMuaThu ) cho xin ý kiến nhé
sau đây là .chương trình con master
Code:
/*chuong trinh 1 MASTER  MASTER MASTER MASTER MASTER MASTER MASTER MASTER
xuat du lieu tu master ra cong noi tiep              MASTER MASTER MASTER
muc dich: truyen du lieu tu pic nay sang pic khac    MASTER MASTER MASTER
MASTER MASTER MASTER MASTER MASTER MASTER MASTER MMMMMASTER MASTER MASTER*/
//MASTER SAU KHI TRUYEN MOT SO BYTE NHAT DINH THI SAU DO KO  LAM GI CA
#include <16F877a.h>
#fuses HS, NOWDT, NOLVP, XT
#use delay(clock=4000000)
#use rs232(baud=19200,xmit=pin_c6,rcv=pin_c7)
byte data_out[8]={0x55,0Xaa,0X88,0x11,0x22,0x33,0x44,0x55};

void main()
{            set_tris_b(0x00);set_tris_d(0);

           output_d(data_out[0]);//1
            putc(data_out[0]);
            delay_ms(250);

            output_d(data_out[1]);//2
            putc(data_out[1]);
            delay_ms(250);

           output_d(data_out[2]);//3
            putc(data_out[2]);
            delay_ms(250);

            output_d(data_out[3]);//4
            putc(data_out[3]);
            delay_ms(250);

           output_d(data_out[4]);//5
            putc(data_out[4]);
            delay_ms(250);

            output_d(data_out[5]);//6
            putc(data_out[5]);
            delay_ms(250);

           output_d(data_out[6]);//7
            putc(data_out[6]);
            delay_ms(250);

            output_d(data_out[7]);//8
            putc(data_out[7]);
            delay_ms(250);
            }
rồi đến chương trình slave
Code:
//SLAVE NHAN DU LIEU VA SAU DO CAT VAO CAC THANH GHI DA DUOC DINH SAN
   #include <16F877A.h>
   #fuses HS, NOWDT, NOLVP, XT
   #use delay(clock=4000000)
   #use rs232(baud=19200,xmit=pin_c6,rcv=pin_c7)
   int8 rcservo[8];
   int8 next_in=0;

void main() {
   set_tris_a(0);output_a(63);
   set_tris_d(0);output_d(255);delay_ms(20);
   for(;;){
      if(kbhit()){
          if(next_in==7) { goto xuatdulieu;}
            rcservo[next_in]=getch();
            next_in++;
    }

   }

xuatdulieu:
   delay_ms(100);
   for(;;){
   output_d(rcservo[0]);output_a(1);delay_ms(1550);
   output_d(rcservo[1]);output_a(2);delay_ms(1550);
   output_d(rcservo[2]);output_a(3);delay_ms(1550);
   output_d(rcservo[3]);output_a(4);delay_ms(1550);
   output_d(rcservo[4]);output_a(5);delay_ms(1550);
   output_d(rcservo[5]);output_a(6);delay_ms(1550);
   output_d(rcservo[6]);output_a(7);delay_ms(1550);
   output_d(rcservo[7]);output_a(8);delay_ms(1550);
}}
sơ đồ mô phỏng proteus

/*muc dich cua ham output_a:
a=1 => byte thu nhat dang hien thi ra portd
a=2 => byte thu hai dang hien thi ra portd
a=3 => byte thu ba dang hien thi ra portd
....
delay de co the quan sat duoc su thay doi nay
*/
Hình Kèm Theo
File Type: gif hinhve.GIF (89.3 KB, 427 lần tải)
File Kèm Theo
File Type: rar proteus.rar (14.6 KB, 696 lần tải)

thay đổi nội dung bởi: hoangminh1234, 09-10-2006 lúc 02:26 PM.
hoangminh1234 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn