YOMEDIA
ADSENSE
PHẦN 3: LẬP TRÌNH VỚI CCS ( tiếp theo ) - ĐẶNG LÊ KHOA - TRƯỜNG ĐH KHTN - KHOA ĐIỆN TỬ VIỄN THÔNG
136
lượt xem 32
download
lượt xem 32
download
Download
Vui lòng tải xuống để xem tài liệu đầy đủ
Chương 4: ngắt và ứng dụng Nguyên tắc hoạt động của ngắt Các hàm dùng cho ngắt các loại ngắt Nguyên tắc hoạt động của ngắt ứng dụng trong lập trình ưu tiên
AMBIENT/
Chủ đề:
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: PHẦN 3: LẬP TRÌNH VỚI CCS ( tiếp theo ) - ĐẶNG LÊ KHOA - TRƯỜNG ĐH KHTN - KHOA ĐIỆN TỬ VIỄN THÔNG
- TRƯ NG ð I H C KHOA H C T NHIÊN TR KHOA ðI N T - VI N THÔNG KHOA PH N 3: L P TRÌNH V I CCS (tt) ð ng Lê Khoa 1
- CHƯƠNG 4: NG T VÀ NG D NG • Nguyên t c ho t ñ ng c a ng t • Các hàm dùng cho ng t • Các lo i ng t • Ví d 2
- Nguyên t c ho t ñ ng c a ng t • ng d ng trong l p trình ưu tiên • Khi có 1 ng t x y ra, VðK s hoàn t t l nh ñang th c hi n và ch y chương trình ph c v ng t • C p ng t: ng t 1 c p và ng t 2 c p 3
- Ng t 1 c p • Trên PIC 14 , 12 ,10 ,t t c các ng t ch có 1 c p ưu tiên . • Khi ng t nào ñang ñư c ph c v thì không th b ng t b i 1 ng t khác x y ra . • Khi ng t x y ra chương trình nh y ñ n ñ a ch ng t , thư ng là 004h , sao lưu thanh ghi W, STATUS , PCLATCH , FSR… thì nh y ñ n hàm ph c v ng t ñó . • Th c hi n xong thì ph c h i t t c thanh ghi trên thoát ng t . 4
- Ng t 1 c p… • Bit cho phép ng t toàn c c ( GIE ) b khóa t ñ ng khi có ng t. • Dùng #priority ñ xác ñ nh ưu tiên ng t. Ng t ưu tiên nh t s luôn ñư c h i vòng trư c .Sau khi xác ñ nh c ng t c n ph c v , nó s th c thi hàm ng t tương ng .Xong thì xoá c ng t ñó và thoát ng t . Ph c v ng t nào xong thì ch xoá c ng t ñó. 5
- Ng t 2 c p • Ch có trên PIC 18 ( và dsPIC ) . Có 2 khái ni m: ng t ưu tiên th p (low priority) và ng t ưu tiên cao ( high priority ). • 2 vector th c thi ng t tương ng thư ng là 0008h (high) và 0018h ( low ). • M t ng t th p ñang ñư c ph c v s b ngưng và ph c v ng t cao 0008h n u ng t cao x y ra. Ngư c l i, ng t cao ñang x y ra thì không bao gi b ng t b i ng t th p. 6
- Ng t 2 c p… • N u vi t hàm ng t bình thư ng, không ñòi h i ưu tiên gì thì CCS sinh mã ñ t t c hàm ng t ñ u là ng t ưu tiên cao. Quy trình th c hi n ng t s như ng t 1 c p trên. • ð s d ng ng t 2 c p, khai báo #device ph i có high_ints=true . Và hàm ng t nào mu n ưu tiên cao thì thêm FAST theo sau ch th ti n x lý hàm ñó. • Ch có duy nh t 1 ng t ñư c ưu tiên cao. 7
- Khai báo ng t • M i dòng VDK có s lư ng ng t khác nhau : PIC 14 có 14 ng t , PIC 18 có 35 ng t • #DEVICE HIGH_INTS= Khai báo ng t có m c ưu tiên cao. • #INT_XXX fast Đây là ch th báo cho trình biên d ch m t ng t có m c ưu tiên cao. • Cách khai báo: #INT_XXX 8
- Khai báo ng t… • Sau ñây là danh sách 1 s ng t v i ch c năng tương ng : • #INT_GLOBAL : ng t chung • #INT_AD : chuy n ñ i A /D ñã hoàn t t • #INT_EXT : ng t ngoài • #INT_EXT1 : ng t ngoài 1 • #INT_EXT2 : ng t ngoài 2 • #INT_RB : b t kỳ thay ñ i nào trên chân B4 ñ n B7 • #INT_RC : b t kỳ thay ñ i nào trên chân C4 ñ n C7 • #INT_RDA : data nh n t RS 232 s n sàng • #INT_RTCC : tràn Timer 0 • #INT_TBE : b ñ m chuy n RS 232 tr ng • #INT_TIMER0 : m t tên khác c a #INT_RTCC • #INT_TIMER1 : tràn Timer 1 • #INT_TIMER2 : tràn Timer 2 • #INT_TIMER3 : tràn Timer 3 • #INT_TIMER5 : tràn Timer 5 • #INT_PWMTB : ng t cu PWM time base 9
- Relevant Functions: • disable_interrupts()Disables the specified interrupt. • enable_interrupts() Enables the specified interrupt. • ext_int_edge() Enables the edge on which the edge interrupt should trigger. This can be either rising or falling edge. • clear_interrupt() This function will clear the specified interrupt flag. This can be used if a global isr is used, or to prevent an interrupt from being serviced. 10
- • ð cho phép ng t ñó ho t ñ ng ph i dùng l nh enable_interrupts ( int_xxxx) và enable_interrupts ( global ) . • Khoá FAST theo sau #int_xxx ñ cho ng t ñó là ưu tiên cao , ch ñư c 1 ng t thôi , ch có PIC 18 và dsPIC . 11
- enable_interrupts ( level ) • level là tên các ng t ñã cho trên hay là GLOBAL ñ cho phép ng t c p toàn c c. • M i ng t c a VDK ñ u có 1 bit c ng t, 1 bit cho phép ng t. Khi có ng t thì bit c ng t b set =1, nhưng ng t có h at ñ ng ñư c hay không tuỳ thu c bit cho phép ng t . enable_interrupts (int_xxx ) s b t bit cho phép ng t . Nhưng t t c các ng t ñ u không th th c thi n u bit cho phép ng t toàn c c = 0 VD : ñ cho phép ng t timer0 và timer1 ho t ñ ng: enable_interrupts (int_timer0); enable_interrupts (int_timer1 ) ; enable_interrupts ( global ); // ch c n dùng 1 l n tr //phi mu n có thay ñ i ñ c bi t 12
- disable_interrupts ( level ) • level gi ng như trên. • Hàm này vô hi u 1 ng t b ng cách set bit cho phép ng t = 0. • disable_interrupts ( global ) set bit cho phép ng t toàn c c =0, c m t t c các ng t . • Không dùng hàm này trong hàm ph c v ng t vì không có tác d ng, c ng t luôn b xoá t ñ ng. 13
- clear_interupt ( level ) • level không có GLOBAL . • Hàm này xoá c ng t c a ng t ñư c ch ñ nh b i level . 14
- ext_int_edge ( source , edge ) • Hàm này thi t l p ngu n ng t ngoài EXTx là c nh lên hay c nh xu ng. • source : ngu n ng t . Trên PIC 18 có 3 ngu n ng t trên 3 chân EXT0 , EXT1 , EXT2 ng v i source = 0 ,1 , 2. Các PIC khác ch có 1 ngu n EXT nên source = 0 . • edge : ch n c nh kích ng t , edge = L_TO_H n u ch n c nh lên ( t m c th p chuy n lên m c cao ) hay H_TO_L n u ch n c nh xu ng 15
- Relevant Interrupts: • #int_default This directive specifies that the following function should be called if an interrupt is triggered but no routine is associated with that interrupt. • #int_global This directive specifies that the following function should be called whenever an interrupt is triggered. This function will replace the compiler generated interrupt dispatcher. • #int_xxx This directive specifies that the following function should be called whenever the xxx interrupt is triggered. If the compiler generated interrupt dispatcher is used, the compiler will take care of clearing the interrupt flag bits. 16
- VD: Chương trình đ c d li u t port b xu t ra port D khi có s thay đ i t RB4 – RB7 #include #device *=16 #use delay (clock=20000000) #byte portb = 0x06 #byte portd = 0x08 #INT_RB Void RB_LED () { portd=portb; } void main () { set_tris_b(0xFF); set_tris_d(0x00); enable_interrupts(INT_RB); enable_interrupts(GLOBAL); while(true) { } } 17
- VD: Vi t chương trình ñ m nh phân và khi có s thay ñ i t RB4 ñ n RB7 thì m ch ñ m s reset #include #device *=16 #use delay (clock=20000000) #byte portb = 0x06 #byte portc = 0x07 #byte portd = 0x08 #INT_RB RB_LED () { portd=portb; portc portc = 0; } void main () { set_tris_b(0xF0); set_tris_c(0x00); set_tris_d(0x00); enable_interrupts(INT_RB); enable_interrupts(GLOBAL); portc=0; while(true) { portc=portc+1; delay_ms(500); 18 } }
- VD: Vi t chương trình ñ m nh phân và khi RB0 chuy n t cao xu ng th p thì m ch ñ m s reset #include #device *=16 #use delay (clock=20000000) #byte portc = 0x07 #byte portd = 0x08 #INT_EXT void RB_EXT () { portc=0x0; } void main () { set_tris_b(0xFF); set_tris_c(0x00); set_tris_d(0x00); enable_interrupts(INT_EXT); enable_interrupts(GLOBAL); ext_int_edge(0,H_TO_L); portc =0; while(true) { portc+=1; delay_ms(500); } } 19
- VD: Chương trình th c hi n công vi c sau: - Đ c d li u t port B xu t ra port D khi có s thay đ i t bit RB4-RB7 - N u bit RB0 = 0 xu t ra port C=0x0f ngư c l i th c hi n m ch đ m #include void main () #device *=16 { set_tris_b(0xFF); #use delay (clock=20000000) set_tris_d(0x00); #byte portb = 0x06 set_tris_c(0x00); #byte portc = 0x07 enable_interrupts(INT_RB); #BIT id = portb.0 enable_interrupts(GLOBAL); #byte portd = 0x08 portc=0; #INT_RB while(true) Void RB_LED () { { if(id ==0) portc=0x0f; portd=portb; else portc=0; { } portc +=1; delay_ms(2000); } } } 20
ADSENSE
CÓ THỂ BẠN MUỐN DOWNLOAD
Thêm tài liệu vào bộ sưu tập có sẵn:
Báo xấu
LAVA
AANETWORK
TRỢ GIÚP
HỖ TRỢ KHÁCH HÀNG
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn