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

                              • Andrea14
                                Vấn đề về tốc độ quay
                                bởi Andrea14
                                Chào mọi người,

                                Tôi muốn mô phỏng sự thay đổi các mùa bằng cách từ từ nghiêng một quả địa cầu 16 inch bằng một động cơ bước nhỏ. Một động cơ bước khác sẽ quay quả địa cầu theo thời gian thực. Hệ thống truyền động...
                                hôm nay, 12:42
                              • bqviet
                                Trả lời cho Đấu tắt điện cho máy tính bảng
                                bởi bqviet
                                Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
                                06-12-2025, 17:17
                              • nguyendinhvan
                                Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
                                bởi nguyendinhvan
                                Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
                                05-12-2025, 19:59
                              • afrendly
                                Trả lời cho Đấu tắt điện cho máy tính bảng
                                bởi afrendly
                                Có vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
                                04-12-2025, 01:27
                              Đang tải...
                              X