DIV A B; A= 09 (th−ơng số) ;B =05 (số d−) Lu ý cỏc điểm sau khi thực hiện AB
Lập trỡnh cỏc ngắt
Một ngắt là một sự kiện bờn trong hoặc bờn ngoài làm ngắt bộ vi điều khiển để bỏo cho nú biết rằng thiết bị cần dịch vụ của nú. Trong chơng này ta tỡm hiểu khỏi niệm ngắt và lập trỡnh ngắt.
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). Trong phơng phỏp sử dụng cỏc ngắt thỡ mỗi khi cú một thiết bị bất kỳ cần đến dịch vơ cđa nó thì nó bao cho bộ vi điều khiển bằng cỏch gửi một tớn hiệu ngắt. 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ị. Chơng trỡnh đi cựng với ngắt đợc gọi là trỡnh dịch vụ ngắt ISR (Interrupt Service Routine) hay cũn gọi là trỡnh quản lý ngắt (Interrupt handler). Cũn trong phơng phỏp thăm dũ thỡ bộ vi điều khiển hiển thị liờn tục tỡnh trạng của một thiết bị đG cho và điều kiện thoả mGn thỡ nú phục vụ thiết bị. Sau đú nú chuyển sang hiển thị tỡnh trạng của thiết bị kế tiếp cho đến khi tất cả đều đợc phục vụ. Mặc dự phơng phỏp thăm dũ cú thể hiển thị tỡnh trạng của một vài thiết bị và phục vụ mỗi thiết bị khi cỏc điều kiện nhất định đợc thoả mGn nhng nó khơng tận dơng hết cộng dơng cđa bộ vi điều khiển. Đ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). Mỗi thiết bị cú thể nhận đợc sự chỳ ý của bộ vi điều khiển dựa trờn mức u tiờn đợc gỏn cho nú. Đối với phơng phỏp thăm dũ thỡ khụng thể gỏn mức u tiờn cho cỏc thiết bị vỡ nú kiểm tra tất cả mọi thiết bị theo kiểu hơi vũng. Quan trọng hơn là trong phơng phỏp ngắt thỡ bộ vi điều khiển cũng cũn cú thể che hoặc làm lơ một yờu cầu dịch vụ của thiết bị. Điều này lại một lần nữa khụng thể thực hiện đợc trong phơng phỏp thăm dũ. Lý do quan trọng nhất là phơng phỏp ngắt đợc u chuộng nhất là vỡ phơng phỏp thăm dũ làm lGng phớ thời gian của bộ vi điều khiển bằng cỏch hỏi dũ từng thiết bị kể cả khi chỳng khụng cần đến dịch vụ. Nhằm để trỏnh .. thỡ ng−ời ta sư dơng ph−ơng phỏp ngắt. Vớ dụ trong cỏc bộ định thời đợc bàn đến ở chơng 9 ta đG dựng lệnh JNB TF, đớch và đợi cho đến khi bộ định thời quay trở vỊ 0. Trong ví dơ đó, trong khi chờ đợi thỡ ta cú thể làm việc đợc gỡ khỏc cú ớch hơn, chẳng hạn nh khi sử dụng phơng phỏp ngắt thỡ bộ vi điều khiển cú thể đi làm cỏc việc khỏc và khi cờ TF bật lờn nú sẽ ngắt bộ vi điều khiển cho dự nú đang làm bất kỳ điều gỡ.
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. Đối với mỗi ngắt thỡ cú một vị trớ cố định trong bộ nhớ để giữ địa chỉ ISR của nú. Nhúm cỏc vị trớ nhớ đợc dành riờng để gửi cỏc địa chỉ của cỏc ISR đợc gọi là bảng vộc tơ ngắt (xem hỡnh 11.1).
11.1.3 Cỏc bớc khi thực hiện một ngắt.
Khi kớch hoạt một ngắt bộ vi điều khiển đi qua các b−ớc sau:
1. Nú kết thỳc lệnh đang thực hiện và lu địa chỉ của lệnh kế tiếp (PC) vào ngăn
lu vào ngăn xếp).
3. 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 lu
giữ địa chỉ của một trỡnh phục vụ ngắt.
4. Bộ vi điều khiển nhận địa chỉ ISR từ bảng vộc tơ ngắt và nhảy tới đú. 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).
5. Khi thực hiƯn lƯnh RETI bộ vi điỊu khiĨn quay trở về nơi nú đG bị ngắt. Trớc hết
nú nhận địa chỉ của bộ đếm chơng trỡnh PC từ ngăn xếp bằng cỏch kộo hai byte trờn đỉnh của ngăn xếp vào PC. Sau đú bắt đầu thực hiện cỏc lệnh từ địa chỉ đú.
Lu ý ở bớc 5 đến vai trũ nhạy cảm của ngăn xếp, vỡ lý do này mà chỳng ta phải cẩn thận khi thao tỏc cỏc nội dung của ngăn xếp trong ISR. Đặc biƯt trong ISR cịng nh− bất kỳ chơng trỡnh con CALL nào số lần đẩy vào ngăn xếp (Push) và số lần lấy ra từ nú (Pop) phải bằng nha
11.1.4 Sỏu ngắt trong 8051.
Thực tế chỉ cú 5 ngắt dành cho ngời dựng trong 8051 nhng nhiều nhà sản xuất đa ra cỏc bảng dữ liệu núi rằng cú sỏu ngắt vỡ họ tớnh cả lệnh tỏi thiết lập lại RESET. Sỏu ngắt của 8051 đợc phõn bố nh sau:
1. RESET: Khi chõn RESET đợc kớch hoạt từ 8051 nhảy về địa chỉ 0000. Đõy là
địa chỉ bật lại nguồn đợc bàn ở chơng 4.
2. Gồm hai ngắt dành cho cỏc bộ định thời: 1 cho Timer0 và 1 cho Timer1. Địa chỉ
của cỏc ngắt này là 000B4 và 001B4 trong bảng vộc tơ ngắt dành cho Timer0 và Timer1 tơng ứng.
3. Hai ngắt dành cho cỏc ngắt phần cứng bờn ngoài chõn 12 (P3.2) và 13 (P3.3) cđa
cỉng P3 là cỏc ngắt phần cứng bờn ngoài INT0 và INT1 tơng ứng. Cỏc ngắt ngoài cũng cũn đợc coi nh EX1 và EX2 vị trớ nhớ trong bảng vộc tơ ngắt của cỏc ngắt ngoài này là 0003H và 0013H gỏn cho INT0 và INT1 t−ơng ứng.
4. Trun thông nối tiếp cú một ngắt thuộc về cả thu và phỏt. Địa chỉ của ngắt này
trong bảng vộc tơ ngắt là 0023H.
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. Vớ dụ, đối với ngắt INT0 ngắt phần cứng bờn ngoài 0 thỡ cú tỉng cộng là 8 byte từ địa chỉ 0003H đến 000AH dành cho nú. Tơng tự nh− vậy, 8 byte từ địa chỉ 000BH đến 0012H là dành cho ngắt bộ định thời 0 là TI0. Nếu trỡnh phục vụ ngắt đối mặt với một ngắt đG cho mà ngắn đủ đặt vừa khụng gian nhớ đợc. Nếu khụng vừa thỡ một lệnh LJMP đợc đặt vào trong bảng vộc tơ ngắt để chỉ đến địa chỉ của ISR, ở trờng hợp này thỡ cỏc byte cũn lại đợc cấp cho ngắt này khụng dựng đến. Dới đõy là cỏc vớ dụ về lập trỡnh ngắt minh hoạ cho cỏc điều trỡnh bày trờn đõ
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. Đú là những vị trớ địa chỉ 0, 1 và 2 của ROM. Vị trớ địa chỉ 3 thuộc về ngắt phần cứng bờn ngoài 0 với lý do này trong chơng trỡnh chỳng ta phaỉ đặt lệnh LJMP nh là lệnh đầu tiờn và hớng bộ xử lý lệnh khỏi bảng vộc tơ ngắt nh chỉ ra trờn hỡnh 11.1.
Bật lại nguồn (RESET) 0000 9
Ngắt phần cứng ngoài (INT0) 0003 12 (P3.2)
Ngắt bộ Timer0 (TF0) 000B
Ngắt phần cứng ngoài 1 (INT1) 0013 13 (P3.3)
Ngắt bộ Timer1 (TF1) 001B
Ngắt COM nối tiếp (RI và TI) 0023
11.1.5 Cho phộp và cấm ngắt.
Khi bật lại nguồn thỡ tất cả mọi ngắt đều bị cấm (bị che) cú nghĩa là khụng cú ngắt nào sẽ đợc bộ vi điều khiển đỏp ứng nếu chỳng đợc kớch hoạt. Cỏc ngắt phải đợc kớch hoạt bằng phần mềm để bộ vi điều khiển đỏp ứng chỳng. Cú một thanh ghi đợc gọi là cho phộp ngắt IE (Interrupt Enable) chịu trỏch nhiệm vỊ viƯc cho phép (không che) và cấm (che) cỏc ngắt. 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). Bớt này phải đợc thiết lập lờn 1 để phần cũn lại của thanh ghi hoạt động đợc. Bớt D6 cha đợc sử dụng. Bớt D54 đợc dành cho 8051, cịn bít D4 dùng cho ngắt nối tiếp v.v…
11.1.6 Cỏc bớc khi cho phộp ngắt.
ĐĨ cho phộp một ngắt ta phải thực hiện cỏc bớc sau:
1. Bít D7 của thanh ghi IE là EA phải đợc bật lờn cao để cho phộp cỏc bớt cũn lại
của thanh ghi nhận đợc hiệu ứng.
2. Nếu EA = 1 thì tất cả mọi ngắt đều đợc phộp và sẽ đợc đỏp ứng nếu cỏc bớt
tơng ứng cđa chúng trong IE có mức caọ Nếu EA = 0 thỡ khụng cú ngắt nào sẽ đợc đỏp ứng cho dự bớt tơng ứng của nú trong IE cú giỏ trị ca
Để hiểu điểm quan trong này hGy xét ví dụ 11.1.
Hình 11.2: Thanh ghi cho phép ngắt IẸ
EA IẸ7 Nếu EA = 0 thỡ mọi ngắt bị cấm
Nếu EA = 1 thỡ mỗi nguồn ngắt đợc cho phộp hoặc bị cấm bằng các bật hoặc xoỏ bớt cho phộp của nú.
- - I6 Dự phũng cho tơng lai
ET2 IẸ5 Cho phép hoặc cấm ngắt tràn hoặc thu của Timer2 (8051)
ES I4 Cho phộp hoặc cấm ngắt cổng nối tiếp
ET1 IẸ3 Cho phộp hoặc cấm ngắt tràn của Timer1 EX1 IẸ2 Cho phép hc cấm ngắt ngoài 1
ET0 I1 Cho phộp hoặc cấm ngắt tràn của Timer0 EX0 IẸ0 Cho phộp hoặc cấm ngắt ngoài 0
* Ngời dựng khụng phải ghi 1 vào bớt dự phũng nà Bớt này cú thể dựng cho cỏc bộ vi điều khiển nhanh với đặc tớnh mới
Ví dụ 11.1: