Thông báo

Collapse
No announcement yet.

Giao tiếp máy tính với UART

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

  • Giao tiếp máy tính với UART

    chào anh/chị, em đang làm về mảng giao tiếp máy tính qua uart của avr, đề tài như sau: ngõ vào gồm 3 chân A0-A3 khi ngõ vào bằng 0 thì gửi tín hiệu a b c lên cho máy tính. phần gửi em đã hoàn thành được nhưng bị 1 tình trạng là khi em cho cùng lúc 2-3 ngõ vào =0 cùng lúc thì nó chỉ gửi 1 tín hiệu T_T, lúc thì a lúc thì b. em ko biết làm sao để nó gửi toàn bộ lên ạ ,không nhất thiết phải là cùng lúc . Mong anh/chị chỉ giúp em với mò mấy ngày gòi mà không được

  • #2
    Hi, mình thì chưa dùng AVR bao giờ, nhưng dùng qua Arduino. Mình nghĩ bạn nên dùng hàm Switch case cho từng trường hợp đọc được tín hiệu ở A0- A3 thì nó sẽ không lung tung lên nữa.

    Comment


    • #3
      tín hiệu đọc được ở A0-A3 chỉ có mức 0 thui mà
      đây là phần code của mình:
      #include <avr/io.h>
      #include <util/delay.h>
      #include <avr/interrupt.h>

      void uart_char_tx(unsigned char chr);
      int main(void)
      {
      DDRD |= _BV(2);
      PORTD |= _BV(2);
      DDRA=0;
      DDRB=0;
      DDRC=0;
      PORTA=0xFF;
      PORTB=0xFF;
      PORTC=0xFF;
      UBRRH=0;
      UBRRL=51;
      UCSRA=0x00;
      UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
      UCSRB=(1<<TXEN)|(1<<RXCIE);
      sei();
      while(1)
      {
      }
      ////TRUYEN TIN HIEU////
      ////PORT A/////
      if(bit_is_clear(PINA,PA0))
      {

      _delay_ms(1000);
      uart_char_tx('a');

      }
      if(bit_is_clear(PINA,PA1))
      {

      _delay_ms(1000);
      uart_char_tx('b');

      }
      if(bit_is_clear(PINA,PA2))
      {

      _delay_ms(1000);
      uart_char_tx('c');

      }
      if(bit_is_clear(PINA,PA3))
      {
      _delay_ms(1000);
      uart_char_tx('d');
      }
      void uart_char_tx(unsigned char chr)
      {
      while(!(UCSRA&(1<<UDRE)));
      UDR=chr;
      }

      mình bị ở chỗ nhấn 2 nút cùng lúc thì nó chỉ truyền 1 cái (cái nào bấm trước ý) mà hok truyền cái còn lại

      Comment


      • #4
        Mình không hiểu uart_char_tx là hàm gì?nó có sẵn trong thư viện à?

        Comment


        • #5
          Nguyên văn bởi phan toan Xem bài viết
          Mình không hiểu uart_char_tx là hàm gì?nó có sẵn trong thư viện à?
          Thư viện nào đâu bạn, hàm send chr ở cuối kìa.

          Nhưng mà delay của bạn những 1s à? If nằm ngoài main à?
          Thử giảm delay xuống. Nói bấm cùng lúc chứ cũng phải chênh nhau ms.

          Comment

          Về tác giả

          Collapse

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

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

          Collapse

          Đang tải...
          X