Thông báo

Collapse
No announcement yet.

Giao tiep voi Com

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Giao tiep voi Com

    E hiện đang làm bài nhận dữ liệu từ port 1 sau đó cho port 2.Khi đó port 2 nhận được tăng lên 1.Sau đó gửi qua COM,e lam code nay ma sao no ko chay ko biet,ai giup e zoi ! hichic

    Code:
     #include <at89x51.h>
    #include <stdio.h>
    
    //=========================
    unsigned char ch,abc;
    //==========================
    void SetupSerial()
    {
    SCON = 0x52; 	  //Che do 1: 8-bit UART, cho phep truyen   
    TMOD = 0x20;	  //timer 1 che do 2: 8-Bit tu dong nap lai.          
    TH1 = 0xfd ;	  //toc do 9600 baud                
    TL1 = 0xfd ;
    TI = 0;			  //co ngat nha^n.=0
    RI=0;			  // co ngat' truye^n =0
    TR1 = 1;	    // timer 1 run                           
    ES   =1;			 // cho phep ngat noi tiep 
    }
    //===========================
    void truyenthong(void) interrupt 4	  //Chuong trinh con dung ngat noi tiep
    {
    
    //	char ch;
    	if(RI)
    	{
    	
    		ch = P2 ;
    		RI=0;
    		SBUF=ch; // truyen nguoc lai
    	    ch=SBUF; //nhan ky tu ve
    
        }
    }
    	
    //=========================
    void main ()\
    { 
     P1=0xff;
     P2=P1+1;
     SetupSerial();	  //Khoi tao cac thong so cho truyen thong noi tiep
     EA = 1;			  //Cho phep ngat nhung chi? có ngat noi tiep duoc dung trong code nay
     
      
      
    }

  • #2
    hay đấy.nhưng bạn nói rõ yêu cầu lại đi

    Comment


    • #3
      #include <at89x51.h>
      #include <stdio.h>
      char x;
      void main(void){
      SCON = 0x52; //Che do 1: 8-bit UART, cho phep truyen
      TMOD = 0x20; //timer 1 che do 2: 8-Bit tu dong nap lai.
      TH1 = 0xfd ; //toc do 9600 baud
      TL1 = 0xfd
      TR1=1;
      While(!TI);
      TI=0;
      SBUF=x;
      }
      day la chương trình truyền 1 byte dư liệu trong biến x.bạn tham khảo xem co giúp gi dc bạn không

      Comment


      • #4
        Nguyên văn bởi cobedangyeu Xem bài viết
        E hiện đang làm bài nhận dữ liệu từ port 1 sau đó cho port 2.Khi đó port 2 nhận được tăng lên 1.Sau đó gửi qua COM,e lam code nay ma sao no ko chay ko biet,ai giup e zoi ! hichic
        Bạn nói rõ yêu cầu lại xem

        Comment


        • #5
          Thực ra bài tập của e là truyền dữ liệu giữa 2 vdk.E đã gửi được từ PC1 -> VDk1 -> VDK2 -> PC2.Từ PC1->Vdk1 e gửi được dữ liệu rồi,cái này gửi ra màn hình LCD nối tiếp.Từ Vdk1 nối với vdk2 bằng port 2->port 1.Dữ liệu gửi qua thì thấy có mà giờ m gửi ra cổng nối tiếp hiển thị lên LCD thay vì lên máy tính PC2.Dưới là code cho VDK1 :
          #include <at89x51.h>
          #include <stdio.h>
          //=========================

          //=========================
          unsigned char ch;
          //==========================
          void SetupSerial()
          {
          SCON = 0x50; //Che do 1: 8-bit UART, cho phep truyen
          TMOD = 0x20; // timer 1 che do 2: 8-Bit tu dong nap lai.
          TH1 = 0xfd ; // toc do 9600 baud
          TL1 = 0xfd ;
          TI = 0; // co ngat nha^n.=0
          RI=0; // co ngat' truye^n =0
          TR1 = 1; // timer 1 run
          ES =1; // cho phep ngat noi tiep
          }
          //===========================
          void truyenthong(void) interrupt 4 //Chuong trinh con dung ngat noi tiep
          {
          char ch;
          if(RI)
          {
          RI=0;
          ch=SBUF; //nhan ky tu ve
          P2=SBUF; //lay du lieu tu thanh SBUF ra port 2
          SBUF=ch; // truyen nguoc lai
          }
          }
          //===========================
          void main()
          {
          SetupSerial(); //Khoi tao cac thong so cho truyen thong noi tiep
          EA = 1; //Cho phep ngat nhung chi? có ngat noi tiep duoc dung trong code nay

          }

          VDK2 có code :
          #include <at89x51.h>
          #include <stdio.h>

          //=========================
          unsigned char ch,abc;
          //==========================
          void SetupSerial()
          {
          SCON = 0x52; //Che do 1: 8-bit UART, cho phep truyen
          TMOD = 0x20; //timer 1 che do 2: 8-Bit tu dong nap lai.
          TH1 = 0xfd ; //toc do 9600 baud
          TL1 = 0xfd ;
          TI = 0; //co ngat nha^n.=0
          RI=0; // co ngat' truye^n =0
          TR1 = 1; // timer 1 run
          ES =1; // cho phep ngat noi tiep
          }
          //===========================
          void truyenthong(void) interrupt 4 //Chuong trinh con dung ngat noi tiep
          {

          // char ch;
          if(RI)
          {

          ch = P2 ;
          RI=0;
          SBUF=ch; // truyen nguoc lai
          ch=SBUF; //nhan ky tu ve

          }
          }

          //=========================
          void main ()\
          {
          P1=0xff;
          P2=P1+1;
          SetupSerial(); //Khoi tao cac thong so cho truyen thong noi tiep
          EA = 1; //Cho phep ngat nhung chi? có ngat noi tiep duoc dung trong code nay



          }

          Mạch proteus : http://www.mediafire.com/?3pzq2hs1uu0lqqh

          Comment


          • #6
            Thế rốt cuộc đã hoạt động chưa, post trên k thấy bạn ghi lỗi j` chắc bình thường rồi

            Comment


            • #7
              hihihi,m mới làm lại bây giờ có lỗi ngộ lắm,hichic bạn thử chạy mô phỏng là thấy liền hà
              VDK1 m đã chỉnh lại
              #include <at89x51.h>
              #include <REGX51.H>
              #include <stdio.h>
              //=========================

              //=========================
              unsigned char ch;
              //==========================
              void delay(unsigned int ms)
              {
              unsigned char i;
              unsigned int temp;
              for (i=0; i<=121; i++)
              {
              temp = ms;
              while (temp--) continue;
              }
              }
              //==========================
              void SetupSerial()
              {
              SCON = 0x50; //Che do 1: 8-bit UART, cho phep truyen
              TMOD = 0x20; // timer 1 che do 2: 8-Bit tu dong nap lai.
              TH1 = 0xfd ; // toc do 9600 baud
              TL1 = 0xfd ;
              TI = 0; // co ngat nha^n.=0
              RI=0; // co ngat' truye^n =0
              TR1 = 1; // timer 1 run
              ES =1; // cho phep ngat noi tiep
              }
              //===========================
              void truyenthong(void) interrupt 4 //Chuong trinh con dung ngat noi tiep
              {
              char ch;
              if(RI)
              {
              RI=0;
              ch=SBUF; //nhan ky tu ve
              P2=SBUF; //lay du lieu tu thanh SBUF ra port 2
              delay(2000) ;
              SBUF=ch; // truyen nguoc lai
              }
              }
              //===========================
              void main()
              {
              SetupSerial(); //Khoi tao cac thong so cho truyen thong noi tiep
              EA = 1; //Cho phep ngat nhung chi? có ngat noi tiep duoc dung trong code nay

              }

              vdk2 m cũng
              #include <at89x51.h>
              #include <stdio.h>

              //=========================
              //unsigned char ch;
              //==========================
              void SetupSerial()
              {
              SCON = 0x52; //Che do 1: 8-bit UART, cho phep truyen
              TMOD = 0x20; //timer 1 che do 2: 8-Bit tu dong nap lai.
              TH1 = 0xfd ; //toc do 9600 baud
              TL1 = 0xfd ;
              TI = 0; //co ngat nha^n.=0
              RI=0; // co ngat' truye^n =0
              TR1 = 1; // timer 1 run
              ES =1; // cho phep ngat noi tiep
              }

              /*
              //===========================
              void truyen(void) interrupt 4
              { while(!TI)
              {
              TI = 0 ;
              SBUF= P2;
              }
              while(!RI)
              {
              RI = 0 ;
              P2 = SBUF ;
              }
              }
              */
              //============================


              void truyenthong(void) interrupt 4 //Chuong trinh con dung ngat noi tiep
              {


              if(TI)
              {
              P2=P1+1;
              TI=0;
              SBUF=P2; // truyen nguoc lai tu vdk-> com-pc

              }
              }

              //=========================

              void main ()
              {

              SetupSerial(); //Khoi tao cac thong so cho truyen thong noi tiep
              EA = 1; //Cho phep ngat nhung chi? có ngat noi tiep duoc dung trong code nay

              }

              đã sửa lại


              Cái này có phần mềm tạo cổng COM ảo COM1 -> COM2 , COM3->COM4 PM: Configure Virtual Serial Port Driver
              Phần mềm gửi dữ liệu : Terminal ,chọn COM1

              M sẽ up 2 file hex cho bạn xem thử,hic ví dụ m gửi chữ A từ máy tính -> VDK1 -> VDK2 (tại c đây m cộng 1 thành chữ B) -> PC2
              Thực chất 2 PC m thay bằng 2 LCD mô phỏng
              Kết quả m ra chữ D,hichic mà ko phải 1 chữ mà là quá nhiều chữ luôn
              http://www.mediafire.com/?a75pmmafi6eoavj

              Comment


              • #8
                VDK1:
                ...
                ...
                void truyenthong(void) interrupt 4 //Chuong trinh con dung ngat noi tiep
                {char ch;
                if(RI)
                { RI=0;
                ch=SBUF; //nhan ky tu ve
                P2=SBUF; //lay du lieu tu thanh SBUF ra port 2
                SBUF=ch; // truyen nguoc lai
                }
                if(TI) TI=0;
                }
                void main()
                {SetupSerial(); //Khoi tao cac thong so cho truyen thong noi tiep
                EA = 1; //Cho phep ngat nhung chi? có ngat noi tiep duoc dung trong code nay
                while(1);
                }
                VDK2: không cần sử dụng chương trình ngắt serial.
                ...
                ...
                void main ()
                {SetupSerial(); //Khoi tao cac thong so cho truyen thong noi tiep
                while(1)
                {P1 = 0xFF;
                while(P1==0xFF);
                TI = 0;
                SBUF=P1+1;
                while(TI==0);
                }
                }

                Comment


                • #9
                  Bạn xem thêm bài của mình nhé, mình làm đã chạy thành công rồi
                  Đoạn code đầu tiên(#1) thì thêm vào cái khai báo cổng nhận P0=0xff; trước khi nhận dữ liệu từ port bên kia
                  http://www.dientuvietnam.net/forums/...F-li%E1%BB%87u

                  Comment


                  • #10
                    Nhờ mấy bạn m hiểu thêm được chút nữa,hihi.
                    Chắc tại m thiết lập port input và output mà ko gán giá trị cho nó hiểu nên nó mắc lỗi như trên, m sẽ sửa lạ ngay,và test lại...Hi

                    Comment


                    • #11
                      Nhưng sao m sửa lại thì hiển thị đúng chữ m cần đã sửa được lỗi chạy mãi ko dừng.Nhưng sao m gửi có 1 chữ sang vdk2 mà nó hiện hết LCD,có phải là do m chưa có ngắt nhận phải ko ?

                      Comment


                      • #12
                        Nguyên văn bởi cobedangyeu Xem bài viết
                        Nhưng sao m sửa lại thì hiển thị đúng chữ m cần đã sửa được lỗi chạy mãi ko dừng.Nhưng sao m gửi có 1 chữ sang vdk2 mà nó hiện hết LCD,có phải là do m chưa có ngắt nhận phải ko ?
                        Thì bạn cứ post code lên cho mọi ng xem mới biết chứ

                        Comment


                        • #13
                          M gui chu A tu VDK1 -> sang vdk2 hien : BBBBBBBBBBBBBBBBBBBBBB
                          (dung ra phai la hien 1 chu B thoi)

                          Comment


                          • #14
                            nó hiện 1 dãy chữ B là đúng , k hiện 1 dãy mới là sai cô pé Hương ah . Lí do : tại port của VDK 2 luôn có dữ liệu kí tự "B" . Dữ liệu này chưa đc xóa đi . Muốn xóa , Hương phải gửi kí tự báo hiệu kết thúc .

                            vd : B A --->Lúc đầu , vdk2 nhận đc kí tự B , nó cho hiện lên LCD , tiếp đó nó nhận đc kí tự A --> không xuất ra LCD nữa .

                            Comment


                            • #15
                              hihi, o.bj đây nè,ẩn ở mô mất tiu ah,ko giúp đỡ t zới

                              Comment

                              Về tác giả

                              Collapse

                              cobedangyeu Tìm hiểu thêm về cobedangyeu

                              Bài viết mới nhất

                              Collapse

                              Đang tải...
                              X