1. Trang chủ
  2. » Tất cả

chuong 4_SV

11 0 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 11
Dung lượng 756,94 KB

Nội dung

6/17/2018 CHƯƠNG MODUL NGẮT (INTERRUPT) GV: Vũ Thị Hồng Nga Khoa Công Nghệ Điện Tử Giới thiệu chung ngắt - Khi mong muốn xử lí thực cơng việc có kiện xảy  ngắt - Có phương pháp ñể kiểm tra xuất kiện + Hỏi vòng (Polling): Phải kiểm tra liên tục thời điểm khác chương trình để phát kiện xảy thực thi chương trình phục vụ kiện + Ngắt (Interrupt): Tự động tạm dừng chương trình bắt đầu thực thi chương trình phục vụ kiện kiện xảy 6/17/2018 Giới thiệu chung ngắt • • • Tín hiệu thơng báo cho xử lý kiện gọi tín hiệu ngắt(nguồn ngắt) Chương trình thực thi để đáp ứng cho kiện gọi chương trình phục vụ ngắt (ISR: interrupt Service Routine) Khi có tín hiệu ngắt, xử lý tạm dừng công việc thực thi để chuyển sang thực chương trình ngắt, sau thực xong chương trình ngắt xử lý quay trở tiếp tục công việc thực thi bị tạm dừng CÁC NGUỒN NGẮT CỦA PIC16F887 6/17/2018 CHO PHÉP / CẤM CÁC NGẮT - Mặc định tất ngắt bị cấm - Mỗi ngắt cho phép cấm người sử dụng thông qua bit cho phép IE (Interrupt Enable) tương ứng IE = 0: Cấm IE = 1: Cho phép PIC16F887 cho phép ngắt thông qua bit số ghi sau: Interrupt Control Register (INTCON) Peripheral Interrupt Enable Register (PIE1) Peripheral Interrupt Enable Register (PIE2) CHO PHÉP / CẤM CÁC NGẮT - Mỗi ngắt kết hợp với bit khác, dùng để thị “sự kiện ngắt” xảy Bit gọi cờ ngắt (IF: Interrupt Flag) IF = 0: Khơng có kiện IF = 1: Có kiện - Cờ ngắt IF có mức cao (IF = 1) “sự kiện ngắt” tương ứng xảy ra, bất chấp ngắt có cho phép hay không Cờ ngắt IF phải xóa (IF = 0) người sử dụng trước khỏi ISR 6/17/2018 CÁC THANH GHI CỦA MODUL NGẮT - Thanh ghi INTCON: cho phép ngắt yêu cầu ngắt (cờ ngắt) nội - Thanh ghi PIE1: Thanh ghi cho phép ngắt ngoại vi - Thanh ghi PIR1: Thanh ghi yêu cầu ngắt (cờ ngắt) ngoại vi - Thanh ghi PIE2: Thanh ghi cho phép ngắt ngoại vi - Thanh ghi PIR2: Thanh ghi yêu cầu ngắt (cờ ngắt) ngoại vi NGẮT NỘI (CORE INTERRUPT) CÁC BIT CHO PHÉP GIE: Cho phép ngắt tồn cục * Phải đặt để sử dụng BẤT KỲ ngắt PIC PEIE: Cho phép ngắt ngoại vi * Phải ñược ñặt ñể sử dụng ngắt ngoại vi T0IE: Cho phép ngắt Timer0 tràn INTE: Cho phép ngắt INT RBIE: Cho phép ngắt Port B thay ñổi Thanh ghi INTCON GIE PEIE T0IE INTE RBIE T0IF INTF RBIF Các cờ ngắt đặt ngắt khơng cho phép CÁC BIT CỜ T0IF: Cờ ngắt Timer0 tràn INTF: Cờ ngắt INT RBIF: Cờ ngắt Port B thay ñổi 6/17/2018 NGẮT NGOẠI VI (PERIPHERAL INTERRUPT) Thanh ghi PIE1 (Cho phép ngắt) ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE TXIF SSPIF CCP1IF TMR2IF TMR1IF Thanh ghi PIR1 (Cờ ngắt) ADIF Cho phép RCIF Cờ ðiều kiện ADIE ADIF Hồn thành chuyển đổi ADC RCIE RCIF ðầy ñệm nhận EUSART TXIE TXIF ðầy ñệm truyền EUSART SSPIE SSPIF Ngắt I2C SPI CCP1IE CCP1IF Hoàn thành so sánh bắt giữ cho Timer1 TMR2IE TMR2IF Giá trị ghi Timer2 giá trị ghi PR2 TMR1IE TMR1IF Thanh ghi Timer1 bị tràn Các cờ ngắt ñược ñặt ngắt khơng cho phép NGẮT NGOẠI VI (PERIPHERAL INTERRUPT) PIE2 Register (Interrupt Enables) OSCFIE C2IE C1IE EEIE BCLIE ULPWUIE CCP2IE BCLIF ULPWUIF CCP2IF PIR2 Register (Interrupt Flags) OSCFIF Cho phép C2IF C1IF Cờ EEIF ðiều kiện OSCFIE OSCFIF Bộ dao ñộng hệ thống bị lỗi C2IE C2IF Ngõ so sánh bị thay ñổi C1IE C1IF Ngõ so sánh bị thay ñổi EEIE EEIF Thao tác ghi EEPROM hoàn tất BCLIE BCLIF Xung ñột bus xuất chế ñộ MSSP I2C ULPWUIE ULPWUIF ðiều kiện “ñánh thức” xảy CCP2IE CCP2IF Hoàn thành so sánh bắt giữ cho Timer1 Các cờ ngắt ñược ñặt ngắt khơng cho phép 10 6/17/2018 ĐỘ TRỄ CỦA NGẮT - Độ trễ ngắt: Là khoảng thời gian tính từ lúc kiện xảy lệnh địa 0004h thực thi - Độ trễ ngắt đồng (thường ngắt bên trong) khoảng chu kỳ máy - Độ trễ ngắt không đồng (thường ngắt bên ngoài) khoảng – 3.5 chu kỳ máy SAO LƯU DỮ LIỆU KHI NGẮT Trong xảy ngắt: Chỉ có giá trị PC lưu lại (vào ngăn xếp),giá trị ghi khác bị thay đổi sau thực thi xong ISR → Do cần phải lưu phục hồi giá trị ghi quan trọng Các ghi mà người dùng nên lưu lại: Thanh ghi W Thanh ghi STATUS Thanh ghi PCLATH Thanh ghi ñược ñịnh nghĩa người dùng 6/17/2018 ƯU TIÊN NGẮT - Vi điều khiển họ Mid-Range (PIC16F) thiết lập tất ngắt có mức ưu tiên - Việc thiết lập mức ưu tiên khác cho nguồn ngắt người sử dụng - Thiết lập mức ưu tiên cho ngắt: Bước 1: Xác định nguồn ngắt Bước 2: Xác định thứ tự ISR Bước 2: Lập trình để xác lập mức ưu tiên Ví dụ: Thiết lập thứ tự ưu tiên từ cao xuống thấp cho ngắt: Port B, Timer Timer void interrupt isr(void) { if (RBIE == 1) && (RBIF == 1) PORTB_ISR()  if (TMR2IE == 1) && (TMR2IF == 1) Timer2_ISR()  if (TMR1IE == 1) && (TMR1IF == 1) Timer1_ISR() }  6/17/2018 Ví dụ 1: Sử dụng ngắt ngồi lập trình điều khiển led theo yêu cầu sau Bình thường: Led đếm 07 theo mã nhị phân Ngắt: led chớp tắt lần Gợi ý: • Ngắt ngồi xảy có thay đổi mức logic chân RB0  Nên chọn thay đổi 0 10 • Gắn nút nhấn kích hoạt R kéo lên chân RB0 • Xem led nối với chân để cấu hình PORT • Kích hoạt tính ngắt ngồi • Viết chương trình • Viết chương trình ngắt • Kiểm tra kết mạch mô 6/17/2018 #include #include CONFIG (FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_OFF & CPD_OFF & BOREN_OFF & IESO_OFF & FCMEN_OFF & LVP_OFF & DEBUG_ON); #define _XTAL_FREQ 4000000 void main(void) { unsigned char i; void interrupt isr(void) ANSEL = 0X00; { ANSELH = 0X00; unsigned char j; TRISE = 0X00; if (INTE && INTF) TRISB0 = 1; { nRBPU = 0; INTF = 0; WPUB = 0x01; for (j=0;j

Ngày đăng: 19/08/2018, 13:39

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN