MỞ ĐẦU Ngắt Interrupt là một sự việc xảy ra khi có một sự tác động, một điều kiện làm cho chương trình đang thực hiện bị tạm ngưng trong khi điều kiện này sẽ thực hiện một chương trình k
Trang 1TRƯỜNG ĐẠI HỌC KHOA HỌC
KHOA CÔNG NGHỆ THÔNG TIN DANH MUC TU VIET TAT MAIN PROGRAM : Chuong trinh chinh
ISR (Interrupt Service Routine) : Trinh phục vụ ngắt
Port : Cong
RETI (Return From Interrupts) : Lénh tro vé tir chirong SỐ PHACHE wsesssesersseeoee RET (Retum) : Lệnh trở về từ chương trình con
Clear : Làm sạch
Trình bày về hoạt động ngắt của 89C5I - Lập trình
ví dụ về một ngắt của bộ truyền thông nối tiếp
KIÊN TRÚC MÁY TÍNH —~ NHÓM 3 - 2021-2022.1.TIN2013.003 GIANG VIEN HUONG DAN: PHAN HAI PHONG
HUE, THANG 1 NAM 2022
Trang 2
MỤC LỤC
2 TRINH BAY VE HOAT DONG NGAT CUA 89C5I 5- 55c 5< 2
2.3 THANH GHI CHO PHEP NGAT ccscsssssssesssssssssesssssssssssscesessssassesssesseesseseecenes 4
3 VÍ DỤ VỀ MỘT NGẮT CỦA BỘ TRUYÊN THÔNG NÓI TIÉP 8
Trang 31 MỞ ĐẦU
Ngắt (Interrupt) là một sự việc xảy ra khi có một sự tác động, một điều kiện làm cho chương trình đang thực hiện bị tạm ngưng trong khi điều kiện này sẽ thực hiện một chương trình khác trong lúc ngắt được diễn ra Ngắt đóng vai trò quan trọng trong việc thiết kế và thực hiện được các ứng dụng của vi điều khiển một cách thuận tiện Ngắt cho phép hệ thống không diễn ra theo đúng trật tự theo dòng thời gian mà các ngat sé tac động và thay đổi theo chương trình mà nó đã được lập trình Nói cách khác, noắt cho phép một chương trình khác chạy trong khi đang tạm ngưng chương trình chính
Vi xử lí sẽ không thể chạy cùng một lúc nhiều chương trình, nhưng nếu áp dụng noắt đề thực hiện một chương trình khác, rồi sau đó quay trở lại thực hiện tiếp chương
trình chính còn đang dang đở Điều nảy giống như việc vi xử lí rời khỏi chương trình
chính và gọi đến chương trình con rồi sau đó lại quay về chương trình chính
Chương trình xử lí ngắt được gọi là “Chương trình phục vụ ngắt ISR”, trong đó ISR là từ viết tắt của Interrupt Service Routine Khi gặp lệnh ngắt, chương trình sẽ được ngắt và gọi đến chương trình con, chương trình chính sẽ được thực hiện tiếp nêu gap dòng lệnh RETI ở chương trình con
Trang 42 TRINH BAY VE HOAT DONG NGAT CUA 89C51
2.1 KHAI NIEM VE NGAT
- Ngat là việc xảy ra một sự kiện làm cho chương trình hiện hành bị tạm ngưng
trong khi một điều kiện khác được thực hiện trong khoảng thời sian chương trình
chính đang xảy ra ngắt
- Ngat không phải là một thiết bị ngoại vị, thật ra ngắt là một tổ chức được tích
hợp vào trong các vi xử lí để giúp nó có những ưu tiên trong hoạt động của nó
H AO?
- Bộ “Timers (b6 dinh thoi)” hay b6 “Truyén thông nỗi tiếp đều có tích hợp cả noắt vào trong đó
- Hình ảnh minh hoạ
dòng thời gian
MAIN PROGRAM Chương trình không có ngắt
dòng thời gian
Chương trình có ngắt
- Như hình minh hoạ ta thấy lúc chương trình chính được sử dụng ngắt thì bất kì tại thời điểm nào mà nó xảy ra sự kiện goi đến ngắt thì chương trình chính sẽ dừng lại tại thời điêm mà ngắt được phát sinh và sau đó khí chương trình chính dừng lại,
nó sẽ gọi đến chương trình con, được gọi là chương trình phục vụ ngắt - ISR Khi chương trình ngắt được thực hiện xong thì chương trình chính sẽ tiếp tục được chạy tại vị trí mà nó đã dừng trước đó, nghĩa là nó đang dừng ở câu lệnh nảo thì sau trình phục vụ ngắt được thực hiện xong nó sẽ tiếp tục thực hiện ngay tại vị trí của câu
lệnh mà nó đã dừng trước đó
- Các sự kiện ngắt sẽ xảy ra ngẫu nhiên suốt chương trình chính, việc này làm cho
2
Trang 5chương trình ngắt khác với chương trình con Chương trình phục vụ ngắt sẽ được gọi bởi sự kiện phát sinh và sự kiện đó là ngẫu nhiên, chúng ta sẽ không biết trước tại thời điểm nào nó xảy ra, khi xảy ra nó sẽ gọi đến các chương trình ngắt ISR Trong khi đó, một chương trình con hay một hàm, khi được gọi tại vị trí nào trone chương trình chính thi chúng ta đã biết trước được vị trí đó, không có một sự ngẫu nhiên nào và chương trình con là một phần của chương trình chính và nó chạy tuần tự theo dòng thời gian, còn ISR sẽ phát sinh đột xuất Đó chính là quy tắc cơ bản nhất của “Chương
trinh phục vụ ngắt —ISR”
2.2 TO CHUC NGAT
- Về mặt tổ chức, các sự kiện có thê làm cho chương trình chính bị dừng lại thì được gọi là nguyên nhân ngắt 89C51 có 5 nguyên nhân ngắt :
® 2 ngắt ngoài
«2 ngắt do bộ định thời
® 1 noắt do port nối tiếp -2 ngat ngoài : khi có một sự kiện xảy ra ở chân P3.2 và P3.3 thì nó sẽ gọi đến hai ngắt ngoài
-2 ngắt do bộ định thời : khi chúng ta đếm trên các bộ định thời, khi bộ định thời tràn thì chúng ta không biết được, trong khi thực hiện các câu lệnh khiến cờ tràn xảy ra trước khi tới câu lệnh kiểm tra cờ tràn, như vậy việc ngắt sẽ cho phép bộ định thời tạm dừng chương trình chính lại và báo cờ tràn đã được đưa lên 1 và xử lí việc đã đếm xong hay chưa Ở đây chúng ta có quyền xử lí hoặc không, nhưng quan trọng là nó sẽ ngat, tam dừng chương trình chính cho chúng ta phục vụ một công việc nảo đó
- | ngat đo port nối tiếp : tương tự như ngắt do bộ định thời, nó cũng sẽ có một ngắt và nó sẽ báo hiệu cho chúng ta biết bất kì khi nào có một dữ liệu truyền tới hoặc một đữ liệu sẵn sàng truyền đi thì nó sẽ phát sinh một ngắt Như vậy trong suốt quá trinh chương trình chính được hoạt động, nếu như chạy tuần tự cả ngản dòng lệnh được gửi tới thì chúng ta sẽ phải đợi kiểm tra thanh ghi SBUE, các cờ báo thì mới đọc
dữ liệu vào là quá trễ Trong khi đó bên kia cần gửi gấp, thì lúc đó chúng ta chúng ta
sẽ gọi tới ngắt của port nối tiếp
- Tại | thoi điểm xảy ra 2 hoặc 3 ngắt xảy ra đồng thời, lúc đó sẽ xảy ra xung đột
Trang 6với nhau, thì sẽ co “So dé xu li ngắt” Sơ đồ xử lí ngắt sẽ cho phép vi xử lí biết được ngắt nao được ưu tiên và tuỳ vào sơ dé ngat có ưu tiên cao sẽ được xử lí trước, theo thứ tự mới đến ngắt phát sinh tiếp theo Có 2 kiểu sơ đỗ xử lí ngắt trong 89C51:
© Sơ đồ chuỗi vòng
© Sơ đồ hai mức ưu tiên
- Sơ đồ chuỗi vòng sẽ quy định thứ tự ngắt cho cái nào đứng đầu tiên, tiếp theo là đứng thứ hai, thứ ba, thứ tư, đến khi nảo gặp nhiều hơn một ngắt được phát sinh thi
nó sẽ dò chuỗi, ngắt nào đứng trước thì sẽ xảy ra trước, ngắt nào đứng sau thì xảy ra sau
- Sơ đồ hai mức ưu tiên sẽ cho phép lập trình lại thứ tự của ngắt này so với ngắt kia Ví dụ trong một chương trình nào đó, ngắt ngoài có ưu tiên cao hơn công nối tiếp, nhưng với sơ đồ hai mức ưu tiên ta có thể đôi lại thứ tự xử lí ngắt
2.3 THANH GHI CHO PHÉP NGẮT
- Mỗi nguyên nhân noắt được cho phép hoặc không thông qua thanh ghi cho phép
ngat IE co dia chỉ 0A8H
- Thanh ghi quan trong nhat chinh là thanh ghi JE (Interrupt Enable), ching ta sé báo cho vi xử lí biết rằng có sử dụng ngắt hay không IE là thanh ghi được định địa chỉ BIT, do đó từng BTT trong IE chúng ta có thê SET hoặc CLEAR nó một cách độc lập
- Một số thanh phi :
IE.7 EA AFH Cho phép/không cho phép toàn cục
IE.6 - AEH Không sử dụng
IE.4 ES ACH Cho phép ngắt đo port nối tiếp
TE.1 ETO A9H Cho phép ngắt do bộ định thời 0
4
Trang 72.4 UU TIEN NGAT
- Mỗi nguyên nhân ngắt được lập trình đê có một trong hai mức ưu tiên ngắt thông qua thanh ghi ưu tiên ngắt IP có địa chỉ 0B8H
IP.7 - Không sử dụng
IP.6 - Không sử dụng
IP.4 PS BCH Ưu tiên ngắt do port nỗi tiếp
2.5 SƠ ĐỎ CHUÔI VÒNG
- Việc chuỗi vòng xác định ngắt ngao duoc uu tiên phục vụ trước đều có quy định trước gọi là “Mức độ ưu tiên”
- Mức độ ưu tiên:
© Ngắt ngoài 0
° Ngắt do bộ định thời 0
® Ngắt ngoài l
° Ngắt do bộ định thời 1
© Ngắt do port nỗi tiếp
2.6 XU LI NGAT
- Khi ngắt được phát sinh, ngắt sẽ được diễn ra các quá trình như sau :
® Hoàn tất việc thực thi lệnh hiện hành
e© Bộ đếm chương trình PC được cất vào stack
® Trạng thái của ngắt hiện hành được lưu g1ữ lại
® Các ngắt được chặn lại ở mức ngắt
se Bộ đếm chương trình PC được nạp địa chỉ vector của trình phục vụ ngắt ISR
Trang 8® ISR được thực thi
- Việc thực thi ISR kết thúc khi gap lénh RETI Lénh nay lay lại p1á trị cũ cua bộ đếm chương trình PC từ stack và phục hồi trạng thái của ngắt cũ
2.7 CAC VECTOR NGAT
- Giá trị được nạp cho bộ đếm chương trình được gọi là vector ngắt
- Vector ngắt chính là địa chỉ bắt đầu của trình phục vụ ngắt của nguyên nhân tương ứng
- Khi trình gây ngắt được trỏ tới, cờ gây ngắt tự động bị xoá bởi phần cứng,
ngoại trừ cờ RI và TÌ
- Vector ngắt chỉ là một ô nhớ mà chương trình bắt buộc nhảy tới khi mà ngắt tương ứng được phát sinh Ô nhớ trong 89C51 được quy định địa chỉ như sau :
- Ở đây ví dụ khi reset hệ thống có thê xem như là một ngắt chính và địa chỉ nó
sẽ nhảy tới là 0000H, tức là khi reset thì bộ đếm chương trình sẽ quay lại từ ô nhớ đầu tiên của chương trình
- Mỗi địa chỉ cách nhau khoảng 8 byte, vì vậy lúc nào chương trình chính cũng bắt đầu từ 0x30, vì cứ cộng 8 như vậy thì đến công nối tiếp là 0023H cộng 8 nữa là đến 0030H sẽ hết vùng nhớ của ngắt, nên nó sẽ đi tới vùng chương trình chính
- Thông thường chúng ta chỉ viết trong khoảng có phép của địa chỉ
2.8 TRÌNH PHỤC VỤ NGẮT KÍCH THƯỚC NHỎ
- Các câu lệnh trong trình phục vụ ngắt kích thước nhỏ không quá 8 byte Không cần biết trong chương trình có bao nhiêu lệnh, nhưng khi biên dịch vượt quá 8 byte sẽ
6
Trang 9gây ra lỗi Như vậy thông thường chỉ nên lựa chọn 3-4 lệnh, nếu 1 lệnh 1 byte thì nhiều nhất sẽ là 8 lệnh
- Các trình phục vụ phải được bắt đầu ở gan đáy của bộ nhớ
2.9 TRÌNH PHỤC VỤ NGẮT KÍCH THƯỚC LỚN
- Với trình phục vụ ngắt lon hon 8 byte, ta phải chuyền chương trình này đến một nơi khác trong bộ nhớ chương trình hoặc lắn qua điểm nhập của ISR khác
- Ví dụ ta có thế dùng lệnh JMP đề nhảy đến 1 chương trình ngat trong MAIN, vi trong MAIN không giới hạn byte, và ngoài MAIN lệnh JMP chỉ chứa 2 byte
- Trong mọi trường hợp ta nên sử dụng trình phục vụ ngắt kích thước lớn dé han chế khả năng xảy ra lỗi tràn nếu vượt quá 8 byte
- Trình phục vụ ngắt trong MAIN duoc viết tương tự một chương trình con, bắt
đầu bởi nhãn tên của trình phục vụ ngắt và kết thúc khi gặp lệnh RETI
2.10 GIỚI THIỆU MỘT SÓ NGẮT
- Ngắt đo port nối tiếp :
+ Xuất hiện khi cờ ngắt phát TI hoặc cờ ngắt thu RI duoc set bằng 1
© Neat phat (TI) xuất hiện khi việc phát một kí tự đã ghi vào SBUF hoàn tất
(SBUF rỗng)
° Ngắt thu (RI) xuất hiện khi một kí tự được thu đầy đủ và đang ở trong
SBUF (SBUF day)
+ Cờ ngắt do port nối tiếp gây ra không được xoá bởi phần cứng Nghĩa là chúng ta phải xoá nó bởi phần mềm, sau khi ngắt được phát sinh xong, chúng ta phải clear bít TI hoặc RI để chuẩn bị cho lần thu phát tiếp theo
- Các ngắt ngoài
+ Ngắt ngoài sẽ xảy ra khi có mức thấp hoặc cạnh âm ở trên chân /INT0 và ÑNTI
+ Cờ tạo ra các ngắt: bít IE và IE1 của thanh ghi TCON
® Cờ tạo ra ngắt được xoá bởi phần cứng nếu là ngắt thuộc loại tác động cạnh
¢ Néu ngat thuộc loại tác động mức, nguyên nhân ngắt sẽ điều khiển mức của
co
Trang 10+ Việc chọn loại tác động ngắt là cạnh hay mức được thực hiện thông qua bít ITO va IT1 cua TCON
- Bộ định thời
+ Bộ định thời cũng tương ứng đều là có các ngắt phát sinh PX0 hoặc PXI và nếu như các cờ này khi sử dụng ngắt và được set bằng 1 thì ta biết bộ đếm đã tran va một trình phục vụ ngắt được gọi đến đề xử lí việc tràn
3 VIDU VE NGAT CUA BO TRUYEN THONG NOI TIEP
- Cu thé ta cd dong code assembly nhw sau :
org 0x00
ajmp main
org 0x03
mov r1,#48 jmp So reti
org 0x30
main:
mov 12,#65 mov TMOD, #20H mov TH1,#0FDH mov SCON,#52H setb TR1 setb EA setb EXO display 1:
job TI,$
mov SBUF,r2 clr TI Ine r2 acall delay cjne r2,#91 ,display 1 Jmp main
Trang 11So:
jnb TL$
mov SBUF,rl clr TI acall delay inc rl cJne r1,#58,So reti
delay:
mov R3,#255
mov R4,#255
lap 1:
lap:
nop nop nop djnz R3,lap djnz R4,lap1
ret ret
end
- Dau tiên ta truyền giá trị đầu tiên vào thanh ghi R1 với giá trị 48, nghĩa là chữ
A trong bảng chữ cái mã HEX, tiếp theo là câu lệnh nhảy đến nhãn SO vả kết thúc chương trình ngắt
- Tiếp theo đến chương trình chính ta truyền vào thanh ghi R2 gia tri 65, tong Ứng với s6 0 trong mã HEX, câu lệnh tiếp theo chọn bộ TIMER0, chế độ 2 tự nạp lại Sau đó ta cài đặt tốc độ 9600 baud, cho phép bộ truyền thông nối tiếp hoạt động, tiếp theo ta cho phép bộ định thời hoạt động và hai câu lệnh tiếp theo dùng đề cho phép ngat và ngắt ngoài 0
- Đến với nhãn “display 1”, ở đây ta có nếu ta nhắn nút thì truyền R2 vào trong thanh ghi SBUF, sau do clear co TI, tang gia tri cua R2 lên 1 don vi, go1 ham “delay”
và câu lệnh cuối nghĩa là khi R2 vượt quá giá trị 91 thì sé quay lại nhãn “display 1”
- Đến với chương trình phục vụ ngắt có nhãn “SO”, cũng tương tự như nhãn
“đisplay 1”, khác mỗi nếu R1 vượt quá giá tri 58 thi sẽ quay lại nhãn “SO” Cuối cùng
9