« Home « Kết quả tìm kiếm

Lý thuyết lập trình cơ bản - Chương 10: Lập trình cắc ngắt


Tóm tắt Xem thử

- 11.1 Các ngắt của 8051..
- 11.1.1 Các ngắt ngược với thăm dò..
- Một bộ vi điều khiển có thể phục vụ một vài thiết bị, có hai cách để thực hiện điều này đó là sử dụng các ngắt và thăm dò (polling).
- Khi nhận được tín hiệu ngắt thì bộ vi điều khiển ngắt tất cả những gì nó đang thực hiện để chuyển sang phục vụ thiết bị..
- Điểm mạnh của phương pháp ngắt là bộ vi điều khiển có thể phục vụ được rất nhiều thiết bị (tất nhiên là không tại cùng một thời điểm).
- 11.1.2 Trình phục vụ ngắt..
- Đối với mỗi ngắt thì phải có một trình phục vụ ngắt ISR hay trình quản lý ngắt.
- khi một ngắt được gọi thì bộ vi điều khiển phục vụ ngắt.
- Khi một ngắt được gọi thì bộ vi điều khiển chạy trình phục vụ ngắt.
- 11.1.3 Các bước khi thực hiện một ngắt..
- Nó nhảy đến một vị trí cố định trong bộ nhớ được gọi là bảng véc tơ ngắt nới lưu giữ địa chỉ của một trình phục vụ ngắt..
- Nó bắt đầu thực hiện trình phục vụ ngắt cho đến lệnh cuối cùng của ISR là RETI (trở về từ ngắt)..
- 11.1.4 Sáu ngắt trong 8051..
- Chú ý rằng trong bảng 11.1 có một số giới hạn các byte dành riêng cho mỗi ngắt.
- Từ bảng 11.1 cùng để ý thấy một thực tế rằng chí có 3 byte của không gian bộ nhớ ROM được gán cho chân RESET.
- Bảng 11.1: Bảng véc tơ ngắt của 8051..
- Hình 11.2 trình bày thanh ghi IE, lưu ý rằng IE là thanh ghi có thể đánh địa chỉ theo bít..
- Từ hình 11.2 ta thấy rằng D7 của thanh ghi IE được gọi là bít cho phép tất cả các ngắt EA (Euable All).
- 11.1.6 Các bước khi cho phép ngắt..
- Hình 11.2: Thanh ghi cho phép ngắt IE..
- 11.2 Lập trình các ngắt bộ định thời..
- 11.2.1 Cờ quay về 0 của bộ định thời và ngắt..
- Nếu bộ ngắt định thời trong thanh ghi IE được phép thì mỗi khi nó quay trở về 0 cờ TF được bật lên và bộ vi điều khiển bị ngắt tại bất kỳ viẹc gì nó đang thực hiện và nhảy tới bảng véc tơ ngắt để phục vụ ISR.
- Xem hình 11.3 và ví dụ 11.2..
- Hình 11.3: Ngắt bộ định thời TF0 và TF1..
- Trong trình phục vụ ngắt ISR của Timer0 ta thấy rằng không cần đến lệnh “CLR TF0” trước khi lệnh RETI.
- Hãy sử dụng bộ Timer0 để tạo ra sóng vuông, tần số của 8051 là XTAL = 11.0592MHz..
- Trong ví dụ 11.2 trình phục vụ ngắt ISR ngắn nên nó có thể đặt vừa vào không gian địa chỉ dành cho ngắt Timer0 trong bảng véc tơ ngắt.
- Xét ví dụ 11.3 dưới đây..
- Hãy viết lại chương trình ở ví dụ 11.2 để tạo sóng vuông với mức cao kéo dài 1085μs và mức thấp dài 15μs với giả thiết tần số XTAL = 11.0592MHz.
- Ví dụ này tương tự ví dụ 9.12 ngoại trừ ngắt Timer0, giả sử XTAL = 11.0592MHz..
- Chương trình con phục vụ ngắt cho Timer0 CPL P1.2.
- 11.3 Lập trình các ngắt phần cứng bên ngoài..
- Khi kích hoạt những chân này thì 8051 bị ngắt tại bất kỳ công việc nào mà nó đang thực hiện và nó nhảy đến bảng véc tơ ngắt để thực hiện trình phục vụ ngắt..
- 11.3.1 Các ngắt ngoài INT0 và INT1..
- Như đã nói ở mục 11.1 thì chúng được ghép và bị cấm bằng việc sử dụng thanh ghi IE.
- 11.3.2 Ngắt theo mức..
- Sau đó bộ vi điều khiển dừng tất cả mọi công việc nó đang thực hiện và nhảy đến bảng véc tơ ngắt để phục vụ ngắt.
- Trình phục vụ ngắt ISR cho INT1 SETB P1.3 .
- 11.3.3 Trích mẫu ngắt theo mức..
- Theo bảng dữ liệu của nhà sản xuất của bộ vi điều khiển thì “chân ngắt phải được giữ ở mức thấp cho đến khi bắt đầu thực hiện trình phục vụ ngắt ISR.
- Hình 11.5: Thời gian tối thiểu của ngắt theo mức thấp (XTAL = 11.0592MHz).
- 11.3.4 Các ngắt theo sườn..
- Ví dụ, lệnh “SETB TCON.2” làm cho INT1 mà được gọi là ngắt theo sườn trong đó khi một tín hiệu chuyển từ cao xuống thấp được cấp đến chân P3.3 thì ở trường hợp này bộ vi điều khiển sẽ bị ngắt và bị cưỡng bức nhảy đến bảng véc tơ ngắt tại địa chỉ 0013H để thực hiện trình phục vụ ngắt.
- Hình 11.6: Thanh ghi TCON..
- Xét ví dụ 11.6, chú ý rằng sự khác nhau duy nhất giữa vì dụ này và ví dụ 11.5 là ở trong hàng đầu tiên của MAIN khi lệnh “SETB TCON.2” chuyển ngắt INT1 về kiểu ngắt theo sườn.
- Trong ví dụ 11.5 do bản chất ngắt theo mức của ngắt thì đèn LED còn sáng chừng nào tín hiệu ở chân INT1 vẫn còn ở mức thấp.
- Đây là phiên bản ngắt theo sườn xung của ví dụ 11.5 đã trình bày ở trên..
- Trình phục vụ ngắt ISR dành cho ngắt INT1 để bật đèn LED.
- Nhảy đến địa chỉ của trình phục vụ ngắt INT1 SETB P1.3 .
- 11.3.5 Trình mẫu ngắt theo sườn..
- Thời hạn xung tối thiểu để phát hiện ra các ngắt theo sườn xung với tần số XTAL = 11.0592MHz.
- Chúng hoạt động như các cờ “ngắt đang được phục vụ” (Interrupt-in- server).
- Khi các trình phục vụ ngắt ISR kết thúc (nghĩa là trong thanh ghi thực hiện lệnh RETI).
- Nó báo cho ta rằng trình phục vụ ngắt xắp kết thúc.
- 11.3.6 Vài điều bổ xung về thanh ghi TCON..
- 11.3.6.1 Các bít IT0 và IT1..
- 11.3.6.2 Các bít IE0 và IE1..
- Khi có chuyển dịch sườn xung trên chân INT0 (hay INT1) thì 8051 đánh dấu (bật lên cao) các bít IEx trên thanh ghi TCON nhảy đến bảng véc tơ ngắt và bắt đầu thực hiện trình phục vụ ngắt ISR..
- 11.3.6.3 Các bít TR0 và TR1..
- 11.3.6.4 Các bít TF0 và TF1..
- 11.4 Lập trình ngắt truyền thông nối tiếp..
- 11.4.1 Các cờ RI và TI và các ngắt..
- Nếu bít ngắt trong thanh gi IE (là bít IE.4) được phép khi RI và TI bật lên thì 8051 nhận được ngắt và nhảy đến địa chỉ trình phục vụ ngắt dành cho truyền thông nối tiếp 0023H trong bảng véc tơ ngắt để thực.
- Hình 11.7: Ngắt truyền thông có thể do hai cờ TI và RI gọi..
- 11.4.2 Sử dụng cổng COM nối tiếp trong 8051..
- Tương tự như vậy, ta sử dụng các ngắt nối tiếp khi nhận dữ liệu đi đến để sao chép cho nó không bị mất: Hãy xét ví dụ 11.9 dưới đây..
- Hãy viết chương trình trong đó 8051 đọc dữ liệu từ cổng P1 và ghi nó tới cổng P2 liên tục trong khi đưa một bản sao dữ liệu tới cổng COM nối tiếp để thực hiện truyền nối tiếp giả thiết tần số XTAL là 11.0592MHz và tốc độ baud là 9600..
- Nhảy đến trình phục vụ ngắt truyền thông nối tiếp.
- ---Trình phục vụ ngắt cổng nối tiếp.
- Trở về từ trình phục vụ ngắt.
- Giả thiết tần số XTAL là 11.0592MHz và tốc độ baud 9600..
- ---Trình phục vụ ngắt cổng nối tiếp..
- 11.4.3 Xoá cờ RI và TI trước lệnh RETI..
- Hãy xét ví dụ 11.10 dưới đây và để ý đến các lệnh xoá cờ ngắt trước lệnh RETI..
- Ví dụ 11.10:.
- c) Sử dụng Timer0 tạo sóng vuông tần số 5kHz trên chân P0.1 giảt thiết tần số XTAL = 11.0592MHz và tốc độ baud 4800..
- Trình phục vụ ngắt dành cho Timer0 CPL P0.1 : Tạo xung ở chân P0.1.
- Trình phục vụ ngắt cổng nối tiếp..
- Bảng 11.2: Các bít cờ ngắt..
- 11.5 Các mức ưu tiên ngắt trong 8051..
- 11.5.1 Các mức ưu tiên trong quá trình bật lại nguồn..
- Trong thực tế sơ đồ mức ưu tiên ngắt trong bảng không có ý nghĩa gì cả mà một quy trình thăm dò trong đó 8051 thăm dò các ngắt theo trình tự cho trong bảng 11.3 và đáp ứng chúng một cách phù hợp..
- Bảng 11.3: Mức ưu tiên các ngắt trong khi cấp lại nguồn..
- Nếu một ngắt bất kỳ được kích hoạt thì nó được phục vụ theo trình tự.
- Hình 11.8: Thanh ghi mức ưu tiên ngắt IP, bít ưu tiên = 1 là mức ưu tiên cao, bít ưu tiên = 0 là mức ưu tiên thấp..
- 11.5.2 Thiết lập mức ưu tiên ngắt với thanh ghi IP..
- Chúng ta có thể thay đổi trình tự trong bảng 11.3 bằng cách gán mức ưu tiên cao hơn cho bất kỳ ngắt nào.
- Trên hình 11.8 là các bít của thanh ghi này, khi bật lại nguồn thanh thi 1P chứa hoàn toàn các số 0 để tạo ra trình tự ưu tiên ngắt theo bảng 11.3.
- Hãy xem ví dụ 11.12..
- Trong trường hợp này thì trong khi các ngắt này có mức ưu tiên cao hơn các ngắt khác chúng sẽ được phục vụ theo trình tự cho trong bảng 11.3.
- Xem ví dụ 11.13..
- Ví dụ 11.12:.
- Sau khi thực hiện song ngắt INT1 thì 8051 trở về phục vụ ngắt còn lại theo trình tự ưu tiên trong bảng 11.3..
- Ví dụ 11.13:.
- Hãy bình luận về quá trình các ngắt được phục vụ như thế nào?.
- Tuy nhiên, vì chúng được thăm dò theo bảng 11.3 nên chúng sẽ được phục vụ theo trình tự sau:.
- 11.5.3 Ngắt trong ngắt..
- 11.5.4 Thu chộp ngắt bằng phần mềm (Triggering)..
- Mỗi một ngắt có một chương trình đi kèm với nó được gọi là trình phục vụ ngắt ISR

Xem thử không khả dụng, vui lòng xem tại trang nguồn
hoặc xem Tóm tắt