DIV A B; A= 09 (th−ơng số) ;B =05 (số d−) Lu ý cỏc điểm sau khi thực hiện AB
b) CLR IẸ1 ; Xoỏ (che) ngắt Timer0 c) CLR IẸ7 ; Cấm tất cả mọi ngắt.
SETB TR0 HERE: SJMP HERE
HERE: SJMP HERE
END
11.3 Lập trỡnh cỏc ngắt phần cứng bờn ngoà
Bộ vi điỊu khiĨn 8051 cú hai ngắt phần cứng bờn ngoài là chõn 12 (P3.2) và chõn 13 (P3.3) dựng cho ngắt INT0 và INT1. 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.
Chỉ cú hai ngắt phần cứng ngoài trong 8051 là INT0 và INT1. Chỳng đợc bố trớ trờn chõn P3.2 và P3.3 và địa chỉ của chỳng trong bảng vộc tơ ngắt là 0003H và 0013H. Nh− đG 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 I Vậy chỳng đợc kớch hoạt nh thế nà Cú hai mức kớch hoạt cho cỏc ngắt phần cứng ngoài: Ngắt theo mức và ngắt theo sờn. Dới đõy là mụ tả hoạt động của mỗi loạ
11.3.2 Ngắt theo mức.
ở chế độ ngắt theo mức thỡ cỏc chõn INT0 và INT1 bỡnh thờng ở mức cao
(giống nh tất cả cỏc chõn của cỉng I/O) và nếu một tín hiƯu ở mức thấp đợc cấp tới chỳng thỡ nú ghi nhGn ngắt. Sau đú bộ vi điều khiển dừng tất cả mọi cụng việc nú
P1.2 8051 8051 50Hz square ware IE0 (TCON.1) INTO (Pin 3.2) Level - tringgered Edge - triggered 0003 ITO 0 1 IE0 (TCON.3) INTO (Pin 3.3) Level - tringgered Edge - triggered 0013 IT1 0 1
ngắt đợc kớch hoạt theo mức hay ngắt theo mức và là chế độ ngắt mặc định khi cấp ngn lại cho 8051. Tín hiƯu mức thấp tại chõn INT phải đợc lõýu đi trớc khi thực hiện lệnh cuối cựng của trỡnh phục vụ ngắt RETI, nếu khụng một ngắt khỏc sẽ lại đợc tạo r Hay núi cỏch khỏc, nếu tớn hiệu ngắt mức thấp khụng đợc lấy đi khi ISR kết thúc thì nú khụng thể hiện nh một ngắt khỏc và 8051 nhảy đến bảng vộc tơ ngắt để thực hiện ISR. Xem vớ dụ 11.5.
Ví dụ 11.5.
Giả sư chõn INT1 đợc nối đến cụng tắc bỡnh thờng ở mức ca Mỗi khi nú xuống thấp phải bật một đốn LED. Đốn LED đợc nối đến chõn P1.3 và bỡnh thờng ở chế độ tắt. Khi nú đợc bật lờn nú phải sỏng vài phần trăm giõ Chừng nào cụng tắc đợc ấn xuống thấp đốn LED phải sỏng liờn tục.
Lời giải:
ORG 0000H
LJMP MAIN ; Nhảy đến bảng vộc tơ ngắt ; - - Chơng trỡnh con ISR cho ngắt cứng INT1 đĨ bật đèn LED.
ORG 0013H ; Trỡnh phục vụ ngắt ISR cho INT1 SETB P1.3 ; Bật đèn LED
MOV R3, # 255 ;
BACK: DJNZ R3, BACK ; Giữ đốn LED sỏng một lỳc CLR P1.3 ; Tắt đốn LED
RETI ; Trở về từ ISR
; - - Bắt đầu chơng trỡnh chính Main. ORG 30H
MAIN: MOV IE, #10000100B ; Cho phộp ngắt dài
SJMP HERE ; Chờ ở đõy cho đến khi đợc ngắt END
ấn cụng tắc xuống sẽ làm cho đốn LED sỏng. Nếu nú đợc giữ ở trạng thỏi
đợc kớch hoạt thỡ đốn LED sỏng liên tơc.
Trong chơng trỡnh này bộ vi điều khiển quay vũng liờn tục trong vũng lặp HER Mỗi khi cụng tắc trờn chõn P3.3 (INT1) đợc kớch hoạt thỡ bộ vi điều khiển thoỏt khỏi vũng lặp và nhảy đến bảng vộc tơ ngắt tại địa chỉ 0013H. Trỡnh ISR cho INT1 bật đèn LED lờn giữ nú một lỳc và tắt nú trớc khi trở vỊ. Nếu trong lúc nó thực hiện lệnh quay trở về RET1 mà chõn INT1 vẫn cũn ở mức thấp thỡ bộ vi điều khiển khởi tạo lại ngắt. Do vậy, để giải quyết vấn đề này thỡ chõn INT1 phải đợc đa lờn cao tại thời điểm lệnh RET1 đợc thực hiện.
11.3.3 Trích mẫu ngắt theo mức.
INTI 8051 8051
P1.3 LED to
và INT1 trong thanh ghi IE khụng đợc kớch hoạt. Sau khi cỏc ngắt phần cứng trong thanh gi IE đợc kớch hoạt thỡ bộ vi điều khiển duy trỡ trớch mẫu trờn chõn INTn đối với tín hiƯu mức thấp một lần trong một chu trỡnh mỏ 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. Nếu chõn INTn đợc đa trở lại mức cao trớc khi bắt đầu thực hiện ISR thỡ sẽ chẳng cú ngắt nào xảy ra. Tuy nhiờn trong quỏ trỡnh kớch hoạt ngắt theo mức thấp nờn nú lại phải đa lờn mức cao trớc khi thực hiện lệnh RET1 và lại theo bảng dữ liệu của nhà sản xuất thỡ nếu chõn INTn vẫn ở mức thấp sau lƯnh RETI cđa trình phơc vụ ngắt thỡ một ngắt khỏc lại sẽ đợc kích hoạt sau khi lệnh RET1 đợc thực hiện. Do vậy, để bảo đảm việc kớch hoạt ngắt phần cứng tại cỏc chõn INTn phải khẳng định rằng thời gian tồn tại tớn hiệu mức thấp là khoảng 4 chu trỡnh mỏy và khụng đợc hơn. Điều này là do một thực tế là ngắt theo mức khụng đợc chốt. Do vậy chõn ngắt phải đ−ỵc gi−a ở mức thấp cho đến khi bắt đầu thực hiện 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.
Nh− đG nói ở trớc đõy trong quỏ trỡnh bật lại nguồn thỡ 8051 làm cỏc chõn INT0 và INT1 là cỏc ngắt theo mức thấp. Để biến cỏc chõn này trở thành cỏc ngắt theo sờn thỡ chỳng ta phải viết chnơg trỡnh cho các bít cđa thanh ghi TCON. Thanh thi TCON giữ cỏc bớt cờ IT0 và IT1 xỏc định chế độ ngắt theo sờn hay ngắt theo mức của cỏc ngắt phần cứng IT0 và IT1 là cỏc bớt D0 và D2 cđa thanh ghi TCON t−ơng ứng. Chúng có thĨ đợc biểu diễn nh TCON.0 và TCON.2 vỡ thanh ghi TCON cú thể đỏnh địa chỉ theo bớt. Khi bật lại nguồn thỡ TCON.0 (IT0) và TCON.2 (IT1) đều ở mức thấp (0) nghĩa là cỏc ngắt phần cứng ngoài của cỏc chõn INT0 và INT1 là ngắt theo mức thấp. Bằng việc chuyển cỏc bớt TCON.0 và TCON.2 lờn cao qua các lƯnh “SETB TCON.0” và SETB TCON.2 thỡ cỏc ngắt phần cứng ngoài INT0 và INT1 trở thành 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 chun 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. Tuy nhiờn là với giải thiết rằng bớt ngắt đG đợc cho phộp trong thanh ghi IẸ
1 chu trỡnh mỏy 1.085às 4 chu trỡnh mỏy (4MC) 4 ì 1.085às đến chõn INT0 hc INT1 Ghi chú: Khi bật lại nguồn (RESET) thỡ cả hai chõn INT0 và INT1 đỊu ở mức thấp tạo cỏc ngắt ngồi theo mức.
Hình 11.6: Thanh ghi TCON.
• Bít TF1 hay TCON.7 là cờ tràn của bộ Timer1. Nú đợc lập bởi phần cứng khi
bộ đếm/ bộ định thời 1 tràn, nú đợc xoỏ bởi phần cứng khi bộ xử lý chỉ đến trỡnh phơc vơ ngắt.
• Bít TR1 hay TCON.6 là bít điều khiển hoạt động của Timer1. Nú đợc thiết lập
và xoỏ bởi phần mềm để bật/ tắt Timer1.
ó Bớt TF0 hay TCON.5 tơng tự nh TF1 dành cho Timer0.
• Bít TR0 hay TCON.4 tơng tự nh TR1 dành cho Timer0.
• Bít IE1 hay TCON.3 cờ ngắt ngoài 1 theo sờn. Nú đợc thiết lập bởi CPU khi
s−ờn ngắt ngoài (chun từ cao xng thấp) đợc phỏt hiện. Nú đ−ỵc xóa bởi CPU khi ngắt đợc xử lý. Lu ý: Cờ này khụng chốt những ngắt theo mức thấp.
• Bít IT1 hay TCON.2 là bớt điều khiển kiểu ngắt. Nú đợc thiết lập và xoỏ bởi
phần mềm để xỏc định kiểu ngắt ngoài theo s−ờn xuống hay mức thấp.
• Bớt IE0 hay TCON.1 tơng tự nh IE1 dành cho ngắt ngồi 0.
ó Bớt IT0 hay TCON.0 tơng tự nh bớt IT1 dành cho ngắt ngồi 0.
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” chun ngắt INT1 vỊ kiĨu ngắt theo s−ờn. Khi sờn xuống của tớn hiệu đợc cấp đến chõn INT1 thỡ đốn LED sẽ bật lờn một lỳc. Đốn LED cú thời gian sỏng phụ thuộc vào độ trễ bờn trong ISR của INT1. Để bật lại đốn LED thỡ phải cú một sờn xung xuống khỏc đợc cấp đến chõn P3.3. Điều này ngợc với vớ dụ 11.5. 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. Nhng trong vớ dụ này để bật lại đốn LED thỡ xung ở chõn INT1 phải đợc đa lờn cao rồi sau đú bị hạ xuống thấp để tạo ra một sờn xuống làm kớch hoạt ngắt.
Vớ dụ 11.6:
Giả thiết chõn P3.3 (INT1) đợc nối với một mỏy tạo xung, hGy viết một chơng trỡnh trong đú s−ờn xng cđa xung sẽ gưi một tín hiƯu cao đến chõn P1.3 đang đợc nối tới đốn LED (hoặc một cũi bỏo). Hay núi cỏch khỏc, đốn LED đợc bật và tắt cựng tần số với cỏc xung đợc cấp tới chõn INT1. Đõy là phiờn bản ngắt theo s−ờn xung của ví dụ 11.5 đG trỡnh bày ở trờn.
Lời giải: