Tài liệu tham khảo TH Vi xử lý GVHD: Trần Hoài Tâm CHƯƠNG VI : HOẠT ĐỘNG NGẮT MỞ ĐẦU: Ngắt (interrupt) sảy điều kiện làm cho trương trình hành bị tạm ngưng điều kiện phục vụ chương trình khác Các ngắt đóng vai trò quan trọng việc thiết kế thực ứng dụng vi điều khiển Các ngắt cho phép hệ thống đáp ứng kiện theo cách không đồng xử lý kiện chương trình khác thực thi Một hệ thống điều khiển ngắt cho ta ảo tưởng làm nhiều công việc đồng thời CPU dĩ nhiên thực nhiều lệnh thời điểm CPU tạm ngưng việc thực thi chương trình để thực thi chương trình khác sau quay trở thực thi tiếp chương trình bị tạm ngưng Điều giống CPU rời khỏi chương trình gọi để thực chương trình bị gọi để sau quay chương trình gọi Chương trình xử lý ngắt gọi chương trình phục vụ ngắt ISR (interrupt service routine) ISR thực thi nhằm đáp ứng ngắt trường hợp tổng quát thực việc xuất nhập với thiết bị Khi ngắt xuất hiện, việc thực thi trương trình tạm thời bị dừng CPU thực rẽ nhánh đến trình phục vụ ngắt ISR CPU thực thi ISR để thực công việc kết thúc việc thực thi gặp lệnh “quay từ trình phục vụ ngắt” RETI Ta nói chương trình thực thi mức ISR thực thi mức ngắt TỔ CHỨC NGẮT CỦA 8051: Có nguyên nhân tạo ngắt 805: hai ngắt bên ngoài, hai ngắt định thời ngắt port nối tiếp 8052 có thêm nguyên nhân ngắt thứ 6: định thời thêm vào, định thời thứ ba Khi ta thiết lập trạng thái ban đầu cho hệ thống, tất ngắt điều bị vô hiệu hóa sau chúng cho phép riêng rẻ phần mềm Khi xảy hai hay nhiều ngắt đồng thời xảy ngắt ngắt phụ vụ, ta có hai sơ đồ xử lý ngắt: sơ đồ chuổi vòng sơ đồ hai mức ưu tiên 2.1 Cho phép không cho phép ngắt: Mỗi nguyên nhân ngắt cho phép không cho phép riêng lẻ thông qua ghi chức đặc biệt định địa bit, ghi cho phép ngắt IE (interrupt enable) có địa byte 0A8H Mỗi bit ghi cho phép không cho phép nguyên nhân ngắt riêng rẻ, ghi IE đồng thời có bit toàn cục (global) cho phép không cho phép tất ngắt 37 Tài liệu tham khảo TH Vi xử lý GVHD: Trần Hoài Tâm Bảng 6.1 Thanh ghi cho phép ngắt IE Bit Ký hiệu Địa bit Mô tả ( 0: không cho phép, 1: cho phép ) IE.7 EA AFH Cho phép/không cho phép ngắt toàn cục IE.6 - AEH Không sử dụng IE.5 ET2 ADH Cho phép ngắt định thời IE.4 ES ACH Cho phép ngắt port nối tiếp IE.3 ET1 ABH Cho phép ngắt định thời IE.2 EX1 AAH Cho phép ngắt từ bên ( ngắt ) IE.1 ET0 A9H Cho phép ngắt định thời IE.0 EX0 A8H Cho phép ngắt từ bên ( ngắt ) Ex: Ngắt định thời cho phép cách dùng hai lệnh: SETB ET1 ; Cho phép ngắt định thời SETB EA ; set bit EA phép ngắt toàn cục MOV IE, #10001000B 2.2 Ưu tiên ngắt: Mỗi nguyên nhân ngắt lập trình riêng rẻ để có hai mức ưu tiên thông qua chức ghi đặc biệt định địa bit, ghi ưu tiên ngắt IP (interrupt priority), ghi có địa byte 0B8H Bảng 6.2 Thanh ghi ưu tiên ngắt IP Bit Ký hiệu Địa bit Mô tả (1: mức cao, 0: mức thấp) IP.7 - - Không sử dụng IP.6 - - Không sử dụng IP.5 PT2 0BDH Ưu tiên ngắt định thời IP.4 PS 0BCH Ưu tiên ngắt port nối tiếp IP.3 PT1 0BBH Ưu tiên ngắt định thời IP.2 PX1 0BAH Ưu tiên ngắt IP.1 PT0 0B9H Ưu tiên ngắt định thời IP.0 PX0 0B8H Ưu tiên ngắt Khi hệ thống thiết lập lại trạng thái ban đầu, ghi IP mặc định tất ngắt mức ưu tiên thấp Chương trình thực thi mức không kết hợp với ngắt nên luôn bị tạm dừng ngắt Nếu có hai ngắt xảy đồng thời ngắt 38 Tài liệu tham khảo TH Vi xử lý GVHD: Trần Hoài Tâm có mức ưu tiên cao phục vụ trước 2.3 Chuỗi vòng: Nếu có hai ngắt có mức ưu tiên xuất đồng thời, chuỗi vòng cố định xác định ngắt phục vụ trước Chuỗi vòng là: ngắt 0, ngắt định thời 0, ngắt 1, ngắt định thời 1, ngắt port nối tiếp, ngắt định thời XỬ LÝ NGẮT : Khi có ngắt xuất CPU chấp nhận, chương trình bị ngắt Các thao tác sau xảy ra: Hoàn tất việc thực thi lệnh hành Bộ đếm chương trình PC cất vào stack Trạng thái ngắt hành lưu giữ lại Các ngắt chận lại mức ngắt Bộ đếm chương trình PC nạp địa vector trình phục vụ ngắt ISR ISR thực thi ISR thực thi để đáp ứng công việc ngắt Việc thực thi ISR kết thúc gặp lệnh RETI Lệnh lấy lại giá trị cũ đếm chương trình PC từ stack phục hồi trạng thái ngắt cũ Các vector ngắt: Khi ngắt chấp nhận, giá trị nạp cho đếm chương trình PC gọi vector ngắt Vector ngắt địa bắt đầu trình phục vụ ngắt nguyên nhân ngắt tương ứng Bảng 6.3 Bảng véctor ngắt Ngắt Địa vector Reset hệ thống 0000H Ngắt 0003H Ngắt định thời 000BH Ngắt 0013H Ngắt định thời 001BH Ngắt port nối tiếp 0023H Ngắt định thời 002BH THIẾT KẾ CHƯƠNG TRÌNH SỬ DỤNG CÁC NGẮT: Khuôn mẫu đề nghị cho chương trình thực thi độc lập có sử dụng ngắt 39 Tài liệu tham khảo TH Vi xử lý GVHD: Trần Hoài Tâm sau: ORG 0000H ; điểm nhập sau reset LJMP MAIN - ; điểm nhập ISR ORG 0030H ; điểm nhập chương trình MAIN: ; chương trình bắt đầu END 4.1 Các trình phục vụ ngắt kích thước nhỏ: Các trình phục vụ ngắt phải bắt đầu gần đáy nhớ chương trình địa qui định Mặc dù có byte điểm nhập trình phục vụ ngắt, dung lượng thường đủ để thực công việc yêu cầu quay trở chương thình từ trình phục vụ ngắt Điều có nghĩa trình phục vụ ngắt cho ngắt tương ứng thường không dài byte Nếu có nhiều ngắt dùng ta phải cẩn thận để đảm bảo ISR bắt đầu vị trí mà không tràn sang ISR kế Ex: ORG 0000H ; điểm nhập reset LJMP MAIN ORG 000BH ; điểm nhập ngắt định thời T0_ISR : ; bắt đầu ISR cho định thời MOV P2, #00001111B RETI MAIN : ; trở chương trình ; chương trình END ; kết thúc chương trình 4.2 Các trình phục vụ ngắt kích thước lớn: Nếu trình phục vụ ngắt dài byte cần đến, ta phải di chuyển phương trình đến nơi khác nhớ chương trình ta cho lấn qua điểm nhập ISR 40 Tài liệu tham khảo TH Vi xử lý GVHD: Trần Hoài Tâm kế Điển hình ISR bắt đầu với lệnh nhảy đến vùng khác nhớ chương trình, ISR trãi rộng cần Ex: ORG 0000H ; điểm nhập reset LJMP MAIN ORG 000BH ; điểm nhập ngắt timer LJMP T0_ISR - ; điểm nhập ngắt khác (nếu có) ORG 0030H ; địa phía vector ngắt MAIN: ; chương trình T0_ISR: - ; chương trình phục vụ ngắt ; định thời RETI ; quay chương trình END Ex: Viết chương trình tạo sóng vuông có tần số 10KHz chân p1.0 sử dụng định thời ngắt định thời ORG 0000H ; điểm nhập reset LJMP MAIN ORG 000BH T0_ISR: ; điểm nhập ngắt timer ; ISR timer CPL P1.0 ; đảo bit P1.0 RETI ; trở chương trình MAIN: MOV TMOD, #00000010B ; timer hoạt động chế độ (8 bit) MOV TH0, #-50 ; giá trị nạp lại tương ứng với 50us MOV IE, #10000010B ; cho phép ngắt định thời 41 Tài liệu tham khảo TH Vi xử lý GVHD: Trần Hoài Tâm SETB TR0 ; bật timer SJMP $ ; nhảy chỗ END Ex: Viết chương trình sử dụng ngắt để tạo đồng thời dạng sóng vuông có tần số 10KHz chân P1.0 500Hz chân P1.1 ORG 0000H LJMP MAIN ORG 000BH LJMP NGAT_T0 ORG 001BH LJMP NGAT_T1 ORG 0030H MAIN: MOV TMOD, #00010010B ; timer chế độ 1, timer chế độ MOV TH0, #-50 MOV TH1, #HIGH(-1000) MOV TL1, #LOW(-1000) MOV IE, #10001010B SETB TR0 SETB TR1 SJMP $ NGAT_T0: CPL P1.0 RETI NGAT_T1: CLR TR1 MOV TH1, #HIGH(-1000) MOV TL1, #LOW(-1000) SETB TR1 CPL P1.1 RETI END 42 Tài liệu tham khảo TH Vi xử lý GVHD: Trần Hoài Tâm 4.3 Các ngắt ngoài: Ngắt xảy có mức thấp có cạnh âm chân /INT0 /INT1 Việc chọn ngắt thuộc tác động cạnh hay ngắt loại tác động mức lập trình thông qua bit IT0 IT1 ghi TCON Vì chân ngắt lấy mẫu lần chu kỳ máy ngõ vào phải trì tối thiểu 12 chu kỳ dao động để đảm bảo việc lấy mẫu Nếu ngắt thuộc tác động cạnh nguyên nhân ngắt phải trì chân yêu cầu mức cao tối thiểu chu kỳ sau mức thấp tối thiểu chu kỳ để đảm bảo việc chuyển trạng thái phát IE0 IE1 tự động xóa CPU trỏ tới trình phục vụ ngắt tương ứng Nếu ngắt thuộc loại tác động mức, nguyên nhân ngắt phải trì trạng thái tích cực ngắt theo yêu cầu thực tạo Sau nguyên nhân ngắt phải trạng thái thụ động trước trình phục vụ ngắt thực thi xong trước có ngắt khác tạo Thông thường, công việc thực thi bên trình phục vụ ngắt làm cho nguyên nhân ngắt trả tín hiệu yêu cầu ngắt trở trạng thái không tích cực 43 ... hai ngắt có mức ưu tiên xuất đồng thời, chuỗi vòng cố định xác định ngắt phục vụ trước Chuỗi vòng là: ngắt 0, ngắt định thời 0, ngắt 1, ngắt định thời 1, ngắt port nối tiếp, ngắt định thời XỬ... nguyên nhân ngắt tương ứng Bảng 6.3 Bảng véctor ngắt Ngắt Địa vector Reset hệ thống 0000H Ngắt 0003H Ngắt định thời 000BH Ngắt 0013H Ngắt định thời 001BH Ngắt port nối tiếp 0023H Ngắt định thời... Tài liệu tham khảo TH Vi xử lý GVHD: Trần Hoài Tâm 4.3 Các ngắt ngoài: Ngắt xảy có mức thấp có cạnh âm chân /INT0 /INT1 Vi c chọn ngắt thuộc tác động cạnh hay ngắt loại tác động mức lập trình thông