Thông báo

Collapse
No announcement yet.

Truyền dữ liệu từ PC xuống vi điều khiển

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

  • Truyền dữ liệu từ PC xuống vi điều khiển

    HTML Code:
    #include <18F4680.h>
    #FUSES NOWDT, H4,PUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, NOWRT
    #use delay(clock=40M)  
    #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
    #include <lcd420.c>           
    #use fast_io (c)
    //========================
    #INT_RDA
    void Receive_isr()
    {         
         c=getc();    
    }
    /////////////////////////////////////////////
    void main()
    {
    int8 c;
      set_tris_c(0x80);
     
      ENABLE_INTERRUPTS(INT_RDA);
      enable_interrupts(global);
      printf("Start: \n\r");
     
    while(1)
      {
       putc(c);
      }   
    }
    Chỉ nhận được data từ pic lên pc còn truyền từ pc xuống thì pic ko nhận được. mình không hiểu vì sao nữa. Không biết 18f4680 có cần khai báo gì thêm hay sai xót gì không bạn nào biết chỉ giúp với.

    Web:[url]www.ledviet.info/url]
    Email:
    DĐ:0949299699

  • #2
    HTML Code:
    #include <16F877a.h>
    #FUSES NOWDT,PUT,XT,NOPROTECT,NOLVP
    #use delay(clock=4000000)
    #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=9)
    #use fast_io (c)
    
    char ss=0;
    
    #INT_RDA
    RDA_isr()
    {
       ss=getc();
       puts(ss);
    }
    
    VOID  main()
    {   
       set_tris_c(0x80);
       enable_interrupts(GLOBAL);
       enable_interrupts(INT_RDA);
    
       printf("thu nghiem:"); 
       while(1){}
    }
    Không hiểu nổi, mạch này lúc xưa thường làm với pic 16f877a, giờ gắn con này vô mạch, thử với code này, mà cũng gặp tình trạng chi truyền lên chứ không nhận xuống được. Không hiều nổi, mạch thì lúc trước mình làm cũng thế, giờ kiểm tra mãi ko thấy chỗ sai. Có ai giúp mình.

    Web:[url]www.ledviet.info/url]
    Email:
    DĐ:0949299699

    Comment


    • #3
      Cả ngày hôm qua chỉnh lại nhưng cũng không được. Không thể hiểu nổi. Nhận kí tự từ máy tính xuống thì ko được, nhưng gửi lên thì được. Có ai gặp phải tình trạng này chưa vậy. Mạch rất đơn giản, chỉ có con 16f877a + max 232.


      Web:[url]www.ledviet.info/url]
      Email:
      DĐ:0949299699

      Comment


      • #4
        làm sao bạn biết là truyền từ máy tính xuống không đc?chắc là lên được dòng "thử nghiệm" phải không? nếu nhận được ss thì là pic đã nhận được rồi còn gì. chỗ đặt số bit trong gói dữ liệu bạn sửa lại là 8 bit thì mới đúng, vì char chỉ có 8 bit thôi mà

        Comment


        • #5
          Mình đã sửa 8, nhưng vẫn ko được dữ liệu từ máy tính. Nếu nhận được SS thì nó sẽ truyền puts(ss) lên màn hình luôn. Đằng này nó ko có dữ liệu gì hết ngoại trừ viết printf("thu nghiem") thì nó sẽ hiện thị lên máy tính. Mình dùng terminal. Trứớc đây là làm vài lần về cái này. Vậy mà giờ gặp tình trạng này.

          Web:[url]www.ledviet.info/url]
          Email:
          DĐ:0949299699

          Comment


          • #6
            Bạn còn sử dụng cổng C vào mục đích khác nữa à? mình nghi là set_tris_c(80) chưa đúng, bạn thử bỏ set_tris đi xem sao

            Comment


            • #7
              mình nghĩ rằng khi set_tris_c nghĩa là đã định nghĩa nó là cổng IO, không còn làm chức năng rs232 được nữa. Mình cũng không biết nếu sử dụng tiếp các chân còn lại của cổng C thì làm thế nào? chẳng lẽ lại output_high/low từng chân 1?

              Comment


              • #8
                ủa khi mình làm giao tiếp này thì chỉ cần khai báo #use rs232(...) rùi dùng thêm lệnh printf(..) cùng với hàm xuất lcd là được mà .!
                SỰ HỌC LÀ MÃI MÃI......!!!!

                Comment


                • #9
                  Có lẽ vấn đề nằm ở đoạn code này:
                  Code:
                  while(1)
                    {
                     putc(c);
                    }   
                  }
                  chuyển putc(c); vào interrupt RDA hoặc dùng thêm 1 biến cờ hoặc có thời gian delay giữa những lần putc(c);

                  Email:
                  Phone: 0905.034.086

                  Comment


                  • #10
                    #include <16f877a.h>
                    #FUSES NOWDT, XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
                    #use delay(clock=4000000)

                    #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=8)
                    #include <lcd420dasua.c>

                    char mang[11];
                    int8 dem=0;
                    int1 flag, flag1;
                    char c;
                    int8 i;

                    #INT_RDA
                    void Receive_isr()
                    {
                    c=getc();
                    if((c=='/'))
                    {mang[dem]='\0';
                    flag1=1;}
                    else
                    {mang[dem]=c;
                    dem++;}
                    }
                    void hienthi()
                    {
                    if(flag1==1)
                    { flag1=0;
                    lcd_putc("\f");
                    LCD_gotoxy(1,1);
                    printf("da nhan duoc roi");
                    printf(lcd_putc,"da nhan duoc roi");
                    LCD_gotoxy(1,2);

                    printf(lcd_putc,"da nhan:%s",mang);
                    printf("da nhan:%s",mang);
                    printf(lcd_putc,"%s\r\n",mang);
                    printf("%s\r\n",mang);
                    for (i=0;i<=11;++i)
                    mang[i]=0;
                    }
                    }
                    //-----------------------------------------------------------------

                    void main(void)
                    {
                    LCD_init();
                    LCD_gotoxy(1,1);
                    Printf(lcd_putc,"Hi ev'body");
                    Printf("Hi ev'body"); //Hien thi man hinh 1

                    enable_interrupts(INT_RDA);
                    enable_interrupts (global);

                    while(1)
                    {
                    hienthi();
                    }
                    }Đây là đoạn code lúc xưa đã từng làm, và đã nhận, giờ dùng lại cũng ko được.

                    Em đã thử làm cách cách của các bác nói. KO biết cồng com có hư ko. Khi nôí 2 chân TX, RX của cáp com. Dùng terminal truyền. Mà không thấy gì cả.

                    Web:[url]www.ledviet.info/url]
                    Email:
                    DĐ:0949299699

                    Comment


                    • #11
                      Bạn nên kiểm tra lại cổng COm trên máy tính. Có lẽ lỗi k truyền nhận được là do cổng COM hỏng. Mua thiết thị chuyển USB-COM rồi kiểm tra xem sao.
                      Ethernet-RS232, PIC Webserver, RFID Reader
                      CallerID, Cảnh báo BTS, ...
                      0988006696
                      linhnc308@gmail.com
                      http://linhnc308.blogspot.com

                      Comment


                      • #12
                        Không biết usb-com ngoài thị trường là loại nào nữa. Mua về nó có xem như com1 không đây

                        Web:[url]www.ledviet.info/url]
                        Email:
                        DĐ:0949299699

                        Comment


                        • #13
                          bạn có bán con PL2303 mà ko biết tận dụng nó àh??!!!

                          Comment


                          • #14
                            He he, cái này thì em biết, nhưng cái nào mà mình cũng làm hết thì thời gian đâu mà làm những việc khác nữa. Còn nhiều việc quá.

                            Web:[url]www.ledviet.info/url]
                            Email:
                            DĐ:0949299699

                            Comment


                            • #15
                              em viết cái code cũng hệt như của bác,nhưng mà gặp vấn đề,nếu dùng ngắt thì khi mô phỏng rất ok,nhưng khi nạp vào pic, thì pic bị đơ luôn không biết tại sao
                              hay trong phần pic wirard để sai cái gì ??
                              nếu ko dùng ngắt mà kiểm tra bit rcif thì gặp vấn đề là ,muốn nhập 1 xâu thì rất chậm,nếu nhập nhanh quá thì pic cũng đơ luôn (đó là trong mô phỏng đấy nhé)
                              trong proteus,mỗi phím nhận vào đều truyền luôn xuống pic ,

                              vậy mình muốn nhập 1 xâu rồi enter , thì phải nhập từng ký tự vào 1 mảng ,rồi nhận biết kết thúc bằng phím enter,

                              nhưng nếu truyền 1 file trong hyper terminal thì nó hoạt động như thế nào ?, làm sao để biết khi nào kết thúc truyền file ?
                              Last edited by popeye; 24-04-2009, 10:20.

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X