Wednesday 28 November 2018

Bài 4. Hoạt Động Ngắt

Giới thiệu


Một ngắt là một sự kiện xảy ra ngẫu nhiên trong luồng liên tục. Nó giống như một cuộc gọi bạn có khi bạn bận rộn với một số công việc và tùy thuộc vào ưu tiên cuộc gọi, bạn quyết định có nên tham dự hoặc bỏ bê nó hay không.  
Điều tương tự cũng xảy ra trong vi điều khiển. 8051 kiến ​​trúc xử lý 5 nguồn ngắt, trong đó có hai là nội bộ (Timer Interrupts), hai là bên ngoài và một là một ngắt nối tiếp. Mỗi ngắt này có địa chỉ vector ngắt của chúng. Ngắt ưu tiên cao nhất là Reset, với địa chỉ vector 0x0000.
Địa chỉ Vector : Đây là địa chỉ mà bộ điều khiển nhảy sau khi ngắt để phục vụ ISR (thường xuyên dịch vụ ngắt).
Làm gián đoạn
Gắn cờ
Địa chỉ vectơ ngắt
Cài lại
- -
0000H
INT0 (Ext. Int. 0)
IE0
0003H
Timer 0
TF0
000BH
INT1 (Ext. Int. 1)
IE1
0013H
Bộ hẹn giờ 1
TF1
001BH
Nối tiếp
TI / RI
0023H


Cài lại
Đặt lại là mức ưu tiên cao nhất bị gián đoạn, khi đặt lại vi điều khiển 8051 bắt đầu thực thi mã từ địa chỉ 0x0000.
Ngắt nội bộ (ngắt Timer)
8051 có hai ngắt nội bộ là timer0 và timer1. Bất cứ khi nào bộ đếm thời gian tràn, cờ tràn bộ đếm thời gian (TF0 / TF1) được đặt. Sau đó, vi điều khiển nhảy đến địa chỉ vector của chúng để phục vụ ngắt. Đối với điều này, ngắt toàn cầu và hẹn giờ nên được kích hoạt.
Ngắt nối tiếp
8051 có cổng giao tiếp nối tiếp và có các cờ ngắt liên tiếp nối tiếp (TI / RI). Khi bit cuối cùng (bit dừng) của byte được truyền, cờ ngắt nối tiếp TI được thiết lập và khi bit cuối cùng (bit dừng) nhận byte dữ liệu được nhận, cờ RI được đặt.
Đăng ký IE: Ngắt kích hoạt Đăng ký
Thanh ghi IE được sử dụng để bật / tắt các nguồn ngắt.
      
8051 Đăng ký IE
Bit 7 - EA: Bật tất cả bit
            1 = Bật tất cả các ngắt
            0 = Vô hiệu hóa tất cả các ngắt
Bit 6,5 - bit dự trữ
Bit 4 - ES: Bật bit ngắt nối tiếp
            1 = Bật ngắt nối tiếp
            0 = Vô hiệu hóa ngắt nối tiếp
Bit 3 - ET1: Bật bit ngắt Timer1
            1 = Bật ngắt Timer1
            0 = Vô hiệu hóa ngắt Timer1
Bit 2 - EX1: Bật bit ngắt ngoài 1
            1 = Bật ngắt External1
            0 = Vô hiệu hóa ngắt External1
Bit 1 - ET0: Bật bit ngắt Timer0
            1 = Bật ngắt Timer0
            0 = Tắt ngắt Timer0
Bit 0 - EX0: Bật bit ngắt ngoài External0
            1 = Bật ngắt External0
            0 = Vô hiệu hóa ngắt External0

Ưu tiên ngắt

Ưu tiên ngắt có thể được gán bằng cách sử dụng thanh ghi ưu tiên ngắt (IP)
Mức độ ưu tiên ngắt sau khi Đặt lại:

Sự ưu tiên
Nguồn ngắt
Intr. bit / cờ
1
Ngắt bên ngoài 0
INT0
2
Timer ngắt 0
TF0
3
Ngắt bên ngoài 1
INT1
4
Hẹn giờ gián đoạn 1
TF1
5
Ngắt nối tiếp
(TI / RI)

Trong bảng, ngắt các ưu tiên khi đặt lại được hiển thị. Theo 8.051 mức độ ưu tiên ngắt, các ngắt ưu tiên thấp nhất không được phục vụ cho đến khi vi điều khiển kết thúc với các ưu tiên cao hơn. Trong một trường hợp khi hai hoặc nhiều ngắt đến vi điều khiển hàng đợi chúng theo ưu tiên.
Đăng ký IP: Đăng ký ưu tiên ngắt
8051 có đăng ký ưu tiên ngắt để gán mức ưu tiên cho các ngắt.       
Đăng ký ưu tiên ngắt
Bit 7,6,5 - bit dự trữ.
Bit 4 - PS: Bit ngắt ưu tiên ngắt nối tiếp
            1 = Gán mức độ ưu tiên cao cho ngắt nối tiếp.
            0 = Gán mức ưu tiên thấp cho ngắt nối tiếp.
Bit 3 - PT1: Timer1 ngắt ưu tiên bit         
            1 = Gán mức độ ưu tiên cao cho ngắt Timer1.
            0 = Gán mức ưu tiên thấp cho ngắt Timer1.
Bit 2 - PX1: Ngắt bên ngoài 1 Ưu tiên Bit    
            1 = Gán mức ưu tiên cao cho ngắt External1.
            0 = Gán mức ưu tiên thấp cho ngắt External1.
Bit 1 - PT0: Timer0 Ngắt ưu tiên Bit         
            1 = Gán mức ưu tiên cao cho ngắt Timer0.
            0 = Gán mức ưu tiên thấp cho ngắt Timer0.
Bit 0 - PX0: External0 Interrupt Priority Bit     
            1 = Gán mức ưu tiên cao cho ngắt External0.
            0 = Gán mức ưu tiên thấp cho ngắt External0.

Ngắt ngoài trong 8051

  • 8051 có hai ngắt INT0 và INT1 bên ngoài.
  • Bộ điều khiển 8051 có thể bị gián đoạn bởi ngắt ngoài, bằng cách cung cấp mức hoặc cạnh trên các chân ngắt bên ngoài PORT3.2, PORT3.3.
  • Các thiết bị ngoại vi bên ngoài có thể làm gián đoạn vi điều khiển thông qua các ngắt bên ngoài này nếu các ngắt toàn cầu và bên ngoài được bật.
  • Sau đó, vi điều khiển sẽ thực thi lệnh hiện tại và nhảy tới chế độ ngắt dịch vụ gián đoạn (ISR) để ngắt.
  • Trong vi điều khiển phương pháp bỏ phiếu phải liên tục kiểm tra xung bằng cách giám sát pin, trong khi đó, trong phương pháp ngắt, vi điều khiển không cần thăm dò ý kiến. Bất cứ khi nào một vi điều khiển xảy ra gián đoạn phục vụ yêu cầu gián đoạn.
Ngắt bên ngoài có hai loại mức độ kích hoạt
  1. Cạnh được kích hoạt (Ngắt xảy ra khi phát hiện cạnh tăng / giảm)
  2. Cấp độ được kích hoạt (Ngắt xảy ra khi phát hiện mức cao / mức thấp)
Năm 8051, hai loại mức độ kích hoạt được sử dụng. Đó là,
Cấp thấp được kích hoạt
            Bất cứ khi nào một mức thấp được phát hiện trên pin INT0 / INT1 trong khi các ngắt toàn cầu và bên ngoài được kích hoạt, bộ điều khiển nhảy để làm gián đoạn thường trình dịch vụ (ISR) để phục vụ ngắt.
Đã kích hoạt cạnh giảm
            Bất cứ khi nào cạnh dưới được phát hiện trên chân INT0 / INT1 trong khi toàn cầu và ext. ngắt được kích hoạt, bộ điều khiển nhảy để làm gián đoạn dịch vụ thường xuyên (ISR) để phục vụ gián đoạn.
Có bốn bit cờ thấp hơn trong thanh ghi TCON được yêu cầu để chọn và giám sát trạng thái ngắt và trạng thái ISR ​​bên ngoài.

TCON: Đăng ký bộ đếm thời gian / bộ đếm
8051 TCON Đăng ký
Bit 3- IE1:      
       External Interrupt 1 cạnh cờ, được thiết lập bởi phần cứng khi ngắt trên INT1 pin xảy ra và xóa bằng phần cứng khi ngắt được xử lý.
Bit 2- IT1:
 Bit này chọn loại sự kiện ngắt bên ngoài trên chân INT1,
       1 = bộ gián đoạn trên cạnh giảm
       0 = bộ gián đoạn ở mức thấp
Bit 1- IE0:      
       Cờ ngắt Interrupt0, được thiết lập bởi phần cứng khi ngắt trên INT0 pin xảy ra và xóa bằng phần cứng khi ngắt được xử lý.
Bit 0 - IT0:
Bit này chọn kiểu sự kiện ngắt bên ngoài trên chân INT0.
1 = bộ gián đoạn trên cạnh giảm
0 = bộ gián đoạn ở mức thấp

Thí dụ

Hãy lập trình ngắt bên ngoài của AT89C51 sao cho, khi cạnh giảm được phát hiện trên pin INT0 thì vi điều khiển sẽ chuyển đổi chốt P1.0.
                   8051 Edge Triggered External interrupt

Các bước lập trình
  1. Bật tính năng ngắt toàn cục tức là EA = 1
  2. Cho phép ngắt bên ngoài tức là EX0 = 1
  3. Kích hoạt chế độ kích hoạt ngắt nghĩa là liệu ngắt được kích hoạt cạnh hay mức được kích hoạt, ở đây chúng ta sẽ sử dụng ngắt kích hoạt cạnh giảm, vì vậy hãy thực hiện IT0 = 1.

Chương trình


#include <reg51.h> /* Include x51 header file */
sbit LED = P1^0; /* set LED on port1 */ 

void Ext_int_Init()    
{
 EA  = 1; /* Enable global interrupt */
 EX0 = 1;       /* Enable Ext. interrupt0 */
 IT0 = 1;       /* Select Ext. interrupt0 on falling edge */
}
           
void External0_ISR() interrupt 0
{
 LED = ~LED; /* Toggle pin on falling edge on INT0 pin */
} 

void main()
{
 Ext_int_Init(); /* Call Ext. interrupt initialize */
 while(1);
}
Lưu ý: Đối với mức ngắt được kích hoạt cấp IT0 cần được xóa, ví dụ: IT0 = 0

No comments:

Post a Comment