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

                • 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
                • nick22
                  Trả lời cho Máy điện châm ?
                  bởi nick22
                  Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
                  01-12-2025, 13:23
                Đang tải...
                X