Thông báo

Collapse
No announcement yet.

giao tiếp máy tính vẫn là nóng bỏng nhất

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

  • giao tiếp máy tính vẫn là nóng bỏng nhất

    xin các sư huynh chỉ giáo,đệ giao tiếp máy tính,dùng vb(đã test khi nối tắt 2 chân 2 và 3) code trên vi điều khiển viết như sau:

    #include<18f4550.h>
    #fuses HS,NOWDT,NOPROTECT,NOLVP,NOPUT,NODEBUG,NOBROWNOUT, NOCPD,NOWRT
    #device PIC184550*=16 ADC=10
    #use delay(clock=4000000)
    #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
    #include<stdlib.h>
    #include<lcd_lib_4bit.c>
    #byte porta = 0x80
    #byte portb = 0x81
    #byte portc = 0x82
    #byte porte = 0x84
    char buffer[60],tam[7];
    int i,j,j1;
    int k = 0;
    float x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15 ,x16,x17,x18,x19,x20;
    #int_RDA
    void getvalue()
    {
    gets(buffer);
    k=1;
    }


    void main()
    {
    set_tris_b(0);
    set_tris_e(0);

    LCD_init();
    delay_us(10);
    LCD_putcmd(0x80);
    delay_us(10);
    printf(LCD_putchar,"cat185");
    LCD_putcmd(0xc0);
    delay_us(10);
    printf(LCD_putchar,"hien thi mang ?");
    delay_ms(1000);
    enable_interrupts(global);
    enable_interrupts(int_RDA);
    while (1)
    {
    if(k==1)
    {

    LCD_putcmd(0x01);
    delay_us(10);
    LCD_putcmd(0xc0);
    delay_us(10);
    printf(LCD_putchar,"du lieu da nhan");
    delay_us(10);
    j=0;j1=0;

    for (i=1;i<60;++i)
    {
    if (buffer[i]!='A') //nue khac a
    {
    tam[j]=buffer[i];
    j=j+1;
    }
    else
    {
    //tam[j]='\0';
    if (j1==0) x1=atof(tam);
    LCD_putcmd(0x80);
    delay_us(10);
    printf(LCD_putchar,"chuoi:%f",x1);
    delay_ms(1000);
    if (j1==1) x2=atof(tam);
    LCD_putcmd(0x80);
    delay_us(10);
    printf(LCD_putchar,"chuoi:%f",x2);
    delay_ms(1000);
    if (j1==2) x3=atof(tam);
    LCD_putcmd(0x80);
    delay_us(10);
    printf(LCD_putchar,"chuoi:%f",x3);
    delay_ms(1000);
    if (j1==3) x4=atol(tam);
    LCD_putcmd(0x80);
    delay_us(10);
    printf(LCD_putchar,"chuoi:%f",x4);
    delay_ms(1000);
    if (j1==4) x5=atof(tam);
    LCD_putcmd(0x80);
    delay_us(10);
    printf(LCD_putchar,"chuoi:%f",x5);
    delay_ms(1000);
    if (j1==5) x6=atof(tam);
    LCD_putcmd(0x80);
    delay_us(10);
    printf(LCD_putchar,"chuoi:%f",x6);
    delay_ms(1000);
    if (j1==6) x7=atof(tam);
    LCD_putcmd(0x80);
    delay_us(10);
    printf(LCD_putchar,"chuoi:%f",x7);
    delay_ms(1000);
    if (j1==7) x8=atof(tam);
    LCD_putcmd(0x80);
    delay_us(10);
    printf(LCD_putchar,"chuoi:%f",x8);
    delay_ms(1000);
    if (j1==8) x9=atof(tam);
    LCD_putcmd(0x80);
    printf(LCD_putchar,"chuoi:%f",x9);
    delay_ms(1000);
    if (j1==9) x10=atof(tam);
    LCD_putcmd(0x80);
    delay_us(10);
    printf(LCD_putchar,"chuoi:%f",x10);
    delay_ms(1000);
    if (j1==10) x11=atof(tam);
    LCD_putcmd(0x80);
    delay_us(10);
    printf(LCD_putchar,"chuoi:%f",x11);
    delay_ms(1000);
    if (j1==11) x12=atof(tam);
    LCD_putcmd(0x80);
    delay_us(10);
    printf(LCD_putchar,"chuoi:%f",x12);
    delay_ms(1000);
    if (j1==12) x13=atof(tam);
    LCD_putcmd(0x80);
    delay_us(10);
    printf(LCD_putchar,"chuoi:%f",x13);
    delay_ms(1000);
    if (j1==13) x14=atof(tam);
    LCD_putcmd(0x80);
    delay_us(10);
    printf(LCD_putchar,"chuoi:%f",x14);
    delay_ms(1000);
    if (j1==14) x15=atof(tam);
    LCD_putcmd(0x80);
    delay_us(10);
    printf(LCD_putchar,"chuoi:%f",x15);
    delay_ms(1000);
    if (j1==15) x16=atof(tam);
    LCD_putcmd(0x80);
    delay_us(10);
    printf(LCD_putchar,"chuoi:%f",x16);
    delay_ms(1000);
    if (j1==16) x17=atof(tam);
    LCD_putcmd(0x80);
    delay_us(10);
    printf(LCD_putchar,"chuoi:%f",x17);
    delay_ms(1000);
    if (j1==17) x18=atof(tam);
    LCD_putcmd(0x80);
    delay_us(10);
    printf(LCD_putchar,"chuoi:%f",x18);
    delay_ms(1000);
    if (j1==18) x19=atof(tam);
    LCD_putcmd(0x80);
    delay_us(10);
    printf(LCD_putchar,"chuoi:%f",x19);
    delay_ms(1000);
    if (j1==19) x20=atof(tam);
    LCD_putcmd(0x80);
    delay_us(10);
    printf(LCD_putchar,"chuoi:%f",x20);
    delay_ms(1000);
    j1=j1+1;
    j=0;
    if (j1==20) break; //j1 xac dinh so chuoi
    }

    }

    }
    else
    {
    LCD_putcmd(0x01);
    delay_us(10);
    LCD_putcmd(0x80);
    delay_us(10);
    printf(LCD_putchar,"du lieu chua nhan");
    delay_ms(500);
    }
    k=0;
    }
    }

    nhận hết dữ liệu vào bộ đệm khi có ngắt vậy mà kô chạy,có ngắt xảy ra nhưng kô hiện thị các giá trị
    xin các sư huynh chí giáo

  • #2
    Bạn xem lại help CCS nhé.

    Code của bạn không chạy vì trong phần ngắt UART bạn lại sử dụng hàm gets (nhận chuỗi). Hàm ngắt UART chỉ cho phép bạn dùng hàm getc để nhận 1 byte. Để nhận một chuỗi dữ liệu kết thúc bằng ký tự Enter, bạn thực hiện nhận từn byte đưa vào một mảng, khi nào có Enter thì kết thúc nhận, chuyên sang hiển thị. Code như sau:
    Code:
    char uart_buff[50];
    char char_in;
    int8 char_count = 0; 
    int1 string_ok=0;
    
    #int_rda
    void uart_isr(){
    char_in = getc();
    if(char_in == 13) // ký tự Enter
    {
      string_ok = 1; // kết thúc nhận, bật cờ báo
      char_count = 0;
    }
    else
    {
    uart_buff[char_count] = char_in;//gán ký tự nhận vào bộ đệm
    char_count++;
    }
    }
    /*--------------------------
    Trong hàm main thì kiểm tra biến string_ok, khi nào bằng 1 tức đã nhận đủ dữ liệu thì chuyển qua hiển thị lên LCD
    -------------------------*/
    void main(){
    //..........................
    // ..... user code......
    if(string_ok) {hiển thị LCD tại đây}
    // ....user code.....
    }
    Ethernet-RS232, PIC Webserver, RFID Reader
    CallerID, Cảnh báo BTS, ...
    0988006696
    linhnc308@gmail.com
    http://linhnc308.blogspot.com

    Comment


    • #3
      vậy hàm ngắt trên em có thể viết như vậy kô
      #int_RDA
      void getvalue()
      {
      for(i=0;i<60;++i)
      {
      buffer[i]=getc();
      }
      }
      nhận hết ký tự vào bộ đệm sau đó trong hàm main đọc ra từ từ
      xin anh linh chỉ giáo

      Comment


      • #4
        vậy hàm ngắt trên em có thể viết như vậy kô
        #int_RDA
        void getvalue()
        {
        for(i=0;i<60;++i)
        {
        buffer[i]=getc();
        }
        }
        nhận hết ký tự vào bộ đệm sau đó trong hàm main đọc ra từ từ
        xin anh linh chỉ giáo
        Tại sao bạn không đọc kỹ những gì tôi viết.
        "Hàm ngắt UART chỉ cho phép bạn dùng hàm getc để nhận 1 byte"
        Muốn nhận 60 kỹ tự thì sẽ phải dùng 60 lần ngắt 232 hoặc các khác là dùng hàm gets() trong hàm main. Khi dùng hàm gets(), nó sẽ nhận chuỗi dữ liệu vào bộ đệm cho đến khi bạn nhấn nút Enter.
        Đọc kỹ Help của CCS phần nói về các hàm giao tiếp
        Ethernet-RS232, PIC Webserver, RFID Reader
        CallerID, Cảnh báo BTS, ...
        0988006696
        linhnc308@gmail.com
        http://linhnc308.blogspot.com

        Comment


        • #5
          cảm ơn anh đã chỉ giáo,bây giở em đã hiểu,em chưa đọc kỹ những ji ah nói,đa tạ

          Comment


          • #6
            anh linh cho em hỏi đoạn code em viết lại như sau:
            #include<18f4550.h>
            #fuses NOWDT,PUT,HS,NOPROTECT
            #device PIC184550*=16 ADC=10
            #use delay(clock=4000000)
            #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
            #include<stdlib.h>
            #include<lcd_lib_4bit.c>
            #byte porta = 0x80
            #byte portb = 0x81
            #byte portc = 0x82
            #byte porte = 0x84
            char buffer[60],tam[7];
            int i,j,j1;
            float x5,x10,x15,x20;
            int x1,x2,x3,x4,x6,x7,x8,x9,x11,x12,x13,x14,x16,x17,x1 8,x19;
            int c=1;

            void getvalue()
            {
            gets(buffer);
            LCD_putcmd(0x01);
            delay_us(10);
            LCD_putcmd(0xc0);
            delay_us(10);
            printf(LCD_putchar,"da ta ok");
            delay_ms(500);
            j=0;j1=0;

            for (i=0;i<60;++i)
            {
            if (buffer[i]!="A") //nue khac a
            {
            tam[j]=buffer[i];
            j=j+1;
            }
            else
            {
            tam[j]='\0';
            if (j1==0) x1=atol(tam);
            LCD_putcmd(0x01);
            LCD_putcmd(0x80);
            delay_us(10);
            printf(LCD_putchar,"x1:%u",x1);
            delay_ms(1000);
            if (j1==1) x2=atol(tam);
            LCD_putcmd(0x01);
            LCD_putcmd(0x80);
            delay_us(10);
            printf(LCD_putchar,"x2:%u",x2);
            delay_ms(1000);
            if (j1==2) x3=atol(tam);
            LCD_putcmd(0x01);
            LCD_putcmd(0x80);
            delay_us(10);
            printf(LCD_putchar,"x3:%u",x3);
            delay_ms(2000);
            if (j1==3) x4=atol(tam);
            LCD_putcmd(0x01);
            LCD_putcmd(0x80);
            delay_us(10);
            printf(LCD_putchar,"x4:%u",x4);
            delay_ms(2000);
            if (j1==4) x5=atof(tam);
            LCD_putcmd(0x01);
            LCD_putcmd(0x80);
            delay_us(10);
            printf(LCD_putchar,"x5:%f",x5);
            delay_ms(2000);
            if (j1==5) x6=atol(tam);
            LCD_putcmd(0x01);
            LCD_putcmd(0x80);
            delay_us(10);
            printf(LCD_putchar,"x6:%u",x6);
            delay_ms(2000);
            if (j1==6) x7=atol(tam);
            LCD_putcmd(0x01);
            LCD_putcmd(0x80);
            delay_us(10);
            printf(LCD_putchar,"x7:%u",x7);
            delay_ms(2000);
            if (j1==7) x8=atol(tam);
            LCD_putcmd(0x01);
            LCD_putcmd(0x80);
            delay_us(10);
            printf(LCD_putchar,"x8:%u",x8);
            delay_ms(2000);
            if (j1==8) x9=atol(tam);
            LCD_putcmd(0x01);
            LCD_putcmd(0x80);
            printf(LCD_putchar,"x9:%u",x9);
            delay_ms(2000);
            if (j1==9) x10=atof(tam);
            LCD_putcmd(0x01);
            LCD_putcmd(0x80);
            delay_us(10);
            printf(LCD_putchar,"x10:%f",x10);
            delay_ms(2000);
            if (j1==10) x11=atol(tam);
            LCD_putcmd(0x01);
            LCD_putcmd(0x80);
            delay_us(10);
            printf(LCD_putchar,"x11:%u",x11);
            delay_ms(2000);
            if (j1==11) x12=atol(tam);
            LCD_putcmd(0x01);
            LCD_putcmd(0x80);
            delay_us(10);
            printf(LCD_putchar,"x12:%u",x12);
            delay_ms(2000);
            if (j1==12) x13=atol(tam);
            LCD_putcmd(0x01);
            LCD_putcmd(0x80);
            delay_us(10);
            printf(LCD_putchar,"x13:%u",x13);
            delay_ms(2000);
            if (j1==13) x14=atol(tam);
            LCD_putcmd(0x01);
            LCD_putcmd(0x80);
            delay_us(10);
            printf(LCD_putchar,"x14:%u",x14);
            delay_ms(2000);
            if (j1==14) x15=atof(tam);
            LCD_putcmd(0x01);
            LCD_putcmd(0x80);
            delay_us(10);
            printf(LCD_putchar,"x15:%f",x15);
            delay_ms(2000);
            if (j1==15) x16=atol(tam);
            LCD_putcmd(0x01);
            LCD_putcmd(0x80);
            delay_us(10);
            printf(LCD_putchar,"x16:%u",x16);
            delay_ms(2000);
            if (j1==16) x17=atol(tam);
            LCD_putcmd(0x01);
            LCD_putcmd(0x80);
            delay_us(10);
            printf(LCD_putchar,"x17:%u",x17);
            delay_ms(2000);
            if (j1==17) x18=atol(tam);
            LCD_putcmd(0x01);
            LCD_putcmd(0x80);
            delay_us(10);
            printf(LCD_putchar,"x18:%u",x18);
            delay_ms(2000);
            if (j1==18) x19=atol(tam);
            LCD_putcmd(0x01);
            LCD_putcmd(0x80);
            delay_us(10);
            printf(LCD_putchar,"x19:%u",x19);
            delay_ms(2000);
            if (j1==19) x20=atof(tam);
            LCD_putcmd(0x01);
            LCD_putcmd(0x80);
            delay_us(10);
            printf(LCD_putchar,"x20:%f",x20);
            delay_ms(2000);
            if (j1==20) break; //j1 xac dinh so chuoi
            j1=j1+1;
            j=0;
            }

            }
            c=0;
            }


            void main()
            {
            set_tris_b(0);
            set_tris_e(0);
            LCD_init();
            delay_us(10);
            LCD_putcmd(0x80);
            delay_us(10);
            printf(LCD_putchar,"nhan du lieu");
            LCD_putcmd(0xc0);
            delay_us(10);
            printf(LCD_putchar,"hien thi mang ?");
            delay_ms(1000);
            while (1)
            {
            if(c==1)
            getvalue();
            }
            }
            xin ah chỉ giáo như vậy có được kô

            Comment


            • #7
              Bạn muốn biết được hay không thì test với mạch là biết ngay thôi !

              Comment


              • #8
                mà đã lắp mạch thật và kô chạy,ai có cao kiến ji xin chi giáo...nó cứ đơ ra kô nhận dữ liệu

                Comment

                Về tác giả

                Collapse

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

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

                Collapse

                Đang tải...
                X