Thông báo

Collapse
No announcement yet.

Các bạn giúp mình giải đáp một số vấn đề

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

  • #16
    Nguyên văn bởi jimhawkins Xem bài viết
    cho mình hỏi thêm là trong cái hàm NGAT_T0,cái này là 1s thì nó tăng giá trị đếm lên 1 đơn vị,3CBO tính số xung đếm và đổi ra decimal là 50000 vậy cần lập 20 để đủ 1s,theo mình nghĩ là khi mà cái thanh ghi để kiểm tra nó bằng 20 chưa thì phải để ngoài hàm NGAT_TO để kiểm tra nó chứ nhỉ,nếu mà đúng thì mới xảy ra ngắt lúc này mới nhảy vào NGAT_TO thực hiện,sao trong này nó để lun trong hàm NGAT_TO các bạn giúp mình giải đáp chút
    thanh ghi đếm tới 20 nó làm công việc đếm số lần tràn timer đúng ko. Timer tràn nó mới đếm, khi timer tràn thì xảy ra ngắt. Vậy theo trình tự, timer tràn, nhảy vào ngắt, đếm coi tràn bao nhiêu, tràn đủ thì reset lại bộ đếm, chưa đủ thì nhảy ra chờ tràn tiếp.

    Comment


    • #17
      Bạn giúp mình giải thích chi tiết chỗ nó hoạt động thông qua từng đoạn code được không mình còn hơi mơ hồ về cái đoạn nó đếm đủ 1s thì xảy ra ngắt chưa ah,còn mấy cái hiển thị,điều chỉnh để tăng R0 thì mình hỉu rồi
      START:
      ACALL KHOI_TAO ;KHOI TAO CAC THANH GHI
      MOV TH0,#03CH
      MOV TL0,#0B0H
      SETB TR0
      SETB TF0
      MOV R0,#0
      MOV 30H,#0
      LJMP $
      RET
      ;-------------------------------------
      NGAT_T0:
      CLR TR0
      MOV TH0,#03CH
      MOV TL0,#0B0H ; dat lai thanh ghi timer
      SETB TR0 ; bat TR0 cho timer hoat dong
      ACALL HT_R0 ; goi ham hien thi
      MOV R1,30H
      CJNE R1,#20,TANG_30H ;say 20 lan thi tang gia tri cua o nho 30H len 1
      MOV 30H,#0 ;neu toi 20 thi ve 0 tro lai
      ACALL DC_R0 ; sau 20 lan goi timer la dc 1 giay, tien hanh dieu chinh R0 len 1
      LJMP EXIT
      TANG_30H:
      INC 30H
      EXIT:
      RETI

      Comment


      • #18
        Nguyên văn bởi jimhawkins Xem bài viết
        Bạn giúp mình giải thích chi tiết chỗ nó hoạt động thông qua từng đoạn code được không mình còn hơi mơ hồ về cái đoạn nó đếm đủ 1s thì xảy ra ngắt chưa ah,còn mấy cái hiển thị,điều chỉnh để tăng R0 thì mình hỉu rồi
        Nói ngắn gọn là đoạn code trên hoạt động như sau:
        - Ban đầu là khởi tạo giá trị nạp cho các thanh ghi của bộ định thời 0, sau đó buộc ngắt đầu tiên xảy ra bằng lệnh SETB TF0. Khi có ngắt xảy ra, trình phục vụ ngắt được phục vụ. Nhiệm vụ của trình phục vụ ngắt là nạp lại giá trị định thời cho timer 0, khởi động lại bộ định thời, gọi hàm hiển thị. Đồng thời trình phục vụ ngắt thực hiện việc kiểm tra thanh ghi 30H (đoán không nhầm thì thanh ghi 30H ở đây dùng để đếm số lần tràn của timer), 30H chưa bằng 20 thì tăng lên 1 đơn vị rồi thoát khỏi ngắt, nếu bằng 20 thì xóa 30H về 0 (lúc này có nghĩa là timer đã tràn 20 lần và 1s đã trôi qua) và gọi chương trình tăng R0 lên 1 đơn vị (để đếm số giây đã trôi qua).
        - Chương trình chính sau khi khởi động các giá trị nạp vào thanh ghi, buộc ngắt lần đầu rồi xóa các thanh ghi R0, 30H thì không làm gì cả. Công việc hoàn toàn là do trình phục vụ ngắt thực hiện.

        P/S: Cần phải cho phép ngắt khi trước khi buộc ngắt lần đầu.

        Comment

        Về tác giả

        Collapse

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

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

        Collapse

        Đang tải...
        X