YOMEDIA
Bài giảng Chương 5: Hoạt động ngắt
Chia sẻ: Nguyễn Nguyễn
| Ngày:
| Loại File: PDF
| Số trang:15
103
lượt xem
10
download
Download
Vui lòng tải xuống để xem tài liệu đầy đủ
Bài giảng Chương 5: Hoạt động ngắt cung cấp cho các bạn những kiến thức về các thanh ghi ngắt; thời gian trễ thực thi ngắt; cấu trúc của một chương trình có ngắt. Đây là tài liệu hữu ích với những bạn chuyên ngành Công nghệ thông tin. Mời các bạn tham khảo bài giảng để nắm bắt nội dung chi tiết.
AMBIENT/
Chủ đề:
Nội dung Text: Bài giảng Chương 5: Hoạt động ngắt
- CHƯƠNG 5
NG NGẮT
- CHƯƠNG 5: HOẠT ĐỘNG NGẮT
1. Giới thiệu
- Vi điều khiển PIC có rất nhiều nguồn Ngắt. Bao
gồm các Ngắt trong và các Ngắt ngoại vi:
Ngắt tại chân INT
Ngắt tràn TIMER0
Ngắt tràn TIMER1
Ngắt tràn TIMER2
Ngắt khi có sự thay đổi trên các chân PORTB
- CHƯƠNG 5: HOẠT ĐỘNG NGẮT
Ngắt NHẬN dữ liệu
Ngắt TRUYỀN dữ liệu
Ngắt chuyển đổi A/D
Ngắt khi hoàn tất Ghi EEPROM
Ngắt Module CCP
Ngắt Module SSP
Ngắt so sánh điện thế
Ngắt USART, ……..
- CHƯƠNG 5: HOẠT ĐỘNG NGẮT
2. Các thanh ghi NGẮT
Thanh ghi INTCON:
Bao gồm các Bit cho phép Ngắt và cờ Ngắt của
TIMER0, ngắt INT, ngắt PORTB.
Thanh ghi PIE1: chứa các Bit cho phép Ngắt ngoại
vi.
Thanh ghi PIR1: chứa các Cờ Ngắt ngoại vi.
Thanh ghi PIE2
Thanh ghi PIR2
- NG NGẮT
TMR0IE
TMR0IF Interrupt
INTE
INTF
RBIE
RBIF
TMR2IE
GIE
TMR2IF
ADIE
ADIF
Other peripherals
PEIE
Hình 1: Sơ đồ các tác nhân Ngắt
- CHƯƠNG 5: HOẠT ĐỘNG NGẮT
a. Thanh ghi INTCON:
Bao gồm các Bit cho phép Ngắt và cờ Ngắt của
TIMER0, ngắt ngoài INT, ngắt PORTB
Enable Bits Description
GIE Global Interrupt Enable Must be set to use
any Interrupts
PEIE Peripheral Interrupt Enable
TMRIE Timer0 Interrupt Enable Must be set to use
any Peripheral
INTE External Interrupt Enable Interrupts
RBIE PORTB change Interrupt Enable
GIE PEIE TMR0IE INTE RBIE TMR0IF INTF RBIF
- NG NGẮT
b. Thanh ghi PIE1 và PIR1: (Peripheral Interrupts)
PIE1
ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE
PIR1
ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF
Enable Flag Condition
ADIE ADIF ADC conversion complete
RCIE RCIF AUSART receive buffer is full
TXIE TXIF AUSART transmit buffer is full
SSPIE SSPIF I2C or SPI Interrupt
CCP1IE CCP1IF Timer1 register capture or compare match
TMR2IE TMR2IF Timer2 value and PR2 period value match
TMR1IE TMR1IF Timer1 register has overflowed
- NG NGẮT
b. Thanh ghi PIE1 và PIR1: (Peripheral Interrupts)
PIE2
OSCFIE C2IE C1IE EEIE BCLIE ULPWUIE CCP2IE
PIR2
OSCFIF C2IF C1IF EEIF BCLIF ULPWUIF CCP2IF
Enable Flag Condition
OSCFIE OSCFIF System Oscillator Failed
C2IE C2IF Comparator2 output changed
C1IE C1IF Comparator1 output changed
EEIE EEIF Write operation completed
BCLIE BCLIF Bus collision occurred in MSSP I2C mode
ULPWUIE ULPWUIF Wake-up condition occurred
CCP2IE CCP2IF Timer1 Capture or Compare match occurred
- CHƯƠNG 4: HOẠT ĐỘNG NGẮT
3. Thời gian trễ thực thi Ngắt
Là khoảng thời gian bắt đầu xuất hiện Ngắt tới
dòng Lệnh thực hiện tại địa chỉ bắt đầu chương
trình Ngắt : 0004h (Khi có Ngắt thì thanh ghi PC sẽ
nhảy tới địa chỉ 0004h)
Đối với các Ngắt đồng bộ (Typically Internal): 3Tcy
Đối với các Ngắt không đồng bộ
(Typically External): 3 – 3.75 Tcy
Chọn thời gian giữa 2 chương trình Ngắt: 3 - 4 Tcy
- CHƯƠNG 5: HOẠT ĐỘNG NGẮT
4. Sao lưu dữ liệu trong quá trình Ngắt
- Trong quá trình xảy ra Ngắt, chỉ có duy nhất
thanh ghi PC được lưu vào STACK tự động.
- Vì vậy, ta cần phải lưu data của thanh ghi W và
STATUS khi bắt đầu thực hiện chương trình Ngắt,
và phục hồi data sau khi thoát chương trình Ngắt.
- Lu ý: 2 thanh ghi W_TEMP và STATUS_TEMP
phải được lưu ở vùng RAM dùng chung của
4 Bank thanh ghi. ( 70h – 7Fh trong Bank 0 )
- CHƯƠNG 5: HOẠT ĐỘNG NGẮT
Chương trình Sao lưu dữ liệu của 2 thanh ghi
STATUS và W vào STATUS_TEMP và W_TEMP :
MOVWF W_TEMP ;lưu W
SWAPF STATUS, W ;Đảo và lưu STATUS vào W,
thay cho lệnh MOVF vì sẽ ảnh hưởng đến bit Z.
MOVWF Status_TEMP
……. Nội dung của chương trình Ngắt ……
SWAPF Status_TEMP, W
MOVWF STATUS ;phục hồi STATUS
MOVF W_TEMP, W ;phục hồi W
- CHƯƠNG 5: HOẠT ĐỘNG NGẮT
5. Cấu trúc của 1 chương trình có Ngắt
ORG 0000H
GOTO MAIN
ORG 0004H
GOTO INTERRUPT
ORG 0005H
MAIN
…… Chương trình chính ……
INTERRUPT
…… Kiem tra cac Chương trình Ngắt …….
GOTO MAIN
END
- NG NGẮT
a. Chương trình Khởi tạo Ngắt
PIE1 PIE1_MASK1 EQU B’01101010’
ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE
CLRF STATUS ;chọn Bank0
CLRF INTCON ;cấm các ngắt và xóa cờ ngắt
CLRF PIR1 ;xóa cờ các ngắt ngoại vi
BSF STATUS, RP0 ;chọn Bank1
MOVWF PIE1_MASK1;khởi tạo các ngắt Ngoại vi
MOVF PIE1
BCF STATUS, RP0 ;chọn Bank0
BSF INTCON, GIE;cho phép ngắt toàn cục
- CHƯƠNG 5: HOẠT ĐỘNG NGẮT
b. Chương trình phục vụ Ngắt
INTERRUPT
CALL PUSH ;gọi CT lưu thanh ghi W+STATUS
CLRF STATUS ;chọn Bank0
BTFSC PIR1, TMR1IF ;kiểm tra có ngắt TIMER1?
GOTO T1_INT ;nếu CÓ, goi CT Ngắt T1
BTFSC PIR1, ADIF ;Kiểm tra có ngắt ADC ?
GOTO AD_INT ;CÓ =gọi CT con ngắt ADC
BTFSC INTCON, RBIF ;
GOTO PORTB_INT ;
…….
GOTO END_ISR ;Nếu không có Cờ nào thì thoát
- CHƯƠNG 5: HOẠT ĐỘNG NGẮT
T1_INT
…… nội dung chương trình Ngat TIMER1 ……
BCF PIR1, TMR1IF ;xóa cờ ngắt TIMER1?
GOTO END_ISR ;Thoát chương trình ngắt
AD_INT
…… nội dung chương trình Ngat ADC ……
BCF PIR1, ADIF
GOTO END_ISR
………………………………
END_ISR
CALL POP ;gọi CT phục hồi W + STATUS
RETFIE ;thoát CT phục vụ Ngắt
Thêm tài liệu vào bộ sưu tập có sẵn:
Báo xấu
LAVA
ERROR:connection to 10.20.1.100:9315 failed (errno=111, msg=Connection refused)
ERROR:connection to 10.20.1.100:9315 failed (errno=111, msg=Connection refused)
Đang xử lý...