Thông tin tài liệu
TRƯ NG ð I H C KHOA H C T NHIÊN KHOA ðI N T - VI N THÔNG PH N 3: L P TRÌNH V I CCS (tt) ð ng Lê Khoa 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 Nguyên t c ho t ñ ng c a ng t • ng d ng l p trình ưu tiên • Khi có ng t x y ra, VðK s hồn t t l nh th c hi n ch y chương trình ph c v ng t • C p ng t: ng t c p ng t c p Ng t c p • Trên PIC 14 , 12 ,10 ,t t c ng t ch có c p ưu tiên • Khi ng t đư c ph c v khơng th b ng t b i ng t khác x y • Khi ng t x y chương trình nh y đ n đ a ch ng t , thư ng 004h , lưu ghi W, STATUS , PCLATCH , FSR… nh y ñ n hàm ph c v ng t ñó • Th c hi n xong ph c h i t t c ghi thoát ng t Ng t c p… • Bit cho phép ng t toàn c c ( GIE ) b khóa t đ ng có ng t • Dùng #priority ñ xác ñ nh ưu tiên ng t Ng t ưu tiên nh t s ln đư c h i vịng trư c Sau xác đ nh c ng t c n ph c v , s th c thi hàm ng t tương ng Xong xố c ng t ng t Ph c v ng t xong ch xố c ng t Ng t c p • Ch có PIC 18 ( dsPIC ) Có khái ni m: ng t ưu tiên th p (low priority) ng t ưu tiên cao ( high priority ) • vector th c thi ng t tương ng thư ng 0008h (high) 0018h ( low ) • M t ng t th p ñang ñư c ph c v s b ngưng ph c v ng t cao 0008h n u ng t cao x y Ngư c l i, ng t cao x y khơng bao gi b ng t b i ng t th p Ng t c p… • N u vi t hàm ng t bình thư ng, khơng địi h i ưu tiên CCS sinh mã đ t t c hàm ng t ñ u ng t ưu tiên cao Quy trình th c hi n ng t s ng t c p • ð s d ng ng t c p, khai báo #device ph i có high_ints=true Và hàm ng t mu n ưu tiên cao thêm FAST theo sau ch th ti n x lý hàm • Ch có nh t ng t đư c ưu tiên cao Khai báo ng t • M i dịng VDK có s lư ng ng t khác : 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 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 Khai báo ng t… • Sau danh sách s tương ng : • • • • • • • • • • • • • • • • #INT_GLOBAL : ng t chung #INT_AD : chuy n ñ i A /D hồn t t #INT_EXT : ng t #INT_EXT1 : ng t #INT_EXT2 : ng t ngồi #INT_RB : b t kỳ thay đ i chân B4 ñ n B7 #INT_RC : b t kỳ thay ñ i chân C4 ñ n C7 #INT_RDA : data nh n t RS 232 s n sàng #INT_RTCC : tràn Timer #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 #INT_TIMER2 : tràn Timer #INT_TIMER3 : tràn Timer #INT_TIMER5 : tràn Timer #INT_PWMTB : ng t cu PWM time base ng t v i ch c 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 VD: Chương trình ñ c d li u t ADC xu t port C dùng ng t xu t port D không dùng ng t #include #device *=16 #use delay (clock=20000000) #byte portb = 0x06 #byte portc = 0x07 #BIT id = portb.0 #byte portd = 0x08 #INT_AD Void TEST_AD () { portc=read_adc(); } void main () { set_tris_b(0xFF); set_tris_d(0x00); set_tris_c(0x00); enable_interrupts(INT_AD); enable_interrupts(GLOBAL); setup_adc(ADC_CLOCK_INTERNAL); setup_adc_ports(ALL_ANALOG); set_adc_channel(0); portd=0; while(true) { portd=read_adc(); delay_ms(2000); } } 22 CHƯƠNG 5: TIMER VÀ NG D NG • Ngun t c ho t đ ng c a Timer • Các hàm dùng cho Timer • ng d ng Timer • Ví d 23 • It is very easy to make a digital counter using flip-flops Counters can be made which count up, count down, which can be cleared back to zero, pre-loaded to a certain value, and which by the provision of an overflow output can be cascaded with other counters 24 A digital counter made of eight flipflops 25 The counter as timer 26 Timer module 27 • The internal clock is approximately 800 kHz and the instruction cycle rate (Fosc/4) is therefore200 kHz, or a period of µs Now with this clock frequency, Timer would count up to its maximum value (255) in 255 ì às, or 1275 às, and would overflow on the next cycle, i.e after 1280 µs • We can, however, make use of the prescaler here If the incoming signal is divided by (i.e PS2, PS1, PS0 set to 001), then Timer will overflow after 256 ì ì às, or 5.120ms 28 • setup_timer_0(mode) – Sets the source, prescale etc for timer0 • set_timer0(value) or set_rtcc(value) - Initializes the timer0 clock/counter Value may be a bit or 16 bit depending on the device • value=get_timer0 – Returns the value of the timer0 clock/counter 29 Relevant Interrupts : • INT_TIMER0 or INT_RTCC - Interrupt fires when timer0 overflows 30 31 32 Cách tính giá tr n p vào Timer B1: Tính chu kỳ l nh TI = V i Fosc : t n s th ch anh FOSC B2: Tính t c t tràn c a Timer T=s chia*TI B3: S l n tràn n=TOV/T V i TOV th i gian tràn B4: Giá tr n p Timer=256-n 33 VD: Vi t chương trình t o sóng vng t i chân RD0 v i t n s #include #device *=16 ADC=8 #use delay (clock=4000000) #bit bit_co=0x0b.2 #byte portd = 0x08 #bit bit0=portd.0 void main () { set_tris_d(0x00); setup_timer_0 (RTCC_INTERNAL|RTCC_DIV_4); set_timer0(0); bit0=1; while(true) { if (bit_co==1) { set_timer0(0); bit_co=0; bit0=!bit0; } } } 34 VD: Vi t chương trình dùng ng t Timer đ t o xung vng có chu kỳ 1s #include #device *=16 ADC=8 #use delay (clock=4000000) #bit bit_co=0x0b.2 #byte portd = 0x08 #bit bit0=portd.0 #INT_TIMER0 void int_timer() { bit_co=0; bit0=!bit0; set_timer0(131); } void main () { set_tris_c(0x00); set_tris_d(0x00); setup_timer_0 (RTCC_INTERNAL|RTCC_DIV_4|RTCC_8_BIT); set_timer0(131); enable_interrupts(GLOBAL); enable_interrupts(INT_TIMER0); bit0=1; while(true) { } } 35 Các th c hành Gi i thi u I/O I/O ADC Ng t Timer Ng t + Timer PWM Bài t p t ng h p 10 Ôn t p thi 36 ... RB_LED () { portd=portb; portc=0; } void main () { set_tris_b(0xFF); set_tris_d(0x0 0); set_tris_c(0x0 0); enable_interrupts(INT_RB); enable_interrupts(GLOBAL); portc=0; while(true) { if(id == 0) portc=0x0f;... set_tris_c(0x0 0); enable_interrupts(INT_AD); enable_interrupts(GLOBAL); setup_adc(ADC_CLOCK_INTERNAL); setup_adc_ports(ALL_ANALOG); set_adc_channel( 0); portd=0; while(true) { portd=read_adc () ; delay_ms(200 0); ... main () { set_tris_d(0x0 0); setup_timer_0 (RTCC_INTERNAL|RTCC_DIV_ 4); set_timer 0(0 ); bit0=1; while(true) { if (bit_co== 1) { set_timer 0(0 ); bit_co=0; bit0=!bit0; } } } 34 VD: Vi t chương trình
Ngày đăng: 23/03/2014, 09:20
Xem thêm: 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 pptx, 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 pptx