Bài giảng Vi xử lý - Chương 3: Vi điều khiển. Họ vi điều khiển 8051 (Phần 5)

Hệ thống được điều khiển bằng ngắt – làm nhiều việc đồng thời

Đa nhiệm (vụ) dựa trên Hardware

Không có hỏi vòng

Khi có các sự kiện cụ thể (ngắt) xảy ra, CPU sẽ nhảy đến 1 chương trình con cụ thể – chương trình phục vụ ngắt (ISR), xử lý ngắt

Công việc mức nền ( ở Foreground) vớicông việc mức ngắt ( ở Background)

 

ppt17 trang | Chuyên mục: Vi Xử Lý – Vi Điều Khiển | Chia sẻ: tuando | Lượt xem: 459 | Lượt tải: 0download
Tóm tắt nội dung Bài giảng Vi xử lý - Chương 3: Vi điều khiển. Họ vi điều khiển 8051 (Phần 5), để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
CHƯƠNG 3HỌ VI ĐiỀU KHIỂN 80513.7 Ngắt (Interrupt)Giới thiệu ngắtHệ thống được điều khiển bằng ngắt – làm nhiều việc đồng thờiĐa nhiệm (vụ) dựa trên HardwareKhông có hỏi vòngKhi có các sự kiện cụ thể (ngắt) xảy ra, CPU sẽ nhảy đến 1 chương trình con cụ thể – chương trình phục vụ ngắt (ISR), xử lý ngắtCông việc mức nền ( ở Foreground) vớicông việc mức ngắt ( ở Background)Thực thi chương trìnhTổng quan về cấu trúc ngắt của 8051Các nguồn ngắtThanh ghi cho phép ngắt IE Mặt nạ ngắt Nếu có nhiều nguồn ngắt xảy ra?Mã hóa ưu tiên được sử dụng.Chỉ có 2 cấp ưu tiên trong 8051  Vẫn có nhiều ngắt có thể có cùng ưu tiên ngắtThứ tự ưu tiên ngắtNếu CPU nhận tín hiệu ngắtCPU sẽ cất PC vào ngăn xếp (địa chỉ quay về)CPU sẽ nhảy đến ISR khác nhau theo nguồn ngắt khác nhauPC  địa chỉ vector ngắt (=	3+( # of nguồn ngắt)*8)Xử lý ngắtTổ chức bộ nhớ khi sử dụng ngắtKhung chương trình dùng ngắt 	ORG 0000H	; Điểm vào reset	LJMP MAIN	 	.	; Các điểm vào ISR	 	.	 	.	ORG 0030H ; Điểm vào chương trình chínhMAIN : .	 	.	; Chương trình chính bắt đầu.	Lệnh thứ nhất nhảy đến địa chỉ 0030H, vừa trên các vị trí vector mà các ISR bắt đầu Chương trình phục vụ ngắt có kích thước nhỏ 	Nếu chỉ có một nguồn ngắt được sử dụng, ví dụ Timer 0, thì có thể sử dụng khung chương trình sau :	ORG 0000H	; Reset	LJMP MAIN	ORG 000BH	; Điểm vào ISR cho Timer 0	T0ISR: 	 .	; Bắt đầu ISR cho Timer 0 	 	.	 	RETI	; Quay về chương trình chính	MAIN: 	.	; Chương trình chính	 	 .	 	 .	Nếu sử dụng nhiều ngắt, thì cẩn thận, phải bảo đảm là chúng bắt đầu ở vị trí đúng và không chạy lố sang ISR kế. Vì chỉ có một ngắt được sử dụng trong ví dụ trên, chương trình chính có thể bắt đầu ngay sau lệnh RETI.Chương trình phục vụ ngắt có kích thước lớnThí dụ lúc này chỉ xét Timer 0, có thể sử dụng khung sau :	ORG 0000H	; Điểm vào reset	LJMP MAIN	ORG 000BH	; Điểm vào ISR của Timer 0	LJMP T0ISR	ORG 0030H	; Các vector ngắt tiếp theo	MAIN: .	; Chương trình chính	 .	 .	T0ISR: .	; Bắt đầu ISR cho Timer 0 	 .	 .	RETI	; Quay về chương trình chính.	Để đơn giản, chương trình của chúng ta sẽ chỉ làm một việc lúc ban đầu. Chương trình khởi động timer, cổng nối tiếp và các thanh ghi ngắt cho thích hợp và rồi không làm gì cả. Công việc hoàn toàn được làm trong ISR. Sau các lệnh khởi động, chương trình chính chứa lệnh sau :	HERE:	SJMP HERE	hay dạng viết gọn như sau:	SJMP $Thí dụ: Tạo sóng vuông bằng ngắt của Timer	Các ngắt của Timer xảy ra khi các thanh ghi timer TLx/THx tràn và đặt cờ báo tràn lên 1 (TFx). Ta có chương trình như sau:Phân tích CT Tạo sóng vuông bằng ngắt TimerNgay sau khi reset, PC được nạp trị 0000H. Lệnh đầu tiên được thực thi LJMP MAIN mà rẽ nhánh bỏ qua ISR của Timer 0 đến địa chỉ 0030H trong bộ nhớ mã. Ba lệnh kế (các dòng 11–13) khởi trị Timer 0 chế độ 2 tràn sau 50 s. Lệnh MOV IE, #82H cho phép ngắt của Timer 0. Dĩ nhiên tràn thứ nhất sẽ không xảy ra trong vì có trì hoãn ở các lệnh khởi tạo trị... Cứ sau 50 s một ngắt xảy ra; chương trình chính bị ngắt và ISR (của Timer 0) thực thi. ISR này đảo trạng thái bit cổng và quay về chương trình gọi nó (vòng lặp tại chỗ) và tiếp tục như vậy với 50 s kế.Chú ý là cờ timer TF0 không bị xóa bằng phần mềm. Khi các ngắt được cho phép, TF0 tự động bị xóa bằng phần cứng khi CPU chỉ đến ngắt.Tình cờ địa chỉ quay về trong chương trình chính là địa chỉ của lệnh SJMP. Địa chỉ được cất vào ngăn xếp bên trong trước khi chỉ đến mỗi ngắt và được lấy lại từ ngăn xếp khi thực thi lệnh RETI ở cuối ISR. Vì SP đã không được khởi tạo trị, do đó mặc nhiên nó có giá trị reset là 07H. Tác vụ cất (PUSH) để địa chỉ quay về trong các ô nhớ RAM nội 08H (PCL = byte thấp của PC) và 09H (PCH = byte cao của PC).Thí dụ: Tạo hai sóng vuông dùng ngắt (1/2)	Viết chương trình dùng các ngắt để tạo ra các sóng vuông đồng thời 7 KHz và 500 Hz ở các chân P1.7 và P1.6.	Bài giải.	Cấu hình phần cứng với những định thì cho các dạng sóng mong muốn được cho trong hình sau:Thí dụ: Tạo hai sóng vuông dùng ngắt (2/2)

File đính kèm:

  • pptbai_giang_vi_xu_ly_chuong_3_vi_dieu_khien_ho_vi_dieu_khien_8.ppt