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

36 511 2
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

Đ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

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

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan