1. Trang chủ
  2. » Cao đẳng - Đại học

Lập trình các ngắt các vi điều khiển 8051

18 85 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 18
Dung lượng 177,74 KB

Nội dung

Chương 11 Lập trình ngắt Một ngắt kiện bên bên làm ngắt vi điều khiển để báo cho biết thiết bị cần dịch vụ Trong chương ta tìm hiểu khái niệm ngắt lập trình ngắt 11.1 Các ngắt 8051 11.1.1 Các ngắt ngược với thăm dò Một vi điều khiển phục vụ vài thiết bị, có hai cách để thực điều sử dụng ngắt thăm dò (polling) Trong phương pháp sử dụng ngắt có thiết bị cần đến dịch vụ bao cho vi điều khiển cách gửi tín hiệu ngắt Khi nhận tín hiệu ngắt vi điều khiển ngắt tất thực để chuyển sang phục vụ thiết bị Chương trình với ngắt gọi trình dịch vụ ngắt ISR (Interrupt Service Routine) hay gọi trình quản lý ngắt (Interrupt handler) Còn phương pháp thăm dò vi điều khiển hiển thị liên tục tình trạng thiết bị đà cho điều kiện thoả mÃn phục vụ thiết bị Sau chuyển sang hiển thị tình trạng thiết bị tất phục vụ Mặc dù phương pháp thăm dò hiển thị tình trạng vài thiết bị phục vụ thiết bị điều kiện định thoả mÃn không tận dụng hết cộng dụng vi điều khiển Điểm mạnh phương pháp ngắt vi điều khiển phục vụ nhiều thiết bị (tất nhiên không thời điểm) Mỗi thiết bị nhận ®­ỵc sù chó ý cđa bé vi ®iỊu khiĨn dùa mức ưu tiên gán cho Đối với phương pháp thăm dò gán mức ưu tiên cho thiết bị kiểm tra tất thiết bị theo kiểu vòng Quan trọng phương pháp ngắt vi điều khiển che làm lơ yêu cầu dịch vụ thiết bị Điều lại lần thực phương pháp thăm dò Lý quan trọng phương pháp ngắt ưu chuộng phương pháp thăm dò làm lÃng phí thời gian vi điều khiển cách hỏi dò thiết bị kể chúng không cần đến dịch vụ Nhằm để tránh người ta sử dụng phương pháp ngắt Ví dụ định thời bàn đến chương ta đà dùng lệnh JNB TF, đích đợi định thời quay trở Trong ví dụ đó, chờ đợi ta làm việc khác có ích hơn, chẳng hạn sử dụng phương pháp ngắt vi điều khiển làm việc khác cờ TF bật lên ngắt vi điều khiển cho dù làm điều 11.1.2 Trình phục vụ ngắt Đối với ngắt phải có trình phục vụ ngắt ISR hay trình quản lý ngắt ngắt gọi vi điều khiển phục vụ ngắt Khi ngắt gọi vi điều khiển chạy trình phục vụ ngắt Đối với ngắt có vị trí cố định nhớ để giữ địa ISR Nhóm vị trí nhớ dành riêng để gửi địa ISR gọi bảng véc tơ ngắt (xem hình 11.1) 11.1.3 Các bước thực ngắt Khi kích hoạt ngắt vi điều khiển ®i qua c¸c b­íc sau: Nã kÕt thóc lƯnh thực lưu địa lệnh (PC) vào ngăn xếp CuuDuongThanCong.com https://fb.com/tailieudientucntt Nó lưu tình trạng tất ngắt vào bên (nghĩa không lưu vào ngăn xếp) Nó nhảy đến vị trí cố định nhớ gọi bảng véc tơ ngắt nới lưu giữ địa trình phục vụ ngắt Bộ vi điều khiển nhận địa ISR từ bảng véc tơ ngắt nhảy tới Nó bắt đầu thực trình phục vụ ngắt lệnh cuối ISR RETI (trở từ ngắt) Khi thùc hiƯn lƯnh RETI bé vi ®iỊu khiĨn quay trở nơi đà bị ngắt Trước hết nhận địa đếm chương trình PC từ ngăn xếp cách kéo hai byte đỉnh ngăn xếp vào PC Sau bắt đầu thực lệnh từ địa Lưu ý bước đến vai trò nhạy cảm ngăn xếp, lý mà phải cẩn thận thao tác nội dung ngăn xếp ISR Đặc biệt ISR chương trình CALL số lần đẩy vào ngăn xếp (Push) số lần lấy từ (Pop) phải 11.1.4 Sáu ngắt 8051 Thực tế có ngắt dành cho người dùng 8051 nhiều nhà sản xuất đưa bảng liệu nói có sáu ngắt họ tính lệnh tái thiết lập lại RESET Sáu ngắt 8051 phân bố sau: RESET: Khi chân RESET kích hoạt từ 8051 nhảy địa 0000 Đây địa bật lại nguồn bàn chương Gồm hai ngắt dành cho định thời: cho Timer0 cho Timer1 Địa ngắt 000B4 001B4 bảng véc tơ ngắt dành cho Timer0 Timer1 tương ứng Hai ngắt dành cho ngắt phần cứng bên chân 12 (P3.2) 13 (P3.3) cổng P3 ngắt phần cứng bên INT0 INT1 tương ứng Các ngắt coi EX1 EX2 vị trí nhớ bảng véc tơ ngắt ngắt 0003H 0013H gán cho INT0 INT1 tương ứng Truyền thông nối tiếp có ngắt thuộc thu phát Địa ngắt bảng véc tơ ngắt 0023H Chú ý bảng 11.1 có số giới hạn byte dành riêng cho ngắt Ví dụ, ngắt INT0 ngắt phần cứng bên có tổng cộng byte từ địa 0003H đến 000AH dành cho Tương tự vậy, byte từ địa 000BH đến 0012H dành cho ngắt định thời TI0 Nếu trình phục vụ ngắt đối mặt với ngắt đà cho mà ngắn đủ đặt vừa không gian nhớ Nếu không vừa lệnh LJMP đặt vào bảng véc tơ ngắt để đến địa ISR, trường hợp byte lại cấp cho ngắt không dùng đến Dưới ví dụ lập trình ngắt minh hoạ cho điều trình bày Từ bảng 11.1 để ý thấy thực tế r»ng chÝ cã byte cđa kh«ng gian bé nhí ROM gán cho chân RESET Đó vị trí địa 0, ROM Vị trí địa thuộc ngắt phần cứng bên với lý chương trình phaỉ đặt lệnh LJMP lệnh hướng xử lý lệnh khỏi bảng véc tơ ngắt hình 11.1 Bảng 11.1: Bảng véc tơ ngắt 8051 CuuDuongThanCong.com https://fb.com/tailieudientucntt Ngắt Bật lại nguồn (RESET) Ngắt phần cứng (INT0) Ngắt Timer0 (TF0) Ngắt phần cứng (INT1) Ngắt Timer1 (TF1) Ngắt COM nối tiếp (RI TI) Địa ROM 0000 0003 000B 0013 001B 0023 Ch©n 12 (P3.2) 13 (P3.3) 11.1.5 Cho phép cấm ngắt Khi bật lại nguồn tất ngắt bị cấm (bị che) có nghĩa ngắt vi điều khiển đáp ứng chúng kích hoạt Các ngắt phải kích hoạt phần mềm để vi điều khiển đáp ứng chúng Có ghi gọi cho phép ngắt IE (Interrupt Enable) chịu trách nhiệm việc cho phép (không che) cấm (che) ngắt Hình 11.2 trình bµy ghi IE, l­u ý r»ng IE lµ ghi đánh địa theo bít Từ hình 11.2 ta thấy D7 ghi IE gọi bít cho phép tất ngắt EA (Euable All) Bít phải thiết lập lên để phần lại ghi hoạt động Bít D6 chưa sử dụng Bít D54 dành cho 8051, bít D4 dùng cho ngắt nối tiếp v.v 11.1.6 Các bước cho phép ngắt Để cho phép ngắt ta phải thực bước sau: Bít D7 ghi IE EA phải bật lên cao phép bít lại ghi nhận hiệu ứng Nếu EA = tất ngắt phép đáp ứng bít tương øng cđa chóng IE cã møc cao NÕu EA = ngắt đáp øng cho dï bÝt t­¬ng øng cđa nã IE có giá trị cao Để hiểu điểm quan h·y xÐt vÝ dơ 11.1 H×nh 11.2: Thanh ghi cho phÐp ng¾t IE D0 D7 EA ET2 ES ET1 EX1 ET0 EA EX0 IE.7 NÕu EA = ngắt bị cấm Nếu EA = nguồn ngắt cho phép bị cấm bật xoá bít cho phép -IE.6 Dự phòng cho tương lai ET2 IE.5 Cho phép cấm ngắt tràn thu Timer2 (8051) ES IE.4 Cho phép cấm ngắt cổng nối tiếp ET1 IE.3 Cho phép cấm ngắt tràn Timer1 EX1 IE.2 Cho phép cấm ngắt ET0 IE.1 Cho phép cấm ngắt tràn Timer0 EX0 IE.0 Cho phép cấm ngắt * Người dùng ghi vào bít dự phòng Bít dùng cho vi điều khiển nhanh với đặc tính Ví dụ 11.1: CuuDuongThanCong.com https://fb.com/tailieudientucntt HÃy lệnh để a) cho phép ngắt nối tiếp ngắt Timer0 ngắt phần cứng (EX1) b) cấm (che) ngắt Timer0 sau c) trình bày cách cấm tất ngắt lƯnh nhÊt Lêi gi¶i: a) MOV IE, #10010110B ; Cho phép ngắt nối tiếp, cho phép ngắt Timer0 cho phép ngắt phần cứng Vì IE ghi đánh địa theo bít nên ta sử dụng lệnh sau để truy cập đến bít riêng rẽ ghi: SETB SETB SETB SETB IE.7 IE.4 IE.1 IE.2 ; EA = 1, Cho phép tất ngắt ; Cho phép ng¾t nèi tiÕp ; Cho phÐp ng¾t Timer1 ; Cho phép ngắt phần cứng (tất lệnh tương đương với lệnh MOV IE, #10010110B đây) b) CLR IE.1 c) CLR IE.7 ; Xoá (che) ngắt Timer0 ; Cấm tất ngắt 11.2 Lập trình ngắt định thời Trong chương ta đà nói cách sử dụng định thời Timer0 Timer1 phương pháp thăm dò Trong phần ta sử dụng ngắt để lập trình cho định thời 8051 11.2.1 Cờ quay định thời ngắt Trong chương đà nói cờ định thời TF đặt lên cao định thời đạt giá trị cực đại quay (Roll - over) Trong chương trình cách hiển thị cờ TF lệnh JNB TF, đích Khi thăm dò cờ TF ta phải đợi cờ TF bật lên Vấn đề với phương pháp vi điều khiển bị trói buộc cờ TF bật lên làm việc khác Sử dụng ngắt giải vấn đề tránh trói buộc vi điều khiển Nếu ngắt định thời ghi IE phép quay trở cờ TF bật lên vi điều khiển bị ngắt viẹc thực nhảy tới bảng véc tơ ngắt để phục vụ ISR Bằng cách vi điều khiển làm công việc khác thông báo định thời đà quay Xem hình 11.3 vµ vÝ dơ 11.2 Timer Interruptor TF0 000BH Jumps to TF1 Timer Interruptor 001BH Jumps to Hình 11.3: Ngắt định thời TF0 TF1 HÃy để điểm chương trình chương trình ví dụ 11.2 Chúng ta phải tránh sử dụng không gian nhớ dành cho bảng véc tơ ngắt Do vậy, ta đặt tất mà khởi tạo địa 30H nhớ Lệnh LJMP lệnh đầu CuuDuongThanCong.com https://fb.com/tailieudientucntt tiên mà 8051 thực cấp nguồn Lệnh LJMP lái điều khiển tránh khỏi bảng véc tơ ngắt Trình phục vụ ISR Timer0 đặt nhớ bắt đầu tự địa 000BH nhỏ đủ cho vào không gian nhớ dành cho ngắt Chúng ta cho phép ngắt Timer0 với lệnh MOV IE, #1000 010H chương trình MAIN Trong liệu cổng P0 nhận vào chuyển liên tục sang công việc P1 Timer0 trở 0, cờ TF0 bật lên vi điều khiển thoát khỏi vòng lặp BACK đến địa 000BH ®Ĩ thùc hiƯn ISR g¾n liỊn víi bé Timer0 Trong trình phục vụ ngắt ISR Timer0 ta thấy không cần đến lệnh CLR TF0 trước lệnh RETI Lý 8051 xoá cờ TF bên nhảy đến bảng véc tơ ngắt Ví dụ 11.2: HÃy viết chương trình nhân liên tục liệu bít cổng P0 gửi đến cỉng P1 nã cïng lóc t¹o mét sóng vuông chu kỳ 200ms chân P2.1 HÃy sử dụng Timer0 để tạo sóng vuông, tần số 8051 XTAL = 11.0592MHz Lời giải: Ta sử dụng Timer0 chế độ (tự động nạp lại) giá trị nạp cho TH0 100/1.085ms = 92 ; - - Khi khởi tạo vào chương trình main tránh dùng không gian ; Địa dành cho bảng véc tơ ngắt ORG 0000H CPL P2.1 ; Nhảy đến bảng véc tơ ngắt ; ; - - Trình ISR dành cho Timer0 để tạo sóng vuông ORG 0030H ; Ngay sau địa bảng véc-tơ ngắt MAIN: TMOD, #02H ; Chọn Timer0, chế độ tự nạp lại MOV P0, #0FFH ; Lấy P0 làm cổng vào nhận liệu MOV TH0, # - 92 ; Đặt TH0 = A4H cho – 92 MOV IE, #82H ; IE = 1000 0010 cho phÐp Timer0 SETB TR0 ; Khëi ®éng bé Timer0 BACK: MOV A, P0 ; NhËn liệu vào từ cổng P0 MOV P1, A ; Chuyển liệu đến cổng P1 SJMP BACK ; Tiếp tục nhận chuyển liệu ; Chừng bị ngắt TF0 END Trong ví dụ 11.2 trình phục vụ ngắt ISR ngắn nên đặt vừa vào không gian địa dành cho ngắt Timer0 bảng véc tơ ngắt Tất nhiên lúc làm Xét ví dụ 11.3 Ví dụ 11.3: 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 1085ms mức thấp dài 15ms với giả thiÕt tÇn sè XTAL = 11.0592MHz H·y sư dơng bé định thời Timer1 Lời giải: CuuDuongThanCong.com https://fb.com/tailieudientucntt Vì 1085ms 1000 1085ms nên ta cần sử dụng chế độ định thời Timer1 ; - - Khi khởi tạo tránh sử dụng không gian dành cho bảng véc tơ ngắt ORG 0000H LJMP MAIN ; Chuyển đến bảng véc tơ ngắt ; ; - - Trình ISR Timer1 để tạo xung vuông OR6 001BH ; Địa ngắt Timer1 bảng véc tơ ngắt LJMP ISR-T1 ; Nhảy đến ISR ; ; - - Bắt đầu chương trình MAIN ORG 0030H ; Sau bảng véc tơ ngắt MAIN: MOV TMOD, #10H ; Chän Timer1 chÕ ®é MOV P0, #0FFH ; Chọn cổng P0 làm đầu vào nhận liệu MOV TL1, #018H ; Đặt TL1 = 18 byte thấp - 1000 MOV TH1, #0FCH ; Đặt TH1 = FC byte cao cña - 1000 MOV IE, #88H ; IE = 10001000 cho phÐp ng¾t Timer1 SETB TR1 ; Khëi ®éng bé Timer1 BACK: MOV A, P0 ; NhËn d÷ liệu đầu vào cổng P0 MOV P1, A ; Chuyển liệu đến P1 SJMP BACK ; Tiếp tục nhận chuyển liệu ; ; - - Trình ISR Timer1 phải nạp lại chế ®é ISR-T1: CLR TR1 ; Dõng bé Timer1 CLR P2.1 ; P2.1 = bắt đầu xung mức thấp MOV R2, #4 ; chu kú m¸y MC (Machine Cycle) HERE: DJNZ R2, HERE ; ´ MC = MC MOV TL1, #18H ; N¹p l¹i byte thấp giá trị MC MOV TH1, #0FCH ; Nạp lại byte cao giá trị MC SETB TR1 ; Khëi ®éng Timer1 MC SETB P2.1 ; P2.1 = bËt P2.1 trë l¹i cao RETI ; Trë vỊ chương trình END Lưu ý phần xung mức thấp tạo 14 chu kỳ mức MC MC = 1.085ms 14 1.085ms = 15.19ms Ví dụ 11.4: Viết chương trình để tạo sóng vuông tần số 50Hz chân P1.2 Ví dụ tương tự ví dụ 9.12 ngoại trừ ngắt Timer0, giả sử XTAL = 11.0592MHz Lời giải: ORG LJMP MAIN ORG 000BH CPL P1.2 MOV TL0, # 00 MOV TH0, # 0DCH RETI ORG 30H ; main program for initialization MAIN: MOV TMOD, # 00000001B CuuDuongThanCong.com ; Chương trình phục vụ ngắt cho Timer0 ; Chọn Timer0 chế độ https://fb.com/tailieudientucntt HERE: SJMP MOV TL0, # 0DCH MOV IE, # 82H SETB TR0 HERE END 8051 P1.2 ; Cho phép ngắt Timer0 50Hz square ware 11.3 Lập trình ngắt phần cứng bên Bộ vi điều khiển 8051 có hai ngắt phần cứng bên chân 12 (P3.2) chân 13 (P3.3) dùng cho ngắt INT0 INT1 Khi kích hoạt chân 8051 bị ngắt công việc mà thực nhảy đến bảng véc tơ ngắt để thực trình phục vụ ngắt Level - tringgered INTO (Pin 3.2) ITO 0003 IE0 (TCON.1) Edge - triggered Level - tringgered INTO (Pin 3.3) Edge - triggered IT1 0013 IE0 (TCON.3) 11.3.1 Các ngắt INT0 INT1 Chỉ có hai ngắt phần cứng 8051 INT0 INT1 Chúng bố trí chân P3.2 P3.3 địa chúng bảng véc tơ ngắt 0003H 0013H Như đà nói mục 11.1 chúng ghép bị cấm việc sử dụng ghi IE Vậy chúng kích hoạt nào? Có hai mức kích hoạt cho ngắt phần cứng ngoài: Ngắt theo mức ngắt theo sườn Dưới mô tả hoạt động loại 11.3.2 Ngắt theo mức chế độ ngắt theo mức chân INT0 INT1 bình thường mức cao (giống tất chân cổng I/O) tín hiệu mức thấp cấp tới chúng ghi nhÃn ngắt Sau vi điều khiển dừng tất công việc CuuDuongThanCong.com https://fb.com/tailieudientucntt thực nhảy đến bảng véc tơ ngắt để phục vụ ngắt Điều gọi ngắt kích hoạt theo mức hay ngắt theo mức chế độ ngắt mặc định cấp nguồn lại cho 8051 Tín hiệu mức thấp chân INT phải lâýu ®i tr­íc thùc hiƯn lƯnh ci cïng cđa tr×nh phục vụ ngắt RETI, không ngắt khác lại tạo Hay nói cách khác, tín hiệu ngắt mức thấp không lấy ISR kết thúc ngắt khác 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 nối đến công tắc bình thường mức cao Mỗi xuống thấp phải bật đèn LED Đèn LED nối đến chân P1.3 bình thường chế độ tắt Khi bật lên phải sáng vài phần trăm giây Chừng công tắ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 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 lúc CLR P1.3 ; Tắt đèn LED RETI ; Trë vỊ tõ ISR ; - - B¾t đầu chương trình Main ORG 30H MAIN: MOV IE, #10000100B ; Cho phép ngắt dài SJMP HERE ; Chờ ngắt END ấn công tắc xuống làm cho đèn LED sáng Nếu giữ trạng thái kích hoạt đèn LED sáng liên tục Vcc 8051 P1.3 to LED INTI Trong chương trình vi điều khiển quay vòng liên tục vòng lặp HERE Mỗi công tắc chân P3.3 (INT1) kích hoạt vi điều khiển thoát khỏi vòng lặp nhảy đến bảng véc tơ ngắt địa 0013H Trình ISR cho INT1 bật đèn LED lên giữ lúc t¾t nã tr­íc trë vỊ NÕu lóc nã thực lệnh quay trở RET1 mà chân INT1 mức thấp vi điều khiển khởi tạo lại ngắt Do vậy, để giải vấn đề chân INT1 phải đưa lên cao thời điểm lệnh RET1 thực 11.3.3 Trích mẫu ngắt theo mức CuuDuongThanCong.com https://fb.com/tailieudientucntt Các chân P3.2 P3.3 bình thường dùng cho vào - bít INT0 INT1 ghi IE không kích hoạt Sau ngắt phần cứng gi IE kích hoạt vi điều khiển trì trích mẫu chân INTn tín hiệu mức thấp lần chu trình máy Theo bảng liệu nhà sản xuất vi điều khiển chân ngắt phải giữ mức thấp bắt đầu thực trình phục vụ ngắt ISR Nếu chân INTn đưa trở lại mức cao trước bắt đầu thực ISR chẳng có ngắt xảy Tuy nhiên trình kích hoạt ngắt theo mức thấp nên lại phải đưa lên mức cao trước thực lệnh RET1 lại theo bảng liệu nhà sản xuất chân INTn mức thấp sau lệnh RETI trình phục vụ ngắt ngắt khác lại kích hoạt sau lệnh RET1 thực Do vậy, để bảo đảm việc kích hoạt ngắt phần cứng chân INTn phải khẳng định thời gian tồn tín hiệu mức thấp khoảng chu trình máy không Điều thực tế ngắt theo mức không chốt Do chân ngắt phải giưa mức thấp bắt đầu thực ISR chu trình máy 1.085ms chu trình máy (4MC) đến chân INT0 INT1 ´ 1.085ms Ghi chó: Khi bËt l¹i ngn (RESET) hai chân INT0 INT1 mức thấp tạo ngắt theo mức 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ư đà nói trước trình bật lại nguồn 8051 làm chân INT0 INT1 ngắt theo mức thấp Để biến chân trở thành ngắt theo sườn phải viết chưnơg trình cho c¸c bÝt cđa ghi TCON Thanh thi TCON giữ bít cờ IT0 IT1 xác định chế độ ngắt theo sườn hay ngắt theo mức ngắt phần cứng IT0 IT1 bít D0 D2 ghi TCON tương ứng Chúng biểu diễn TCON.0 TCON.2 ghi TCON đánh địa theo bít Khi bật lại nguồn TCON.0 (IT0) TCON.2 (IT1) mức thấp (0) nghĩa ngắt phần cứng chân INT0 INT1 ngắt theo mức thấp Bằng việc chuyển bít TCON.0 TCON.2 lên cao qua lệnh SETB TCON.0 SETB TCON.2 ngắt phần cứng INT0 INT1 trở thành ngắt theo sườn Ví dụ, lệnh SETB TCON.2 làm cho INT1 mà gọi ngắt theo sườn ®ã mét tÝn hiƯu chun tõ cao xng thấp cấp đến chân P3.3 trường hợp vi điều khiển bị ngắt bị cưỡng nhảy đến bảng véc tơ ngắt địa 0013H để thực trình phục vụ ngắt Tuy nhiên với giải thiết bít ngắt đà cho phÐp ghi IE CuuDuongThanCong.com https://fb.com/tailieudientucntt D0 D7 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 H×nh 11.6: Thanh ghi TCON · BÝt TF1 hay TCON.7 lµ cê tràn Timer1 Nó lập phần cứng đếm/ định thời tràn, xoá phần cứng xử lý đến trình phục vụ ngắt à Bít TR1 hay TCON.6 bít điều khiển hoạt động Timer1 Nó thiết lập xoá phần mềm để bật/ tắt Timer1 à Bít TF0 hay TCON.5 tương tự 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 theo sườn Nó thiết lập CPU sườn ngắt (chuyển từ cao xuống thấp) phát Nó xóa CPU ngắt xử lý Lưu ý: Cờ không chốt ngắt theo mức thấp à Bít IT1 hay TCON.2 bít điều khiển kiểu ngắt Nó thiết lập xoá phần mềm để xác định kiểu ngắt theo s­ên xuèng hay møc thÊp · BÝt IE0 hay TCON.1 tương tự IE1 dành cho ngắt · BÝt IT0 hay TCON.0 t­¬ng tù nh­ bÝt IT1 dành cho ngắt Xét ví dụ 11.6, ý khác dụ ví dụ 11.5 hàng MAIN lệnh SETB TCON.2 chuyển ngắt INT1 vỊ kiĨu ng¾t theo s­ên Khi s­ên xng cđa tÝn hiệu cấp đến chân INT1 đèn LED bật lên lúc Đèn LED có thời gian sáng phụ thuộc vào độ trễ bên ISR INT1 Để bật lại đèn LED phải có sườn xung xuống khác cấp đến chân P3.3 Điều ng­ỵc víi vÝ dơ 11.5 Trong vÝ dơ 11.5 chất ngắt theo mức ngắt đèn LED sáng chừng tín hiệu chân INT1 mức thấp Nhưng ví dụ để bật lại đèn LED xung chân INT1 phải đưa lên cao sau bị hạ xuống thấp để tạo sườn xuống làm kích hoạt ngắt Ví dụ 11.6: Giả thiết chân P3.3 (INT1) nối với máy tạo xung, hÃy viết chương trình sườn xuống xung gửi tín hiệu cao đến chân P1.3 nối tới đèn LED (hoặc còi báo) Hay nói cách khác, đèn LED bật tắt tần số với xung cấp tới chân INT1 Đây phiên ngắt theo sườn xung ví dụ 11.5 đà trình bày Lời giải: ORG 0000H LJMP MAIN ; - - Trình phục vụ ngắt ISR dành cho ngắt INT1 để bật đèn LED ORG 0013H ; Nhảy đến địa trình phục vụ ngắt INT1 SETB P1.3 ; Bật đèn LED (hoặc còi) MOV R3, #225 BACK: DJNZ R3, HERE ; giữ đèn LED (hoặc còi) lúc CLR P1.3 ; Tắt đèn LED (hoặc còi) RETI ; Quay trë vỊ tõ ng¾t ; - - Bắt đầu chương trình ORG 30H SETB TCON.2 ; Chun ng¾t INT1 vỊ kiĨu ng¾t theo s­ên xung CuuDuongThanCong.com https://fb.com/tailieudientucntt HERE: MOV SJMP END IE, #10001B HERE ; Cho phép ngắt INT1 ; Dừng bị ngắt 11.3.5 Trình mẫu ngắt theo sườn Trước kết thúc phần ta cần trả lời câu hỏi ngắt theo sườn trích mẫu thường xuyên nào? Trong ngắt theo sườn, nguồn phải giữ mức cao tối thiểu chu trình máy đê đảm bảo vi điều khiển nhìn thấy chuyển dịch từ cao xuống thÊp cđa s­ên xung 1MC 1.085ms 1.085ms 1MC Thêi h¹n xung tối thiểu để phát ngắt theo s­ên xung víi tÇn sè XTAL = 11.0592MHz S­ên xng xung chốt 8051 ghi TCON Các bít TCON.1 TCON.3 giữ sườn chốt chân INT0 INT1 tương ứng TCON.1 TCON.3 gọi bít IE0 IE1 hình 11.6 Chúng hoạt động cờ ngắt phục vụ (Interrupt-inserver) Khi cờ ngắt phục vụ bật lên báo cho giới thực bên ngắt xử lý chân INTn ngắt đáp ứng chừng ngắt chưa phục vụ xong Đây giống tín hiệu báo bận máy điện thoại Cần phải nhấn mạnh hạt điểm quan tâm đến bít IT0 IT1 ghi TCON Khi trình phục vụ ngắt ISR kÕt thóc (nghÜa lµ ghi thùc hiƯn lƯnh RETI) Các bít (TCON.1 TCON.3) xoá để báo ngắt hoàn tất 8051 sẵn sàng đáp ứng ngắt khác chân Để ngắt khác nhận tín hiệu chân phải trở lại mức cao sau nhảy xuống thấp để phát ngắt theo sườn Trong thời gian trình phục vụ ngắt thực chân INTn bị làm ngơ không quan tâm đến có lần chuyển dịch từ cao xuống thấp Trong thực tế chức lệnh RETI để xoá bít tương ứng ghi TCON (bít TCON.1 TCON.3) Nó báo cho ta trình phục vụ ngắt xắp kết thúc Vì lý mà bít TCON.1 TCON.3 gọi báo ngắt phục vụ cờ lên cao sườn xuống phát chân INT dừng mức cao toàn trình thực ISR Nó bị xoá lệnh RETI lệnh cuối ISR Do vậy, không báo cần đến lệnh xoá bít CLR TCON.1 hay CLR TCON.3 trước lệnh RETI trình phục vụ ngắt ngắt cứng INT0 INT1 Điều không với trường hợp ngắt nối tiếp Ví dụ 11.7: Sự khác lệnh RET RETI gì? Giải thích ta dùng lƯnh RET thay cho lƯnh RETI tr×nh phơc vơ ngắt Lời giải: CuuDuongThanCong.com https://fb.com/tailieudientucntt Các hai lệnh RET RETI thực thi hành vi giống lấy hai byte đỉnh ngăn xếp vào đếm chương trình đưa 8051 trở nơi đà bỏ Tuy nhiên, lệnh RETI thực thi nhiệm vụ khác xoá cờ ngắt phục vụ để báo ngắt đà kết thúc 8051 nhập ngắt chân NÕu ta dïng lƯnh RET thay cho RETI nh­ lµ lệnh cuối trình phục vụ ngắt ta đà vô tình khoá ngắt chân sau ngắt trạng thái chân báo ngắt phục vụ Đây trường hợp mà cờ TF0, TF1, TCON.1 TCON.3 xoá lệnh RETI 11.3.6 Vài điều bổ xung vỊ ghi TCON B©y giê ta xÐt kü bít ghi TCON để hiểu vai trò việc trì ngắt 11.3.6.1 Các bít IT0 IT1 Các bít TCON.0 TCON.2 coi bít IT0 IT1 tương ứng Đây bít xác định kiểu ngắt theo sườn xung hay theo mức xung ngắt phần cứng chân INT.0 INT.1 tương ứng Khi bật lại nguồn hai bít có mức để biến chúng thành ngắt theo tín hiệu mức thấp Lập trình viên điều khiển số chúng lên cao để chuyển ngắt phần cứng bên thành ngắt theo ngưỡng Trong hệ thống dựa 8051 đà cho ta đà đặt bít không thay đổi người thiết kế đà cố định kiểu ngắt ngắt theo sườn hay theo mức rỗi 11.3.6.2 Các bít IE0 IE1 Các bít TCON.1 TCON.3 gọi IE0 IE1 tương ứng Các bít 8051 dùng để bám kiểu ngắt theo sườn xung Nói khác IT0 IT1 có nghĩa ngắt phần cứng ngắt theo mức thấp, bít IE0 IE1 không dùng đến làm Các bít IE0 IE1 8051 chØ dïng ®Ĩ chèt s­ên xung tõ cao xng thấp chân INT0 INT1 Khi có chuyển dịch sườn xung chân INT0 (hay INT1) 8051 đánh dấu (bật lên cao) bít IEx ghi TCON nhảy đến bảng véc tơ ngắt bắt đầu thực trình phục vụ ngắt ISR Trong 8051 thực ISR sườn xung ghi nhận chân INT0 (hay INT1) để ngắt Chỉ thực lệnh RETI cuối trình phục vụ ngắt ISR bít IEx bị báo sườn xung cao xuống thấp chân INT0 (hay INT1) kích hoạt ngắt trở lại Từ phần trình bày ta thấy bít IE0 IE1 8051 sử dụng bên để báo có ngắt xử lý hay không Hay nói cách khác lập trình viên quan tâm đến cá bít 11.3.6.3 Các bít TR0 TR1 Đây bÝt D4 vµ D6 (hay TCON.4 vµ TCON.6) cđa ghi TCON Các bít đà giới thiệu chương chúng dùng để khởi động dừng định thời Timer0 Timer1 tương ứng Vì ghi TCON đánh địa theo bít nên sử dụng lệnh SETB TRx CLR TRx lệnh SETB TCON.4 CLR TCON.4 11.3.6.4 Các bít TF0 TF1 Các bít lµ D5 (TCON.5) vµ D7 (TCON.7) cđa ghi TCON mà đà giới thiệu chương Chúng ta sử dụng Timer0 Timer1 tương ứng để báo định thời bị tràn hay quay không Mặc dù ta đà dùng lệnh JNB TFx, đích CLR TFx sử CuuDuongThanCong.com https://fb.com/tailieudientucntt dụng lệnh SETB TCON.5, đích CLR TCON.5 TCON ghi đánh địa theo bít 11.4 Lập trình ngắt truyền thông nối tiếp Trong chương 10 đà nghiên cứu truyền thông nối tiếp 8051 Tất ví dụ chương sử dụng phương pháp thăm dò (polling) ậ chương ta khám phá truyền thông dựa ngắt mà cho phÐp 8051 lµm viƯc rÊt nhiỊu viƯc ngoµi viƯc truyền nhận liệu từ cổng truyền thông nối tiếp 11.4.1 Các cờ RI TI ngắt Như đà nói chương 10 cờ ngắt truyền TI (Transfer interrupt) bật lên bít cuối khung liệu, bít stop truyền báo ghi SBUF sẵn sàng truyền byte Trong trường hợp cờ RI (Receive Interrupt) bật lên toàn khung liệu kể bít stop đà đươc nhận Hay nói cách khác ghi SBUF đà có byte cờ RI bật lên báo byte liệu nhận cần lấy cất vào nơi an toàn trước bị (bị ghi đè) liệu nhận Chừng nói truyền thông nối tiếp tất khái niệm áp dụng giống cho dù sử dụng phương pháp thăm dò hay sử dụng phương pháp ngắt Sự khác hai phương pháp cách phục vụ trình truyền thông nối tiếp Trong phương pháp thăm dò phải đợi cho cờ (TI hay RI) bật lên lúc chờ đợi ta làm Còn phương pháp ngắt ta báo 8051 đà nhận byte sẵn sàng chuyển (truyền) byte ta làm công việc khác truyền thông nối tiếp phục vụ Trong 8051 có ngắt dành riêng cho truyền thông nối tiếp Ngắt dùng cho truyền nhận liệu Nếu bít ngắt gi IE (là bít IE.4) phép RI TI bật lên 8051 nhận ngắt nhảy đến địa trình phục vụ ngắt dành cho truyền thông nối tiếp 0023H bảng véc tơ ngắt để thực Trong trình ISR phải kiểm tra cờ TI RI để xem cờ gây ngắt để đáp ứng cách phù hợp (xem ví dụ 11.8) TI RI 0023H Hình 11.7: Ngắt truyền thông hai cê TI vµ RI gäi 11.4.2 Sư dơng cổng COM nối tiếp 8051 Trong phần lớn ứng dụng, ngắt nối tiếp chủ yếu sử dụng để nhận liệu không sử dụng để truyền liệu nối tiếp Điều giống việc báo chuông để nhận điện thoại, ta muốn gọi điện thoại có nhiều cách khác ngắt ta không cần đến đổ chuông Tuy nhiên, nhận điện thoại ta phải trả lời ta làm không thuộc gọi (mất) qua Tương tự vậy, ta sử dụng ngắt nối tiếp nhận liệu đến để chép cho không bị mất: HÃy xét ví dụ 11.9 Ví dụ 11.8: CuuDuongThanCong.com https://fb.com/tailieudientucntt HÃy viết chương trình 8051 đọc liƯu tõ cỉng P1 vµ ghi nã tíi cỉng P2 liên tục đưa liệu tíi cỉng COM nèi tiÕp ®Ĩ thùc hiƯn trun nèi tiếp giả thiết tần số XTAL 11.0592MHz tốc độ baud 9600 Lời giải: MAIN: BACK: ORG LJMP MAIN ORG 23H LJMP SERIAL MOVQP1, # 0FFH MOV TMOD, # 20h MOV TH1, # 0FDH MOV SCON, # 50H MOV IE, # 10010000B SETB TR1 MOV A, P1 MOV SBUF, A MOV P2, A SJMP BACK ; Nh¶y đến trình phục vụ ngắt truyền thông nối tiếp ; Lấy cổng P1 làm cổng đầu vào ; Chọn Timer1, chế độ tự nạp lại ; Chọn tốc độ baud = 9600 ; Khung d÷ liƯu: bÝt d÷ liƯu, stop µ cho phÐp REN ; Cho phÐp ngắt nối tiếp ; Khởi động Timer1 ; Đọc liƯu tõ cỉng P1 ; LÊy mét b¶n tíi SBUF ; Gửi đến cổng P2 ; lại vòng lặp ; ; Tr×nh phơc vơ ng¾t cỉng nèi tiÕp ORG 100H SERIAL: JB TI,TRANS ; Nhảy đến cờ TI cao MOV A, SBUF ; Nếu không tiếp tục nhận liệu CLR RI ; Xoá cờ RI CPU không làm điều RETI ; Trở từ trình phục vụ ngắt TRANS: CLR TI ; Xoá cờ TI CPU không làm điều nµy RETI ; Trë vỊ tõ ISR END Trong vÊn đề thấy ý đến vai trò cờ TI RI Thời điểm byte ghi vào SBUF đóng khung truyền nối tiếp Kết bít cuối (bít stop) truyền cờ TI bật lên cao gây ngắt nối tiếp gọi bít tương ứng ghi IE đưa lên cao Trong trình phục vụ ngắt nối tiếp, ta phải kiểm tra cờ TI cờ RI hai gọi ngắt hay nói cách khác có ngắt cho truyền nhận Ví dụ 11.9: HÃy viết chương trình 8051 nhận liệu từ cổng P1 gửi liên tục đến cổng P2 liệu vào từ cổng nối tiếp COM gửi đến cổng P0 Giả thiết tần số XTAL 11.0592MHz tốc ®é baud 9600 Lêi gi¶i: MAIN: ORG LJMP ORG LJMP ORG MOV MOV MOV CuuDuongThanCong.com MAIN 23H SERIAL 03H P1, # FFH TMOD, # 20H TH1, # 0FDH ; Lấy cổng P1 cổng đầu vào ; Chọn Timer chế độ hai tự nạp lại ;Khung liệu: bÝt d÷ liƯu, stop, cho phÐp REN https://fb.com/tailieudientucntt MOV SCON, # 50H ; Cho phÐp ng¾t nèi tiÕp MOV IE, # 10010000B ; Khëi ®éng Timer1 SETB TR1 ; Đọc liệu từ cổng P1 BACK: MOV A, P1 ; Gửi liệu đến cổng P2 MOV P2, A ; lại vòng lặp SJMP BACK ; -Trình phục vụ ngắt cổng nối tiếp ORG 100H SERIAL: JB TI, TRANS ; Nh¶y nÕu Ti cao MOV A, SBUF ; Nếu không tiếp tục nhận liệu MOV P0, A ; Gửi lệu đầu vào đến cổng P0 CLR RI ; Xoá vờ RI CPU không xoá cờ RETI ; Trở từ ISR TRANS: CLS TI ; Xoá cờ TI CUP không xoá cờ RETI ; ; trở từ ISR END 11.4.3 Xoá cờ RI TI trước lệnh RETI §Ĩ ý r»ng lƯnh ci cïng tr­íc trë từ ISR RETI lệnh xoá cờ RI TI Đây điều cần thiết ngắt dành cho nhận truyền 8051 nguồn gây ngắt nguồn nào, trình phục vụ ngắt phải xoá cờ phép ngắt sau đáp ứng sau kết thúc ngắt Điều tương phản với ngắt ngắt định thời 8051 xoá cờ Các lệnh xoá cờ ngắt phần mềm qua lệnh CLR TI CLR RI HÃy xét ví dụ 11.10 để ý đến lệnh xoá cờ ngắt trước lệnh RETI Ví dụ 11.10: HÃy viết chương trình sử dụng ngắt để thực công việc sau: a) Nhận liệu nối tiếp gửi ®Õn cỉng P0 b) LÊy cỉng P1 ®äc vµ trun nối tiếp đến cổng P2 c) Sử dụng Timer0 tạo sóng vuông tần số 5kHz chân P0.1 giảt thiết tần số XTAL = 11.0592MHz tốc độ baud 4800 Lêi gi¶i: MAIN : BACK: ORG LJMP ORG CPL RETI ORG LJMP ORG MOV MOV MOV MOV MOV MOV SETB SETB MOV MOV MOV CuuDuongThanCong.com MAIN 000BH P0.1 23H SERIAL 30H P1, # 0FFH TMOD, # 22H TH1, # 0F6H SCON, # 50H TH0, # - 92 IE, # 10010010B TR1 TR0 A, P1 SBUF, A P2, A ; Trình phục vụ ngắt dành cho Timer0 : Tạo xung chân P0.1 ; Trở từ ISR ; Nhảy đến địa ngắt truyền nối tiếp ; Lấy cổng P1 làm cổng đầu vào ; Chọn Timer0 Timer1 chế độ tự nạp lại ; Chọn Timer0 Timer1 chế độ tự nạp lại ; Chọn tốc độ baud 4800 ; Khung liệu: bít liệu, stop, cho phép REN ; Tạo tần số 5kHz ; Cho phép ngắt nối tiếp ; Khởi động Timer1 ; Khởi động Timer0 ; Đọc liệu từ cổng P1 ; Lấy lần liệu ; Ghi vào cổng P2 https://fb.com/tailieudientucntt SJMP BACK ; Trình phục vụ ngắt cổng nối tiÕp ORG 100H SERIAL: JB TI, TRANS MOV A, SBUF MOV P0, A CLR RI RETI TRANS: CLR TI RETI END ; lại vòng lặp ; Nhảy TI vào ; Nếu không tiếp tục nhận liệu ; Gửi liệu nối tiếp đến P0 ; Xoá cờ RI 8051 không làm điều ; Trở từ ISR ; Xoá cờ TI 8051 không xo¸ ; Trë vỊ tõ ISR Tr­íc kÕt thóc phần hÃy để ý đến danh sách tất cờ ngắt cho bảng 11.2 Trong thi TCON giữ cờ ngắt hai cờ TI vµ RI ë ghi SCON cđa 8051 Bảng 11.2: Các bít cờ ngắt Ngắt Ngắt Ngắt Ngắt Timer0 Ngắt Timer1 Ngắt cổng nối tiÕp Ng¾t Timer2 Ng¾t Timer2 Cê IE0 IE1 TF0 TF1 T1 TF2 EXF2 BÝt cña ghi SFR TCON.1 TCON.3 TCON.5 TCON.7 SCON.1 T2CON.7 (TA89C52) T2CON.6 (TA89C52) 11.5 C¸c møc ưu tiên ngắt 8051 11.5.1 Các mức ưu tiên trình bật lại nguồn Khi 8051 cấp nguồn mức ưu tiên ngắt gán theo bảng 11.3 Từ bảng ta thấy ví dụ ngắt phần cứng kích hoạt lúc ngắt đáp ứng trước Chỉ sau ngắt INT0 đà phục vụ xong INT1 phục vụ INT1 có mức ưu tiên thấp Trong thực tế sơ đồ mức ưu tiên ngắt bảng ý nghĩa mà quy trình thăm dò 8051 thăm dò ngắt theo trình tự cho bảng 11.3 đáp ứng chúng cách phù hợp Bảng 11.3: Mức ưu tiên ngắt cấp lại nguồn Mức ưu tiên cao xuống thấp Ngắt Ngắt định thời Ngắt Ngắt định thời Ngắt truyền thông nối tiÕp INT0 TF0 INT1 TF1 (RI + TI) VÝ dô 11.1: CuuDuongThanCong.com https://fb.com/tailieudientucntt HÃy bình luận xem điều xảy ngắt INT0, TF0 INT1 kích hoạt lúc Giả thiết mức ưu tiên thiết lập bật lại nguồn ngắt ngắt theo sườn xung Lời giải: Nếu ba ngắt kích hoạt thời điểm chúng chốt giữ bên Sau kiểm tra tất năm ngắt theo trình tự cho bảng 11.3 Nếu ngắt kích hoạt phục vụ theo trình tự Do vậy, ba ngắt kích hoạt lúc ngắt (IE0) phục vụ trước hết sau đến ngắt Timer0 (TF0) cuối ngắt (IE1) D0 D7 PT2 PS PT1 PX1 PT0 PX0 Hình 11.8: Thanh ghi mức ưu tiên ngắt IP, bít ưu tiên = mức ưu tiên cao, bít ưu tiên = mức ưu tiên thÊp - BÝt D7 vµ D6 hay IP.7 vµ IP.6 - ch­a dïng - BÝt D5 hay IP.5 lµ bÝt ưu tiên ngắt Timer2 (dùng cho 8052) - Bít D4 hay IP.4 bít ưu tiên ngắt cổng nối tiếp - Bít D3 hay IP.3 bít ưu tiên ngắt Timer1 - Bít D2 hay IP.2 mức ưu tiên ngắt - Bít D1 hay IP.1 mức ưu tiên ngắt Timer - Bít D0 hay IP.0 mức ưu tiên ngắt Người dùng không viết phần mềm ghi số vào bít chưa dùng chúng dành cho ứng dụng tương lại 11.5.2 Thiết lập mức ưu tiên ngắt với ghi IP Chúng ta thay đổi trình tự bảng 11.3 cách gán mức ưu tiên cao cho ngắt Điều thực cách lập trình ghi gọi ghi mức ưu tiên ngắt IP (Interrupt Priority) Trên hình 11.8 bít ghi này, bật lại nguồn thi 1P chứa hoàn toàn số để tạo trình tự ưu tiên ngắt theo bảng 11.3 Để ngắt mức ưu tiên cao ta thực đưa bít tương ứng lên cao HÃy xem ví dụ 11.12 Một điểm khác cần làm sáng tỏ mức ưu tiên ngắt hai nhiều bít ngắt ghi IP đặt lên cao Trong trường hợp ngắt có mức ưu tiên cao ngắt khác chúng phục vụ theo trình tự cho bảng 11.3 Xem ví dụ 11.13 VÝ dơ 11.12: a) H·y lËp tr×nh ghi IP để gán mức ưu tiên cao cho ngắt INT1 (ngắt 1) sau b) HÃy phân tích điều xảy INT0, INT1 TF0 kích hoạt lúc Giả thiết tất ngắt ngắt theo sườn Lời giải: a) MOV IP, #0000 0100B ; Đặt bít IP.2 = để gán INT1 mức ưu tiên cao Lệnh SETB IP.2 tác động tương IP ghi đánh địa theo bít b) Lệnh bước a) gán mức ưu tiên cao INT1 so với ngắt khác, INT0, INT1 TF0 kích hoạt lúc trước hết INT1 phục vụ CuuDuongThanCong.com https://fb.com/tailieudientucntt trước sau đến INT0 cuối TF0 Điều INT1 có mức ưu tiên cao hai ngắt ë b­íc a) Sau thùc hiƯn song ng¾t INT1 8051 trở phục vụ ngắt lại theo trình tự ưu tiên bảng 11.3 Ví dụ 11.13: Giả thiết sau bật lại nguồn mức ưu tiên ngắt thiết lập lệnh MOV IP, #0000 1100B HÃy bình luận trình ngắt phục vụ nào? Lời giải: Lệnh MOV IP, #0000 1100B (chữ B giá trị thập phân) thiết lập ngắt (INT1) ngắt Timer1 (TF1) có mức ưu tiên cao ngắt khác Tuy nhiên, chúng thăm dò theo bảng 11.3 nên chúng phục vụ theo trình tự sau: Mức ưu tiên cao nhất: Ngắt (INT1) Ngắt Timer (TF1) Ngắt (INT0) Ngắt Timer0 (TF0) Mức ưu tiên thấp nhất: Ngắt cổng truyền thông nối tiếp (RI + RT) 11.5.3 Ngắt ngắt Điều xảy 8051 thực trình phục vụ ngắt thuộc ngắt lại có ngắt khác kích hoạt? Trong trường hợp ngắt có mức ưu tiên cao ngắt ngắt có mức ưu tiên thấp Đây gọi ngắt ngắt Trong 8051 ngắt ưu tiên thấp bị ngắt ngắt có mức ưu tiên cao không bị ngắt ngắt có mức ưu tiên thấp Mặc dù tất ngắt chốt gửi bên ngắt mức thấp CPU quan tâm tức khắc 8051 chưa kết thúc phục vụ ngắt mức cao 11.5.4 Thu chộp ngắt phần mềm (Triggering) Có nhiều lúc ta cần kiểm tra trình phục vụ ngắt đường mô Điều thực lệnh đơn giản để thiết lập ngắt lên cao cách buộc 8051 nhảy đến bảng véc tơ ngắt Ví dụ, bít IE dành cho Timer1 bật lên lệnh SETB TF1 ngắt 8051 ngừng thực công việc làm buộc nhảy đến bảng véc tơ ngắt Hay nói cách khác, ta không cần đợi cho Timer1 quay trở tạo ngắt Chúng ta gây ngắt lệnh đưa bít ngắt tương ứng lên cao Như chương đà biết ngắt kiện bên bên gây ngắt vi điều khiển để báo cho biết thiết bị cần phục vụ Mỗi ngắt có chương trình kèm với gọi trình phục vụ ngắt ISR Bộ vi điều khiển 8051 có sáu ngắt, năm ngắt người dùng truy cập Đó hai ngắt cho thiết bị phần cứng bên INT0 INT1, hai ngắt cho định thời TF0 TF1 ngắt lành cho truyền thông nối tiếp 8051 lập trình cho phép cấm ngắt nh­ thiÕt lËp møc ­u tiªn cho nã theo yªu cầu thuật toán ứng dụng CuuDuongThanCong.com https://fb.com/tailieudientucntt ... gây ngắt vi điều khiển để báo cho biết thiết bị cần phục vụ Mỗi ngắt có chương trình kèm với gọi trình phục vụ ngắt ISR Bộ vi điều khiển 8051 có sáu ngắt, năm ngắt người dùng truy cập Đó hai ngắt. .. thực trình phục vụ ngắt thuộc ngắt lại có ngắt khác kích hoạt? Trong trường hợp ngắt có mức ưu tiên cao ngắt ngắt có mức ưu tiên thấp Đây gọi ngắt ngắt Trong 8051 ngắt ưu tiên thấp bị ngắt ngắt... Đây điều cần thiết ngắt dành cho nhận truyền 8051 nguồn gây ngắt nguồn nào, trình phục vụ ngắt phải xoá cờ phép ngắt sau đáp ứng sau kết thúc ngắt Điều tương phản với ngắt ngắt định thời 8051

Ngày đăng: 27/08/2021, 11:03

TỪ KHÓA LIÊN QUAN