1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

ngắt trong vi điều khiển

54 273 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 54
Dung lượng 552,03 KB

Nội dung

GV LÊ TIẾN DŨNG Bộ môn Tự ñộng hóa – Khoa ðiện Trường ðại học Bách khoa – ðại học ðà Nẵng Email: ltdung@udn.vn CHƯƠNG HOẠT ðỘNG NGẮT GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT Một vi ñiều khiển phục vụ số thiết bị Có phương pháp phục vụ thiết bị, ñó sử dụng ngắt phương pháp thăm dò (polling) Ở phương pháp ngắt, có thiết bị cần phục vụ thiết bị báo cho vi ñiều khiển biết cách gửi tín hiệu ngắt Khi nhận ñược tín hiệu này, vi ñiều khiển dừng công việc ñang thực ñể chuyển sang phục vụ thiết bị Chương trình ñi với ngắt gọi trình phục vụ ngắt (Interrupt Service Routine) GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT ðối với phương pháp thăm dò, vi ñiều khiển liên tục kiểm tra tình trạng thiết bị ñiều kiện ñược ñáp ứng tiến hành phục vụ thiết bị Sau ñó vi ñiều khiển chuyển qua kiểm tra trạng thái thiết bị cho ñến tất ñều ñược phục vụ GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT ðiểm mạnh phương pháp ngắt vi ñiều khiển phục vụ ñược nhiều thiết bị, dĩ nhiên không thời ñiểm Mỗi thiết bị ñược vi ñiều khiển phục vụ dựa theo mức ưu tiên ñược gán Ở phương pháp thăm dò gán mức ưu tiên cho thiết bị ñược vi ñiều khiển tiến hành kiểm tra thiết bị theo phương pháp hỏi vòng Ngoài ra, phương pháp ngắt cho phép vi ñiều khiển che bỏ qua yêu cầu phục vụ thiết bị, ñiều mà phương pháp thăm dò không thực ñược GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT Ngắt (interrupt) xảy ñiều kiện - kiện - làm cho chương trình bị tạm ngưng ñiều kiện ñược phục vụ chương trình khác Trong hệ thống ñược ñiều khiển ngắt, việc ngắt nhằm ñáp ứng kiện mà kiện xuất không ñồng với chương trình ñang ñược thực thi chương trình (hay nói cách khác CPU) trước bị ngắt GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT Chương trình xử lý ngắt ñược gọi Trình phục vụ ngắt (ISR) hay Quản lý ngắt (Interrupt Handler) Khi ngắt xuất hiện, việc thực thi chương trình bị tạm dừng CPU thực việc rẽ nhánh ñến trình phục vụ ngắt ISR CPU thực thi ISR kết thúc việc thực thi gặp lệnh RETI; chương trình ñược tiếp tục nơi bị tạm dừng GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT TRÌNH TỰ THỰC HIỆN MỘT NGẮT Kết thúc lệnh ñang thực lưu ñịa lệnh (PC) vào ngăn xếp Lưu tình trạng tất ngắt vào bên (không lưu vào ngăn xếp) Nó nhảy ñến vị trí cố ñịnh nhớ ñược 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 ñịa ñó Nó bắt ñầu thực trình phục vụ ngắt cho ñến lệnh cuối ISR RETI (trở từ ngắt) Khi gặp lệnh RETI, 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 nạp hai byte ñỉnh ngăn xếp vào PC Sau ñó bắt ñầu thực lệnh từ ñịa ñó GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT Có nguyên nhân tạo ngắt (ñối với chip 8051): ngắt bên ngoài, ngắt ñịnh thời ngắt port nối tiếp Ngoài reset ñược xem ngắt Khi ta thiết lập trạng thái ban ñầu hệ thống (reset), tất ngắt ñều bị vô hiệu hóa (cấm) sau ñó chúng ñược cho phép riêng rẽ phần mềm 10 GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT Ví dụ: Xuất ký tự sử dụng ngắt Viết chương trình sử dụng ngắt ñể liên tục phát ñi tập mã ASCII (bao gồm mã ñiều khiển) ñến thiết bị ñầu cuối nối với 8051 qua port nối tiếp Có 128 mã ASCII 7-bit bảng mã ASCII Các mã bao gồm 95 mã ñồ họa (từ 20H ñến 7EH) 33 mã ñiều khiển (từ 00H ñến 1FH 7FH) 40 GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT ORG LJMP MAIN ORG 0023H ; ðiểm nhập ngắt port nối tiếp LJMP SPISR ORG 0030H MAIN: SPISR: SKIP: MOV TMOD, #20H ; Bộ ñịnh thời 1, chế ñộ MOV TH1,#-26 ; giá trị nạp lại: 1200 baud SETB TR1 ; bắt ñầu ñịnh thời MOV SCON,#42 ; chế ñộ 1, set TI ñể buộc có ngắt ñầu tiên, gửi kí tự thứ MOV A,#20H ; Gửi ký tự trắng ñầu tiên MOV IE,#90H ; Cho phép ngắt port nối tiếp SJMP $ ; Ko làm CJNE A,#7FH,SKIP ; Nếu kết thúc tập mã ASCII MOV A,#20H ; reset ñến SPACE MOV SBUF,A ; Gửi ký tự ñến port nối tiếp INC A ; Ký tự CLR TI ; Xóa cờ ngắt phát RETI END 41 GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT Sau nhảy ñến nhãn MAIN ñịa 0030H, ba lệnh ñầu tiên khởi ñộng ñịnh thời ñể cung cấp xung clock 1200 baud cho port nối tiếp, lệnh MOV SCON, #42H khởi ñộng port nối tiếp chế ñộ (UART 8-bit) set cờ TI ñể buộc phải tạo ngắt Sau ñó mã ASCII ñầu tiên (20H) ñược nạp cho ghi A ngắt port nối tiếp ñược cho phép Cuối chương trình ñi vào vòng lặp “không làm gì” (chờ ngắt) 42 GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT Trình phục vụ ngắt port nối tiếp làm tất công việc chương trình ñã thiết lập ñiều kiện ban ñầu Hai lệnh ñầu tiên kiểm tra chứa mã ASCII ñạt ñến 7FH (nghĩa mã vừa phát ñi 7EH), chứa ñược thiết lập lại với nội dung 20H Sau ñó mã ASCII ñược gửi ñến ñệm port nối tiếp (MOV SBUF,A), tăng ghi chứa A ñể có mã kế tiếp, cờ ngắt phát ñược xóa (CLR TI) trình phục vụ ngắt kết thúc ðiều khiển trả chương trình lệnh SJMP $ ñược thực thi cho ñến TI lại ñược set 43 GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT LẬP TRÌNH NGẮT NGOÀI Ngắt xảy có mức thấp có cạnh âm chân /INT0 /INT1 8051 Thực tế cờ tạo ngắt bit IE0 IE1 ghi TCON Khi ngắt ñược tạo ra, cờ tạo ngắt ñược xóa phần cứng CPU trỏ ñến trình phục vụ ngắt ngắt thuộc loại tác ñộng cạnh Nếu ngắt thuộc loại tác ñộng mức, nguyên nhân ngắt ñiều khiển mức cờ thay phần cứng chip 44 GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT Việc chọn ngắt loại tác ñộng cạnh hay ngắt loại tác ñộng mức ñược lập trình thông qua bit IT0 IT1 ghi TCON Ví dụ: Nếu IT1 = 0, ngắt ñược kích khởi việc phát mức thấp chân /INT1 Nếu IT1 = 1, ngắt ñược kích khởi cạnh Ở chế ñộ này, mẫu liên tiếp chân /INT1 cho thấy chân mức cao chu kỳ mức thấp chu kỳ kế, cờ ngắt IE1 ghi TCON ñược set 1; kế ñến IE1 yêu cầu ngắt 45 GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT Vì chân ngắt ñược lấy mẫu lần chu kỳ máy, ngõ vào phải ñược trì tối thiểu 12 chu kỳ dao ñộng ñể ñảm bảo việc lấy mẫu ñúng Nếu ngắt thuộc loại tác ñộng cạnh, nguyên nhân ngắt phải ñược 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 ñược phát IE0 IE1 tự ñộng ñược xóa CPU trỏ tới trình phục vụ ngắt tương ứng 46 GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT Nếu ngắt thuộc loại tác ñộng mức, nguyên nhân ngắt phải ñược trì trạng thái tích cực cho ñến ngắt theo yêu cầu thực ñượ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 ñược thực thi xong trước có ngắt khác ñược tạo Thông thường, công việc ñượ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 47 GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT Ví dụ 1: Sử dụng ngắt ñể thiết kế ñiều khiển lò nung cho nhiệt ñộ ñược trì 200C ± 10C 48 GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT Cuộn dây ñiều khiển mở/tắt lò ñược nối với chân P1.7 cho: P1.7 = : Mở lò P1.7 = : Tắt lò Cảm biến nhiệt ñộ ñược nối với /INT0, /INT1 cung cấp tín hiệu /HOT, /COLD sau: /HOT = T>210C /COLD = T210C ; Tắt lò ; Không làm 50 GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT Ví dụ 2: Sử dụng ngắt ñể tạo âm hiệu 400Hz 1second (sử dụng loa nối với chân P1.7) cảm biến ñặt cửa (nối với chân /INT0) tạo chuyển trạng thái từ mức cao xuống mức thấp 8051 51 GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT Giải pháp: Sử dụng ngắt: Ngắt (bộ cảm biến cửa), ngắt Timer0 (âm hiệu 400Hz) ngắt ñịnh thời (ñịnh thời 1second) Xung 400Hz: T0 = 1/400Hz = 2500µs => t0 = 1250µs Bộ ñịnh thời mode (16bit) 400Hz ðịnh thời 1s: T1 = 1s = 20 * 50000µs => t1 = 50000 lặp lại 20 lần Bộ ñịnh thời mode (16bit) 52 GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT MAIN: EX0ISR: ORG LJMP MAIN ORG 0003H LJMP EX0ISR ORG 000B LJMP T0ISR ORG 001BH LJMP T1ISR ORG 0030H SETB IT0 ; Tác ñộng cạnh âm MOV TMOD,#00010001B MOV IE,10000001B SJMP $ ; Không làm MOV R3,#20 ; 20x50000 = 1s SETB TF0 ; Buộc ngắt ñịnh thời SETB TF1 ; Buộc ngắt ñịnh thời SETB ET0 ; Cho phép ngắt Timer0 SETB ET1 ; Cho phép ngắt Timer1 RETI T0ISR: SKIP: EXIT: T1ISR: CLR TR0 ; Dừng Timer DJNZ R3,SKIP ; ðủ 20 lần CLR ET0 ; Nếu ñủ kết thúc âm ñiệu CLR ET1 LJMP EXIT MOV TH0,#3CH MOV TL0,#0B0H SETB TR0 RETI CLR TR1 MOV TH1,#0FBH MOV TL1,#1EH CPL P1.7 SETB TR1 RETI END 53 GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 THANK YOU ! SEE YOU IN NEXT CHAPTER 54 GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 [...]... LẬP TRÌNH NGẮT CHO BỘ ðỊNH THỜI TF0 Vector ngắt Timer 0 1 000BH TF1 Vector ngắt Timer 1 1 001BH Nhảy tới Nhảy tới Nếu bit ngắt bộ ñịnh thời trong thanh ghi IE ñược phép thì mỗi khi bộ ñịnh thời quay trở về 0 cờ TF ñược bật lên và bộ vi ñiều khiển bị ngắt tại bất kỳ vi c gì nó ñang thực hiện và nhảy tới bảng véc tơ ngắt ñể phục vụ ISR Bằng cách này thì bộ vi ñiều khiển có thể làm những công vi c khác... và EX2 Vị trí nhớ trong bảng vector ngắt của hai ngắt INT0 và INT1 này là 0003H và 0013H 4 Truyền thông nối tiếp có một ngắt cho cả thu lẫn phát ðịa chỉ của ngắt này trong bảng vector ngắt là 0023H 13 GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT Khi xảy ra 2 hay nhiều ngắt ñồng thời hoặc xảy ra một ngắt trong khi một ngắt khác ñang ñược... trình phục vụ ngắt của nguyên nhân ngắt tương ứng Khi một chương trình phục vụ ngắt ñược trỏ tới, cờ gây ra ngắt sẽ tự ñộng bị xóa về 0 bởi phần cứng Các ngoại lệ bao gồm các cờ RI và TI ñối với các ngắt do port nối tiếp; TF2 và EXF2 ñối với các cờ ngắt do bộ ñịnh thời 2 Các nguyên nhân ngắt thuộc 2 ngoại lệ vừa nêu trên do có 2 khả năng tạo ra ngắt nên trong thực tế CPU không xóa cờ ngắt 18 GV Lê... Cho phép ngắt toàn cục Dự phòng cho tương lai Cho phép hoặc cấm ngắt tràn hoặc thu của Timer2 Cho phép hoặc cấm ngắt cổng nối tiếp Cho phép hoặc cấm ngắt tràn của Timer1 Cho phép hoặc cấm ngắt ngoài 1 Cho phép hoặc cấm ngắt tràn của Timer0 Cho phép hoặc cấm ngắt ngoài 0 16 GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT CHO PHÉP MỘT NGẮT Bít... 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 cao 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ị cao 17 GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT Khi một ngắt ñược chấp nhận, giá trị vector ngắt ñược nạp cho bộ ñếm chương trình PC Vector ngắt. .. 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 IE là thanh ghi có thể ñịnh ñịa chỉ theo bít 15 GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT Thanh ghi cho phép ngắt IE D0... sơ ñồ xử lý các ngắt: Sơ ñồ chuỗi vòng và sơ ñồ hai mức ưu tiên Sơ ñồ chuỗi vòng là sơ ñồ cố ñịnh còn sơ ñồ ưu tiên ngắt ñược lập trình bởi người sử dụng 14 GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT CHO PHÉP MỘT NGẮT Khi Reset 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... trình phục vụ ngắt ðiều này có nghĩa là trình phục vụ ngắt cho các ngắt tương ứng thường không dài quá 8 bytes 22 GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT Nếu chỉ có một nguyên nhân ngắt ñược dùng, thí dụ ngắt do bộ ñịnh thời 0, khuôn mẫu chương trình dưới ñây ñược ñề nghị sử dụng ORG 0000H ; reset LJMP MAIN ; Nhảy qua vùng ngắt ORG 000BH... hiện trong trình phục vụ ngắt Các chương trình chính chỉ làm một số vi c khởi ñộng ở thời ñiểm bắt ñầu Chương trình chính khởi ñộng bộ ñịnh thời, port nối tiếp, khởi tạo biến, nạp giá trị cho các thanh ghi ngắt sao cho thích hợp…… rồi không làm gì cả 27 GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT Các công vi c hoàn toàn ñược thực thi trong. .. trong ngắt, sau khi khởi ñộng, chương trình chính chứa lệnh sau: HERE: SJMP HERE Khi có một ngắt xuất hiện, chương trình chính tạm thời bị ngắt trong khi ISR ñược thực thi Lệnh RETI cuối chương trình ngắt trả ñiều khiển về chương trình chính và chương trình này tiếp tục không làm gì cả 28 GV Lê Tiến Dũng Automation Department, Faculty of Electrical Engineering – DUT / 2007 CHƯƠNG 6: HOẠT ðỘNG NGẮT LẬP

Ngày đăng: 30/10/2015, 18:19

TỪ KHÓA LIÊN QUAN

w