Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 16 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
16
Dung lượng
401,86 KB
Nội dung
Tài liệu thực hành Vi điều khiển BÀI 6: INTERRUPT (NGẮT) MỤC ĐÍCH Giúp sinh viên khảo sát vấn đề sau: - Sử dụng phần mềm Proteus để mơ mạch điện Tìm hiểu cách sử dụng ngắt 89C51 THIẾT BỊ SỬ DỤNG - Máy vi tính Phần mềm Proteus Cơ sở lý thuyết Thanh ghi IE (Interrupt Enable Register) Thanh ghi IE dùng phép hay cấm ngắt hoạt động Mặc định khởi động chương trình tất ngắt bị cấm Chức bit ghi IE cho bảng sau: D7 D6 D5 D4 D3 EA - EA - D2 D1 D0 ES ET1 EX1 ET0 EX0 = 0: cấm tất ngắt = 1: cho phép ngắt tuỳ theo trạng thái bit điều khiển tương ứng ES = 0: cấm ngắt port nối tiếp = 1: cho phép ngắt port nối tiếp ET1 = 0: cấm ngắt Timer = 1: cho phép ngắt Timer EX1 = 0: cấm ngắt ngắt ( INT1 : chân P3.3) = 1: cho phép ngắt ngắt ET0 = 0: cấm ngắt Timer = 1: cho phép ngắt Timer EX0 = 0: cấm ngắt ngắt ( INT0 : chân P3.2) = 1: cho phép ngắt ngắt Để cho phép ngắt Timer 0, ta phải có: EA = ET0 = Nội dung ghi IE là: Phạm Hùng Kim Khánh Trang 40 Tài liệu thực hành Vi điều khiển D7 D6 D5 D4 D3 D2 D1 D0 0 0 = 82h Chương trình thực sau: SETB EA SETB ET0 Hay viết: MOV IE,#82h Danh sách ngắt 89C51 - Ngắt 0: Địa vector ngắt Khai báo sử dụng ngắt Sự kiện ngắt: 0003H - SETB EA - SETB EX0 - SETB IT0 (ngắt cạnh) Xuất cạnh xuống (hoặc mức thấp) chân INT0 - Ngắt timer0: Địa vector ngắt Khai báo sử dụng ngắt Sự kiện ngắt - SETB - SETB Tràn timer 000BH EA ET0 - Ngắt 1: Địa vector ngắt Khai báo sử dụng ngắt Sự kiện ngắt: 00013H - SETB EA - SETB EX1 - SETB IT1 (ngắt cạnh) Xuất cạnh xuống (hoặc mức thấp) chân INT1 - Ngắt timer1: Địa vector ngắt Khai báo sử dụng ngắt Sự kiện ngắt Phạm Hùng Kim Khánh - SETB - SETB Tràn timer 0001BH EA ET1 Trang 41 Tài liệu thực hành Vi điều khiển - Ngắt truyền thông (truyền/nhận UART): Địa vector ngắt Khai báo sử dụng ngắt Sự kiện ngắt Tốc độ truyền nhận MODE autoreload (timer1) 00023H - SETB EA - SETB ES Nhận byte truyền xong byte SBUF - TH1 = -3 ; 9600bps - TH1 = -6 ; 4800bps - TH1 = -12 ; 2400bps - TH1 = -24 ; 1200bps SƠ ĐỒ CHƯƠNG TRÌNH KHI CĨ SỬ DỤNG NGẮT: KHAI BÁO NGẮT Sự kiện ngắt Vector ngắt: RETI Cấu trúc chương trình sử dụng ngắt Chương trình sử dụng ngắt bao gồm phần: phần chương trình phần xử lý ngắt Một đoạn chương trình ví dụ sử dụng ngắt sau: ORG LJMP ORG LJMP main 0003h int0_isr ; Địa bắt đầu chương trình ; Địa chương trình phục vụ ngắt cho INT0 Main: ; khai báo sử dụng ngắt SETB EA SETB EX0 ; Có thể thay lệnh lệnh MOV IE,#81h ; chương trình Int0_isr: ; chương trình phục vụ ngắt RETI END Phạm Hùng Kim Khánh Trang 42 Tài liệu thực hành Vi điều khiển VSM Oscilloscope VSM Oscilloscope thiết bị cho phép hiển thị dạng tín hiệu tương tự, bao gồm kênh A B VSM có khả đo tín hiệu đồng thời Vị trí Oscilloscope cửa sổ thiết kế sau: Hình ảnh Oscilloscope thiết kế thực thi chương trình sau: Màn hình hiển thị dạng sóng tín hiệu Chọn hiển thị kênh hay kênh Chọn hiển thị đồng thời kênh hay vẽ kênh theo kênh Đồng tín hiệu (cho phép dừng tín hiệu) Chọn chế độ hiển thị cho kênh 1: - DC: hiển thị AC DC - GND: chỉnh mức GND - AC: hiển thị AC Phạm Hùng Kim Khánh Chỉnh hệ số trục tung Y kênh (biên độ) Chỉnh hệ số trục hoành X (thời gian) Trang 43 Tài liệu thực hành Vi điều khiển Tiến trình thực Ngắt Timer Tạo xung vng Sử dụng mạch hình vẽ: - Thực chương trình dùng ngắt Timer tạo xung vuông tần số f = KHz P2.0 sau: ORG 0000h LJMP main ORG 000Bh LJMP timer0_isr main: MOV IE,#82h MOV TMOD,#02h MOV TH0,#(-100) ; f = 5KHz T = 1/f = 0.2ms = 200 µs thời gian MOV TL0,#(-100) ; trễ 100 µs giá trị đếm Timer 100 SETB TR0 Here: SJMP here ; Timer0_isr: CPL P2.0 Phạm Hùng Kim Khánh Trang 44 Tài liệu thực hành Vi điều khiển RETI END - Thực chương trình dùng ngắt Timer Timer đồng thời tạo xung vuông tần số f = KHz P2.0 f = 500Hz P2.1 sau: ORG 0000h LJMP main ORG 000Bh LJMP Timer0_isr ORG 001Bh LJMP Timer1_isr main: SETB EA SETB ET0 SETB ET1 MOV TMOD,#12h MOV TH0,#(-100) MOV TL0,#(-100) SETB TR0 MOV TH1,#HIGH(-1000) MOV TL1,#LOW(-1000) SETB TR1 here: SJMP here ; Timer0_isr: CPL P2.0 RETI ; Timer1_isr: MOV TH1,#HIGH(-1000) MOV TL1,#LOW(-1000) CPL P2.1 RETI ; END Phạm Hùng Kim Khánh Trang 45 Tài liệu thực hành Vi điều khiển - Viết chương trình dùng ngắt Timer Timer đồng thời tạo xung vuông tần số f = 20 KHz P2.3 f = 100Hz P2.4 Quét Led đoạn - Vẽ sơ đồ quét Led đoạn (2 Led anode chung, P1: data, P2.0, P2.1: control) - Viết chương trình cho Led tăng dần từ 10 – 50, thời gian quét Led 1.5ms dùng ngắt timer 0, mode 1, thời gian tăng 700ms dùng timer 1, mode - Vẽ sơ đồ quét Led đoạn (4 Led anode chung, P1: data, P2.0, P2.1, P2.2, P2.3: control) - Viết chương trình hiển thị stAr Led, 5s sau hiển thị stOP Thời gian quét Led 2ms dùng ngắt timer 1, mode 1, thời gian delay dùng timer 0, mode Mạch đồng hồ - Chọn menu System > Set Sheet Sizes Chọn kích thước Sheet A3: Sử dụng mạch hình vẽ (các IC chốt sử dụng 74LS374) Các linh kiện cho sau: Keywords Category 7seg All Phạm Hùng Kim Khánh Sub-category Results All 7SEG-COM-ANODE Trang 46 Tài liệu thực hành Vi điều khiển 8951 374 Switch All All 74 TTL Series All Switches & Relays Switches AT89C51 74LS374 SW-SPDT Chương trình đồng hồ: ORG LJMP main ORG 0Bh LJMP Timer0_ISR main: SETB EA SETB ET0 MOV TMOD,#01h MOV TH0,#HIGH(-50000) ; Đếm 50000 chu kỳ = 50 ms MOV TL0,#LOW(-50000) MOV R7,#20 ; 20 x 50ms = 1000ms = 1s SETB TR0 MOV 30h,#0 ; Giờ MOV 31h,#0 ; Phút Phạm Hùng Kim Khánh Trang 47 Tài liệu thực hành Vi điều khiển MOV 32h,#0 ; Giây CALL display here: SJMP here ; -Timer0_ISR: MOV TH0,#HIGH(-50000) MOV TL0,#LOW(-50000) DJNZ R7,exittimer0 MOV R7,#20 CALL IncTime ; Cứ 1s tăng thời gian CALL display ; hiển thị Led exittimer0: RETI ; IncTime: INC 32h ; Tăng giây MOV A,32h CJNE A,#60,ExitIncTime ; Nếu Giây = 60 MOV 32h,#0 ; Giây = INC 31h ; tăng phút MOV A,31h CJNE A,#60,ExitIncTime ; Nếu Phút = 60 MOV 31h,#0 ; Phút = INC 30h ; tăng MOV A,30h CJNE A,#24,ExitIncTime ; Nếu = 24 MOV 30h,#0 ; Giờ = ExitIncTime: RET ; display: MOV A,30h ; Hiển thị Led MOV B,#10 DIV AB Phạm Hùng Kim Khánh Trang 48 Tài liệu thực hành Vi điều khiển MOV DPTR,#MaLed7 MOVC A,@A+DPTR MOV P2,A CLR P1.0 SETB P1.0 MOV A,B MOVC A,@A+DPTR MOV P2,A CLR P1.1 SETB P1.1 MOV A,31h ; Hiển thị Led phút MOV B,#10 DIV AB MOV DPTR,#MaLed7 MOVC A,@A+DPTR MOV P2,A CLR P1.2 SETB P1.2 MOV A,B MOVC A,@A+DPTR MOV P2,A CLR P1.3 SETB P1.3 MOV A,32h ; Hiển thị Led giây MOV B,#10 DIV AB MOV DPTR,#MaLed7 MOVC A,@A+DPTR MOV P2,A CLR P1.4 SETB P1.4 MOV A,B MOVC A,@A+DPTR MOV P2,A CLR P1.5 Phạm Hùng Kim Khánh Trang 49 Tài liệu thực hành Vi điều khiển SETB P1.5 RET ; MaLed7: DB 0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8h,80h,90h END - Sửa chương trình phép đếm thể thao: Led phút, Led giây Led %giây Ngắt Sử dụng mạch hình vẽ: Các linh kiện cho sau: Keywords 7seg 8951 374 Switch - Category All All 74 TTL Series Switches & Relays Sub-category All All All Switches Results 7SEG-COM-ANODE AT89C51 74LS374 SW-SPDT Viết chương trình đếm sử dụng ngắt ngồi sau (mỗi lần có ngắt xảy tăng nội dung nhớ 30h lên xuất Led đoạn): ORG LJMP main ORG 03h LJMP Int0_ISR main: Phạm Hùng Kim Khánh Trang 50 Tài liệu thực hành Vi điều khiển SETB EA SETB EX0 MOV 30h,#0 CALL display here: SJMP here ; -Int0_ISR: INC 30h MOV A,30h CJNE A,#100,next MOV 30h,#0 next: CALL display RETI ; display: MOV A,30h MOV B,#10 DIV AB MOV DPTR,#MaLed7 MOVC A,@A+DPTR MOV P2,A CLR P1.0 SETB P1.0 MOV A,B MOVC A,@A+DPTR MOV P2,A CLR P1.1 SETB P1.1 RET ; MaLed7: DB 0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8h,80h,90h END Phạm Hùng Kim Khánh Trang 51 Tài liệu thực hành Vi điều khiển Thêm vào lệnh cho phép ngắt cạnh sau (tại đoạn in đậm): - SETB EA SETB EX0 SETB IT0 - So sánh trường hợp sử dụng ngắt cạnh mức logic - Sửa chương trình phép đếm từ 10 – 50 Kết hợp ngắt ngắt Timer Các linh kiện cho sau: Keywords 7seg 8951 374 Switch Switch Category Subcategory All All All All 74 TTL Series All Switches & Switches Relays Switches & Switches Relays Results Componet Reference 7SEG-COM-ANODE AT89C51 74LS374 BUTTON INC BUTTON DEC Sử dụng mạch hình vẽ: Chương trình đếm giây điều chỉnh giá trị hiển thị cơng tắc (nhấn INC tăng giá trị hiển thị nhấn DEC giảm giá trị hiển thị) sau: ORG LJMP main ORG 03h LJMP Int0_ISR Phạm Hùng Kim Khánh Trang 52 Tài liệu thực hành Vi điều khiển ORG 0Bh LJMP Timer0_ISR ORG 13h LJMP Int1_ISR main: SETB EA SETB EX0 SETB EX1 SETB ET0 SETB IT0 SETB IT1 MOV TMOD,#01h MOV TH0,#HIGH(-50000) MOV TL0,#LOW(-50000) MOV R7,#20 SETB TR0 MOV 30h,#0 CALL display here: SJMP here ; -Int0_ISR: INC 30h MOV A,30h CJNE A,#100,next MOV 30h,#0 next: CALL display RETI ; -Int1_ISR: DEC 30h MOV A,30h CJNE A,#255,next1 MOV 30h,#99 Phạm Hùng Kim Khánh Trang 53 Tài liệu thực hành Vi điều khiển next1: CALL display RETI ; Timer0_ISR: MOV TH0,#HIGH(-50000) MOV TL0,#LOW(-50000) DJNZ R7,exittimer0 MOV R7,#20 INC 30h MOV A,30h CJNE A,#100,next2 MOV 30h,#0 next2: CALL display exittimer0: RETI ; display: MOV A,30h MOV B,#10 DIV AB MOV DPTR,#MaLed7 MOVC A,@A+DPTR MOV P2,A CLR P1.0 SETB P1.0 MOV A,B MOVC A,@A+DPTR MOV P2,A CLR P1.1 SETB P1.1 RET ; MaLed7: DB 0C0h,0F9h,0A4h,0B0h,99h,92h,82h,0F8h,80h,90h Phạm Hùng Kim Khánh Trang 54 Tài liệu thực hành Vi điều khiển END - Sửa chương trình để nhấn INC tăng đơn vị nhấn DEC giảm 10 đơn vị Phạm Hùng Kim Khánh Trang 55