Thông báo

Collapse
No announcement yet.

Mất ngắt khác khi sử dụng ngắt UART

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

  • Mất ngắt khác khi sử dụng ngắt UART

    Hi all!
    Em làm cái ngắt uart cho mấy em 89s52. Chưa bao giờ xài uart của thằng này, nay xài gặp 1 cái vấn đề rất củ chuối đó là khi sử dụng hàm ngắt uart để nhận dữ liệu thì các chương trình ngắt khác dường như bị disable, các chương trình trong main vẫn chạy bình thường. Còn làm theo kiểu thủ công tức là kiểm tra TI hoặc RI trong main thì các ngắt khác vẫn chạy bt, tuy nhiên mình muốn nó chạy trong ngắt và ưu tiên nó để tránh việc gián đoạn khi truyền
    file project mình đính kèm, đang cần gấp hi vọng có câu trả lời sớm, tks all
    test.zip
    Website chính thức đổi địa chỉ website thành
    Mời các bạn ghé thăm !!!

  • #2
    Nếu bạn bảo khi dùng ngắt UART mà các ngắt khác như kiểu bị vô hiệu hóa, thì xem cái này của mình nhé. Mình vẫn có thể quét LED 7 đoạn và giả lập 1s để đếm đấy. Có điều mình vẫn chưa thành công khi lấy dữ liệu được gửi tới từ UART mình định là nếu khi gửi chữ a thì thực hiện 1 tác vụ nào đó, chữ khác thì tác vụ khác, UART mình chưa làm bao giờ thấy bạn hỏi thì mình mới thử. Trong code này mình có để cái code để khi có ngắt UART xảy ra thì sẽ hiển thị mã của ký tự vừa gửi với chỉ số của i, nhưng chưa đúng. bạn xem và sửa nếu đựoc thì gửi lại lên đây cho mọi người và cho mình nữa nhé
    Attached Files

    Comment


    • #3
      Các tác vụ sẽ có các cờ ( flag ) để cho phép tác vụ thực thi. Trong ngắt chỉ cần kiểm tra giá trị nhận được và tác động xóa hoặc set các cờ tương ứng của từng tác vụ.

      Comment


      • #4
        vụ này mình giảit quyết đc rồi nhé, nguyên nhân do cái thanh ghi ưu tiên IP tuy nhiên ko rõ tại sao, IP là ưu tiên ngắt mà khai báo cho uart nó lại disable ngắt khác khi chạy uart
        Website chính thức đổi địa chỉ website thành
        Mời các bạn ghé thăm !!!

        Comment


        • #5
          Nguyên văn bởi mast090 Xem bài viết
          vụ này mình giảit quyết đc rồi nhé, nguyên nhân do cái thanh ghi ưu tiên IP tuy nhiên ko rõ tại sao, IP là ưu tiên ngắt mà khai báo cho uart nó lại disable ngắt khác khi chạy uart
          Có thể giải thích cho mình biết tại sao khi ngắt UART xảy ra "lúc đó mình chỉ gõ 1 ký tự vào virtual terminal" mà giá trị của biến đếm i trong bài của mình nó tăng có thể 7 hoặc 8 có khi 9 giá trị được không?. lúc đầu ý mình chỉ đơn giản là mình nhận ký tự từ uart nếu nó là ký tự a thì bật 1 đèn led, khi nó là d thì tắt. Nhưng mình chưa thực hiện được.

          Comment


          • #6
            Đây là bài UART của mình, lúc trước mình dùng timer2 tạo baud rate giờ dùng timer 1 làm boud rate thì thấy chạy đúng ý mình rồi. Chức năng gồm có, khi bạn ấn A thì LED bật sáng, B thì LED tắt, sau khi bạn gõ xong 1 chuỗi nào đó "nhớ dùng ký tự hoa nhé" thì sẽ trả lại cho virtual terminal chính ký tự đó sau đó sẽ lưu vào 1 mảng, sau khi bạn gõ xong thì sẽ hiển thị các phần tử từ vị trí 0 đến hết chuỗi bạn vừa gõ vào "hiển trị trên led 7 đoạn 2 số đầu là mã ascii 2 số sau là chỉ số của nó trong mảng".
            Attached Files

            Comment


            • #7
              bài nó đơn giản thế mà sao đẻ thêm 1 đống linh tinh vào làm gì vậy, việc kiểm tra với 1 ký tự nó là điều đơn giản tuy nhiên chuyển sang 1 chuỗi ký tự sẽ là cả vấn đề, đặc biệt là 1 chuỗi lớn chứa nhiều giá trị. bạn nên làm các bài test vs chuỗi để xử lý dữ liệu cho tốt
              Website chính thức đổi địa chỉ website thành
              Mời các bạn ghé thăm !!!

              Comment


              • #8
                Nguyên văn bởi mast090 Xem bài viết
                bài nó đơn giản thế mà sao đẻ thêm 1 đống linh tinh vào làm gì vậy, việc kiểm tra với 1 ký tự nó là điều đơn giản tuy nhiên chuyển sang 1 chuỗi ký tự sẽ là cả vấn đề, đặc biệt là 1 chuỗi lớn chứa nhiều giá trị. bạn nên làm các bài test vs chuỗi để xử lý dữ liệu cho tốt
                Có vẻ cũng hơi linh tinh, nhưng có lý do của nó đấy, vì lúc thấy U bảo là mất ngắt thì mình nghĩ là khi nhận được ký tự từ tẻminal chuyển qua thì mình kiểm tra xem nó là ký tự gì để đưa ra ứng xử tuơng ứng -> phần uart đã hoạt động tốt, + quét LED 7 đoạn để chứng minh khi UART hoạt đột tốt thì LED vẫn được quét nghĩa là 2 cái đó vẫn chạy song song. còn chuyển về chuỗi thì có gì khó đâu nhỉ? chính ở đó mình đã biến nó thành chuỗi nhưng do dùng led 7 đoạn không hiển thị được chữ cái thì mình mới hiển thị mã ascii của nó lên kèm theo vị trí của ký tự đó trong chuỗi. Với cả ban đầu mình dùng timer 2 tạo boud rate chưa thành công, khi nhận đựoc gì gửi ra ngay thì được chứ nếu khi có sự kiện gửi từ terminal sang thì không phải nó chỉ xảy ra ngắt có 1 lần mà là 7 đến 8 lần nên mình mới hiển thị nó ra xem mã nhận được ở lần nào xảy ra ngắt là mã ascii của ký tự mình gửi sang.

                Comment


                • #9
                  Nguyên văn bởi mast090 Xem bài viết
                  bài nó đơn giản thế mà sao đẻ thêm 1 đống linh tinh vào làm gì vậy, việc kiểm tra với 1 ký tự nó là điều đơn giản tuy nhiên chuyển sang 1 chuỗi ký tự sẽ là cả vấn đề, đặc biệt là 1 chuỗi lớn chứa nhiều giá trị. bạn nên làm các bài test vs chuỗi để xử lý dữ liệu cho tốt
                  Mà quan trọng là giờ còn bơ vơ, tự học cái này, thấy U hỏi cái này trên mạng thì tự tìm tài liệu và dựa vào chính code của U để học chứ chưa có kinh nghiệm gì cả.

                  Comment


                  • #10
                    Con này khá dễ học và hầu hết đều có tài liệu và thậm chí là full code học thì mấy, thi thoảng gặp mấy cái lỗi dở hơi mà ko rõ nguyên nhân. chứ 8051 thì cũng bỏ từ lâu rồi vì nó ít ứng dụng hơn các dòng khác
                    Website chính thức đổi địa chỉ website thành
                    Mời các bạn ghé thăm !!!

                    Comment

                    Về tác giả

                    Collapse

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

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

                    Collapse

                    Đang tải...
                    X