Thông báo

Collapse
No announcement yet.

[SOLVED] truyền nhận uart trong atmega 32

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

  • [SOLVED] truyền nhận uart trong atmega 32

    chào các bạn mình có vấn đề truền nhận uart của vdk.code mình như sau.
    while (1)
    {
    // Place your code here
    k =getchar();
    switch (k)
    {
    case 'A':
    microstep();
    break;
    case 'I':
    sang1();
    break;
    case 'P':
    PORTC=0x01;
    delay_ms(1000);
    PORTC=0x00;
    delay_ms(1000);
    break;
    case 'D':
    PORTC=0x00;
    break;
    case 'R':
    PORTC =0x08;
    delay_ms(1000);
    PORTC=0x00;
    delay_ms(1000);
    break;
    case 'S':
    PORTC =0x0f;
    delay_ms(1000);
    PORTC=0x00;
    delay_ms(1000);
    break;
    default:
    }

    putchar(k);

    };
    xin cho mình hỏi làm cách nào mình có thể bỏ qua hàm getchar() khi mình ko truyền nhận. theo mình thấy là ct được thực hiện 1 lần rồi chờ truyền nhận mới thực hiện tiếp.mình muốn ko truyền nhận thì chương trình thực hiên lại ct trước đó.có cao nhân nào giúp mình với.cảm ơn nhiều.
    PS: mình đã thử dùng if để đặt điều kiện xảy ra hàm getchar() nhưng vẫn không có tác dụng gì.

  • #2
    nhân tiện cho mình hỏi làm cách nào đưa code vào thanh cuộn.tham gia diễn đàn đã lâu nhưng chưa thực hiện được điều này.mong được các bạn giúp đỡ.

    Comment


    • #3
      Thay bằng việc dùng k=getchar(); bạn có thể dùng trực tiếp:
      k=UDR;
      if(k!=0)
      {
      switch(k)
      .....

      putchar(k);
      k=0;
      }
      !e

      Comment


      • #4
        cảm ơn nhiều nhé.để mình thử xem.

        Comment


        • #5
          cảm ơn bạn zemen rất nhiều.mình giải quyết được rồi.admin có thể khóa luồng này lại được rồi.

          Comment


          • #6
            help me!!!! ngắt truyền và ngắt nhận trong codevision avr: xin các bạn chỉ cho mình khi khai báo ngắt truyền và nhận trong code vision thì đặt code nhận ở đâu để khì xẩy ra ngắt nhận gắn k=UDR để xử lí tiếp.mình không biết đắt code nhận chỗ nào trong code vision để khi xẩy ra ngắt nhận là gắn k=UDR;mong các bạn chỉ jum.thanks.mình tên nguyễn từ thông.chân thành cảm ơn các bạn và các bác rất nhiều

            Comment


            • #7
              Nguyên văn bởi caodang Xem bài viết
              help me!!!! ngắt truyền và ngắt nhận trong codevision avr: xin các bạn chỉ cho mình khi khai báo ngắt truyền và nhận trong code vision thì đặt code nhận ở đâu để khì xẩy ra ngắt nhận gắn k=UDR để xử lí tiếp.mình không biết đắt code nhận chỗ nào trong code vision để khi xẩy ra ngắt nhận là gắn k=UDR;mong các bạn chỉ jum.thanks.mình tên nguyễn từ thông.chân thành cảm ơn các bạn và các bác rất nhiều
              Khi khởi tạo ngắt truyền thông ( truyền/ nhận ) tự động CV sẽ sinh ra 1 void ngắt. Bạn xử lý chương trình ở trong đó sau các thông số khởi tạo.

              Có thể bạn chưa sử dụng thành thạo lắm CV thì phải.

              Comment


              • #8
                Đã có ai làm ngắt UART codevision rồi thì làm ví dụ cho anh em biết đi cứ nói chung chung thế không hiểu lắm

                Comment


                • #9
                  chào các bác, em đang truyền dữ liệu từ máy tính xuống VĐK, nhưng chưa biết tách dữ liệu thế nào, mong các bác chỉ bảo.
                  Ví dụ, em truyền "Chao bac" xuống VĐK thì làm cách nào để VĐK nhận được là trong dữ liệu nhận có ký tự 'C'? Cảm ơn các bác.
                  WS:
                  Blog:

                  Comment


                  • #10
                    Dừ liệu là do bạn đóng khung. Cách đóng là do bạn thì cách "cởi ra " cũng là do bạn thôi. Mình ví dụ bạn muốn truyền "quangtung112" bạn có thể đóng khung "Zquangtung112W" rồi truyền. Khi nhận bạn thấy ký tự Z có nghĩa là đầu khung, tiến hành nhận, gặp ký tự W thì kết thúc khung. Lúc này bạn có dữ liệu "quangtung112"

                    Giải pháp điện tử của bạn

                    Comment


                    • #11
                      Nguyên văn bởi vuxuansyhut Xem bài viết
                      Dừ liệu là do bạn đóng khung. Cách đóng là do bạn thì cách "cởi ra " cũng là do bạn thôi. Mình ví dụ bạn muốn truyền "quangtung112" bạn có thể đóng khung "Zquangtung112W" rồi truyền. Khi nhận bạn thấy ký tự Z có nghĩa là đầu khung, tiến hành nhận, gặp ký tự W thì kết thúc khung. Lúc này bạn có dữ liệu "quangtung112"
                      Vâng, cái phần đóng khung thì em hiểu nhưng về phần lệnh thì em chưa biết lập trình thế nào? Ví dụ trong codevision biến nhận dữ liệu là biến data, vậy khi nó nhận được "Zquangtung112W" thì phải dùng hàm gì để tách dữ liệu ra? Cảm ơn anh.
                      WS:
                      Blog:

                      Comment


                      • #12
                        khi sử dụng ngắt nhận dữ liệu uart. Mỗi khi nhận được 1 byte cờ ngắt sẽ được set. Khi đó chương trình phục vụ ngắt được thực thi. Bạn kiểm tra byte nhận được (data=UDR) nếu thỏa mãn điều kiện đặt ra thì lưu trong một mảng. Khi đó bạn xử lý dữ liệu với mảng nhận được. Truy cập phần tử thứ i của mảng số nguyên 1 byte 1 chiều a đơn giản là a[i]. Cái này bạn xem trong tài liệu ngôn ngữ lập trình C sẽ rõ, khi đó bạn có thể dùng kỹ thuật với con trỏ, nói chung là rất hay.
                        Trong ví dụ này a[0]='Z', a[1]='q'

                        Giải pháp điện tử của bạn

                        Comment


                        • #13
                          cảm ơn anh.
                          WS:
                          Blog:

                          Comment

                          Về tác giả

                          Collapse

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

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

                          Collapse

                          Đang tải...
                          X