Title Image

Blog Logo

Bài 9. 8051 Interrupts

🌱 Bài 9. 8051 Interrupts

    Interrupt - Ngắt là một kỹ thuật thiết kế luồng xử lý quan trọng trong chương trình nhúng. Nó là các sự kiện tạm thời dừng chương trình chính, chuyển qua xử lý các nguồn tác động bên ngoài và thực thi tác vụ của chúng. Sau đó nó quay lại chương trình chính khi đã hoàn thành tác vụ trên. 

    8051 có 5 nguồn ngắt: INT0, TF0, INT1, TF1, RI/TI. Mỗi ngắt này óc địa chỉ vector ngắt của nó (hình bên dưới), phân theo mức độ ưu tiên (Vector Reset với địa chỉ 0x0000H có ưu tiên cao nhất). Mức độ ưu tiên có thể được thay đổi bởi thanh ghi IP - Interrupt Priority.

    👉👉 Internal Interrupt (Timer Interrupt)

    8051 có 2 ngắt nội là Timer0 và Timer1. Sẽ được làm rõ trong bài viết về Timer.

    👉👉 Serial Interrupt

    8051 có cổng giao tiếp nối tiếp và cờ ngắt nối tiếp liên quan (TI/RI), xảy ra khi bit cuối cùng được truyền nhận.

    👉👉 External Interrupt

    8051 có 2 ngắt ngoài INT0 và INT1, xảy ra khi có sự thay đổi mức logic hoặc cạnh (sườn lên/xuống) trên 2 chân P3.2 và P3.3.

    Các thiết bị ngoại vi bên ngoài có thể làm gián đoạn VĐK thông qua ngắt ngoài nếu global và external Interrupt được kích hoạt.

    🧐🧐 Quá trình thực thi

Stacking => ISR => Unstacking

    Stacking: Sau khi có yêu cầu ngắt, VĐK sẽ thực thi nốt lệnh hiện tại, cất những dữ liệu cần thiết vào trong ngăn xếp: Ví dụ, thanh ghi vẫn cần dùng sau ngắt R0 = 05H, giá trị 05H sẽ được cất vào ngăn xếp (PUSH vào ngăn xếp).

    ISR: Kiểm tra xem ngắt nào xảy ra cùng mức độ ưu tiên. Chương trình sẽ chuyển sang chương trình con phục vụ ngắt (ISR - Interrupt Service Routine). Trong đây ta sẽ làm những điều mình thích ♥

    Nếu có lỡ thay đổi giá trị thanh ghi R0 cũng không sao, bởi vì:

    Unstacking: Trả lại giá trị 05H cho R0 (POP khỏi ngăn xếp), và các thanh ghi khác nếu có!!

    Ngăn xếp Stack làm việc theo nguyên tắc LIFO (Last In First Out). Tức là cái nào được PUSH vào trước sẽ được POP ra sau!!!

    🧐🧐 Một số thanh ghi cần chú ý

    👉👉 Thanh ghi IE - Interrupt Enable

    IE dùng để cho bật/tắt các nguồn ngắt.

  • Bit 7 – EA (Enable All Bit): EA = 1 sẽ cho phép tất cả ngắt.
  • Bit 6,5 – Không sử dụng.
  • Bit 4 – ES (Enable Serial Interrupt Bit): ES = 1 sẽ cho phép ngắt giao tiếp serial (TI/RI).
  • Bit 3 – ET1 (Enable Timer1 Interrupt Bit): ET1 = 1, ngắt timer1.
  • Bit 2 – EX1 (Enable External1 Interrupt): EX1 = 1, ngắt ngoài 1.
  • Bit 1 – ET0 (Enable Timer0 Interrupt Bit): ET0 = 1, ngắt Timer0.
  • Bit 0 – EX0 (Enable External1 Interrupt): EX0 = 1, ngắt ngoài 0.

    👉👉 Thanh ghi IP - Interrupt Priority

    IP dùng để cấu hình mức độ ưu tiên của các ngắt. Sau khi Reset, ưu tiên mặc định sẽ như bảng vector (từ trên xuống dưới 😃).

    Set bit tương ứng trong thanh ghi IP = 1 sẽ đặt ngắt tương ứng ở mức độ ưu tiên cao hơn (Tất nhiên nếu 2 ngắt cùng = 1 hoặc cùng = 0 thì sẽ áp dụng ưu tiên mặc định theo bảng).

  • Bit 7,6,5 – Không sử dụng.
  • Bit 4 – PS (Serial Interrupt Priority Bit): Tương ứng ngắt serial.
  • Bit 3 – PT1 (Timer1 Interrupt Priority Bit): Ngắt Timer1.
  • Bit 2 – PX1 (External Interrupt 1 Priority Bit): Ngắt ngoài 1.
  • Bit 1 – PT0 (Timer0 Interrupt Priority Bit): Ngắt Timer0.
  • Bit 0 – PX0 (External Interrupt 0 Priority Bit): Ngắt ngoài 0.

    👉👉 Thanh ghi TCON

    TCON - Timer/Counter Control Register, là thanh ghi để điều khiển và theo dõi ngắt Timer cũng như ngắt ngoài.

    ➢ Sẽ được làm rõ trong các bài sau về ngắt ngoài và Timer!!!

>>>= Follow ngay =<<<

💚 Kênh Youtube Lập trình - Điện tử 💚

Để nhận được những bài học miễn phí mới nhất nhé 😊


Xem Bài 8                         Xem Bài 10

Đăng nhận xét

0 Nhận xét