Tóm tắt các thanh ghi điều khiển ngắt

Một phần của tài liệu tnvxlvdk_v2-1 (Trang 25 - 30)

Bài 3 : Khảo sát cơ chế ngắt quãng, giao tiếp LCD ký tự

3.1.1 Tóm tắt các thanh ghi điều khiển ngắt

Thanh ghi INTCON:

Thanh ghi PIE1:

Thanh ghi PIE2:

Thanh ghi PIR1:

Sơ đồ điều khiển ngắt:

3.2 Các bước hiện thực yêu cầu 1

Bước 1. Tạo project mới giống như hướng dẫn ở chương 1 lấy tên project là Interrupt, tạo file interrupt.asm và chọn chip 18f4520. Ta được hình sau:

Bước 2. Include file p18f4520.inc vào file interrupt.asm Bước 3. Khởi tạo PortB là output sử dụng các lệnh clrf, bcf

init clrf LATB

Bộ mơn Kỹ Thuật Máy Tính 23 Thực hành Vi xử lý

movwf ADCON1

bsf TRISB,RB0 ; RB0 là ngỏ nhập (nút nhấn)

bcf TRISB,RB1 ; RB1 là ngỏ xuất (Led)

bcf TRISB,RB2 ; RB2 là ngỏ xuất (Led)

bcf TRISB,RB3 ; RB3 là ngỏ xuất (Led)

movlw .10 ; khởi động biến delay=10

movwf delay

return

Bước 4. Khởi tạo timer 0 tạo ngắt 100 ms (với xung clock 4 MHz, chọn prescaler 2:1, số đếm 50000), cho ngắt timer 0 có độ ưu tiên thấp.

init_timer0

bsf RCON,IPEN ; cho phép ưu tiên ngắt.

bcf INTCON2,TMR0IP ; timer0 ưu tiên thấp

bcf INTCON,TMR0IF ; xóa cờ ngắt timer0

bsf INTCON,TMR0IE ; cho phép ngắt timer0

bsf INTCON,GIEL ; cho phép các ngắt ưu tiên thấ p

clrf T0CON ; tỉ lệ đếm trước 2:1

movlw HIGH(-.50000) ; nạp số đếm 50000 cho timer0

movwf TMR0H

movlw LOW(-.50000)

movwf TMR0L

bsf T0CON,TMR0ON ; cho phép timer0 đếm

return

Bước 5. Khởi tạo ngắt ngoài 0 tích cực cạnh xuống.

Đối với ngắt ngồi INT1 và INT2, độ ưu tiên phụ thuộc vào 2 bit INT1IP và INT2IP trong thanh ghi INTCON3. Cịn với ngắt ngồi INT0 thì độ ưu tiên ln là cao.

init_int0

bcf INTCON2,INTEDG0 ; tác động cạnh xuống

bcf INTCON,INT0IF ; xóa cờ ngắt

bsf INTCON,INT0IE ; cho phép ngắt ngoà i INT0

bsf INTCON,GIEH ; cho phép các ngắt ưu tiên cao

return

Bước 6. Viết chương trình cho ngắt ngồi 0, bật 3 đèn led đơn cùng sáng và khởi tạo lại giá trị cho biến delay để 1s sau thì ngắt timer sẽ tắt 3 đèn đó.

int0_isr bcf INTCON,INT0IF bsf LATB,RB1 bsf LATB,RB2 bsf LATB,RB3 movlw .10 movwf delay return

Bước 7. Viết chương trình cho ngắt timer0, sau 1s sau khi led được bật sáng thì nó sẽ làm cho led tắt.

Thời gian để timer đếm lên 1 đơn vị đượ c tính bằng cơng thức :

Như vậy, muốn có thời khoảng 100 ms (=50000*2μs), ta cần đếm 50000 lần. timer0_isr

bcf INTCON,TMR0IF bcf T0CON,TMR0ON

movlw HIGH(-.50000) ; nạp lại số đếm 50000 cho timer0

movwf TMR0H

movlw LOW(-.50000)

movwf TMR0L

bsf T0CON,TMR0ON ; cho phép timer0 đếm lại ; decfsz delay,1 bra timer0_isr_1 bcf LATB,RB1 bcf LATB,RB2 bcf LATB,RB3 movlw .10 movwf delay timer0_isr_1 return

3.3 Chương trình mẫu yêu cầu 1

;=====================================; ; Name: led_don.asm

; Project: Viết chương trình khởi tạo 2 ngắt: ; -Ngắt ngoài 0 với độ ưu tiên cao. ; -Ngắt timer 0 với độ ưu tiên thấp.

; -Ngắt INT0 : bật 3 led đơn RB1, RB2, RB3sáng cùng ;lúc

; -Ngắttimer0 : tắt 3 led đơn RB1, RB2, RB3sau 1s ; Author: BKIT HARDWARE CLUB

; Homepage: http://www.bkit4u.com/forum ; Creation Date: 7 - 31 - 2009 ;======================================; list p = PIC18F4520 #include P18f4520.inc code 0x00000 goto main org 0x00008 goto isr_high org 0x00018 goto isr_low ; Vung du lieu udata delay res .1

; Vung bat dau code

PRG code

Bộ mơn Kỹ Thuật Máy Tính 25 Thực hành Vi xử lý main call init call init_timer0 call init_int0 goto $

; Ham khoi dong ban dau

init clrf LATB

movlw 0x0F ; dung RB0 nhu Digital, khong phai Analog

movwf ADCON1

bsf TRISB,RB0 ;RB0 la ngo nhap (nut nhan)

bcf TRISB,RB1 ;RB1 la ngo xuat (Led)

bcf TRISB,RB2 ;RB2 la ngo xuat (Led)

bcf TRISB,RB3 ;RB3 la ngo xuat (Led)

movlw .10 ; khoi dong bien delay=10

movwf delay

return

; Ham khoi dong timer0 init_timer0

bsf RCON,IPEN ; cho phep uu tien ngat.

bcf INTCON2,TMR0IP ; timer0 uu tien thap

bcf INTCON,TMR0IF ; xoa co ngat timer0

bsf INTCON,TMR0IE ; cho phep ngat timer0

bsf INTCON,GIEL ; cho phep ngat uu tien thap

clrf T0CON ; prescaler 2:1

movlw HIGH(-.50000) ; nap so dem 50000 cho timer0

movwf TMR0H

movlw LOW(-.50000)

movwf TMR0L

bsf T0CON,TMR0ON ; cho phep timer0 dem

return

; Ham khoi dong int0 init_int0

bcf INTCON2,INTEDG0 ; tac dong canh xuong

bcf INTCON,INT0IF ; xoa co ngat

bsf INTCON,INT0IE ; cho phep ngat ngoai INT0

bsf INTCON,GIEH ; cho phep ngat uu tien cao

return

; Ham xu ly ngat timer0 timer0_isr

bcf INTCON,TMR0IF bcf T0CON,TMR0ON

movlw HIGH(-.50000) ; nap lai so dem 50000 cho timer0

movwf TMR0H

movlw LOW(-.50000)

movwf TMR0L

; decfsz delay,1 bra timer0_isr_1 bcf LATB,RB1 bcf LATB,RB2 bcf LATB,RB3 movlw .10 movwf delay timer0_isr_1 return

; Ham xu ly ngat int0 int0_isr bcf INTCON,INT0IF bsf LATB,RB1 bsf LATB,RB2 bsf LATB,RB3 movlw .10 movwf delay return

; Ham xu ly ngat uu tien cao isr_high

call int0_isr

retfie

; Ham xu ly ngat uu tien thap isr_low

call timer0_isr

retfie end

Sau khi có chương trình mẫu ta thực hiện việc compile chương trình và nạp xuống mạch để chạy chương trình như hướng dẫn ở chương 1.

Một phần của tài liệu tnvxlvdk_v2-1 (Trang 25 - 30)

Tải bản đầy đủ (PDF)

(69 trang)