Hệ vi xử lí - Chương 4: Hoạt động của bộ định thời

. Xóa các Bộ định tỉ lệ Các bộ định tỉ lệ được xóa khi: - Ghi một giá trị vào thanh ghi TMR2. - Ghi một giá trị vào thanh ghi T2CON. - Khi xảy ra bất kỳ một trạng thái Reset thiết bị. f. Chế độ SLEEP - Trong chế độ này, Timer2 không hoạt động. - Giá trị của bộ định tỉ lệ sẽ được lưu và khôi phục lại sau khi thoát khỏi chế độ SLEEP

pdf35 trang | Chia sẻ: tuanhd28 | Lượt xem: 1817 | Lượt tải: 2download
Bạn đang xem trước 20 trang tài liệu Hệ vi xử lí - Chương 4: Hoạt động của bộ định thời, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
CHƯƠNG 4 I CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI 1. Bô  định thời TIMER0 - Bộ định thời TIMER0 là bô  định thời / bô  đếm 8 bit. - Bao gồm 1 bô  tiền định ti % lê  8 bit lập trình được (Prescaler). - Có Bit chọn xung Clock nội hay bên ngoài. - Có Bit lựa chọn cạnh tác động của xung Clock. CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI a. Bô  tiền định ti lê  (Prescaler) Là bô  đếm 8 bit được dùng làm bô  tiền định ti % lê  cho Timer0 hoặc hậu định ti % lê  cho bô  WDT. - Bit PSA là bit chọn dùng cho Timer hay WDT. - 3 bit PS2 : PS0 sẽ xác định gia ; trị ti % lê . CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI b. Hoạt động bô  định thời TIMER0 Timer0 có 2 chê ; đô  hoạt động được lựa chọn bởi bit T0CS ( OPTION ). - Ở chê  đô  định thời: thanh ghi TMR0 sẽ tăng lên sau mỗi chu kyB máy ( với điều kiện Prescaler không có tác dụng hoặc có ti  lê  là 1:1 ) - Ở chê  đô  đếm xung: TMR0 sẽ tăng lên khi có sườn cạnh lên hay sườn cạnh xuống (qui định bởi bit T0SE) xuất hiện tại chân T0CLK. CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI - Khi Timer0 dùng xung Clock ngoài, ta phải đảm bảo xung Clock ngoài đồng bô  với xung Clock nội. - Với ti % lê  bô  Prescaler là 1:1. Nguồn xung Clock ngoài sẽ đồng bô  với xung Clock nội bằng cách lấy mẫu tại chu kyB Q2 va B Q4 của xung Clock nội. - Do đo ;, trong 1 chu kyB của xung Clock ngoại, thời gian trạng thái cao (Ton) hoặc trạng thái thấp (Toff) phải ít nhất là 2 Tosc I PS2 PS1 PS0 TMR0 RATE 0 0 0 1:2 0 0 1 1:4 8 scaled clock TMR0T0CKI pin Fosc/4 prescaler Watchdog Timer synchronize WDT out DATA BUS Hình 1: Cấu trúc Bộ định thời TIMER0 OPTION RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0 TMR0 Clock Source Select 1 = T0CKI, 0 = Fosc/4 Source Edge Select 1 = High-to-Low 0 = Low-to-High Prescaler Assignment 1= prescaler assigned to WDT 0= prescaler assigned to Timer 0 0 1 0 1:8 0 1 1 1:16 1 0 0 1:32 1 0 1 1:64 1 1 0 1:128 1 1 1 1:256 CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI c. Ngắt TIMER0 -Ngắt Timer0 xảy ra khi tràn bô  đếm TMR0: FF – 00h -Khi tràn T0IF = 1. CơB này được xóa bằng phần mềm. -Ngắt Timer0 không làm PIC thoát khỏi chê  đô  ngủ. CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI d. Khởi tạo TIMER0 -Chương trình khởi tạo TIMER0 ở chê ; đô  Clock nội CLRF TMR0 ; Xóa thanh ghi TMR0 CLRF INTCON ; Không cho phép ngắt BSF STATUS, RP0 ; Chọn Bank1 MOVLW 0xC3 ; Không cho phép Port B có trơ treo MOVWF OPTION_REG ; Ngắt khi có 1 cạnh lên ở chân RB0. ;Timer0 tăng khi có xung. (RUN) ;Tỉ lê  bô  tiền định là 1:16. OPTION RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0 CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI BCF STATUS, RP0 ; Chọn Bank0 ; BSF INTCON, T0IE ;Nếu cho phép Ngắt TIMER0 ; BSF INTCON, GIE ;Cho phép ngắt toàn cục. ; Ngắt Timer0 bị cấm nên dùng vòng lặp kiểm tra TMR0 tràn. T0_OVFL_WAIT BTFSS INTCON, T0IF GOTO T0_OVFL_WAIT CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI - Chương trình khởi tạo TIMER0 ở chê ; đô  Clock ngoại CLRF TMR0 ; Xóa thanh ghi TMR0 CLRF INTCON ; Không cho phép ngắt BSF STATUS, RP0 ; Chọn Bank1 MOVLW 0x37 ; Cho phép Port B có trơ treo MOVWF OPTION_REG ; Ngắt khi có 1 cạnh xuống ở chân RB0. ;Timer0 tăng khi có xung. (Timer RUN) ;Tỉ lê  bô  tiền định là 1:256. OPTION RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0 CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI BCF STATUS, RP0 ; Chọn Bank0 ; BSF INTCON, T0IE ;Nếu cho phép Ngắt TIMER0 ; BSF INTCON, GIE ;Cho phép ngắt toàn cục. ; Ngắt Timer0 bị cấm nên dùng vòng lặp kiểm tra TMR0 tràn. T0_OVFL_WAIT BTFSS INTCON, T0IF GOTO T0_OVFL_WAIT CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI 2. Bô  định thời TIMER1 - Bô  định thời TIMER1 là bô  định thời / bô  đếm 16 bit. - Bao gồm 2 thanh ghi 8 bit TMR1H vaB TMR1L. - CơB TMR1IF =1 khi xảy ra tràn TMR1 tưB FFFF ->0000 a. Thanh ghi điều khiển T1CON - Hai bit 7, 6 chưa được cấu hình. CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI - Bit 5:4 - T1CKPS1:T1CKPS0 :Chọn ti % lê  xung vào 11 = 1:8 (gia ; trị ti % lê ) 10 = 1:4 01 = 1:2 00 = 1:1 - Bit 3-T1OSCEN :cho phép bô  dao động Timer1 OSC 1: dao động được cho phép. 0: không cho phép CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI - Bit 2 - T1SYNC :Bit lựa chọn đồng bô  hóa xung Clock ngoài. (bit này có tác dụng khi TMR1CS=1) 1= Không đồng bô  với xung Clock ngoài. 0= Đồng bô  - Bit 1 - TMR1CS :Bit lựa chọn nguồn xung Clock ngoài cho Timer1. 1= chọn xung Clock ngoài qua chân T1OSC/T1CKI 0= chọn xung Clock nội ( Fosc /4 ) CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI - Bit 0 - TMR1ON :Bit cho phép hoặc dừng Timer1 1= Cho phép Timer1 hoạt động. 0= Không cho phép. I T1CKI pin T1 OSCT1OS0 T1OSI prescaler synchronize Fosc/4 TMR1H TMR1L Enable Timer1 Gate Enable 1 = Không cho phép nh 2: u c Bô nh i TIMER1 TMR1ON T1CONT1GINV TMR1GE T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON Clock Source Select 1 = External (T1CKI) 0 = Internal (FOSC/4) LP Oscillator Enable 1 = T1OSC selected 0 = T1CKI can be used Timer1 On 1 = Enable Timer1 T1CKPS1 T1CKPS0 scale 1 1 1:8 1 0 1:4 0 1 1:2 0 0 1:1 Timer1 Gate Invert 0 = Cho phép đồng bộ CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI b. Các chê  đô  hoạt động của TIMER1  Chê  đô  định thời đồng bô: được chọn bởi bit TMR1CS =0 - Trong chê ; đô  này xung cấp cho Timer1 là Fosc/4. - Bit T1SYNC không có tác dụng vì xung cấp là xung clock bên trong. - Hoạt động đồng bô  được thực hiện ngay saf u bô  Prescaler. - Trong chê ; đô  Sleep, bô  đếm sẽ ngưng hoạt động CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI  Chê  đô  đếm đồng bô: được chọn bởi bit TMR1CS =1 va B T1SYNC =0. - Gia ; trị bô  đếm Timer1 tăng khi có xung cạnh lên tại chân T1OSI/RC1 (nếu bit T1OSCEN =1) hoặc tại chân T1OSO/RC0 (nếu bit T1OSCEN =0). - Xung ngoài sẽ được đồng bô  với xung nội. - Hoạt động đồng bô  được thực hiện ngay sau bô  Prescaler. - Trong chê ; đô  Sleep, bô  đếm sẽ ngưng hoạt động CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI  Chê  đô  đếm không đồng bô - Nếu bit T1SYNC =1, xung ngoài sẽ không được đồng bô . Bô  định thời sẽ tiếp tục đếm trong chê ; đô  SLEEP, va B tạo ra Ngắt khi bô  đếm tràn làm PIC thoát khỏi trạng thái SLEEP. - Khi ghi hay đọc vào Timer cần chu  ý: * Việc đọc thanh ghi TMR1H hay TMR1L trong khi Timer đang chạy sẽ cho ta gia ; trị tức thời. * Khi ghi vào Timer ta nên dừng Timer lại đê % Ghi. CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI Chương trình Đọc giá trị 16 bit của bô  đếm Timer1: LOOP MOVF TMR1H, 0 MOVWF TMPH ;Kết quả đọc tốt ;Kết quả đọc TMR1L có thể thay đổi khi ta kiểm tra. ;Do đó ta đọc lại lần nữa để được gtri chính xác. MOVF TMR1L, 0 MOVWF TMPL ;Đọc Byte cao lần nữa MOVF TMR1H, 0 SUBWF TMPH, W BTFSC STATUS, Z GOTO LOOP MOVF TMR1H, 0 MOVWF TMPH MOVF TMR1L, 0 MOVWF TMPL CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI Chương trình Ghi giá trị 16 bit vào bô  đếm Timer1: MOVLW HI_BYTE MOVWF TMR1H, 1 MOVLW LO_BYTE MOVWF TMR1L, 1 CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI c. Bộ dao động riêng của TIMER1 - Chúng ta có thể tạo ra 1 bộ dao động độc lập cho Timer1 bằng thạch anh với tần số lên đến 200KH. - Khi đó, bộ đếm có thể hoạt động ở chế độ SLEEP Hình 3: Bảng lựa chọn tụ lọc cho bộ OSC riêng CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI d. Ngắt TIMER1 - Ngắt Timer1 xảy ra khi tràn bô  đếm TMR1 tưB FFFF – 0000h. - Khi Timer1 tràn, TMR1IF = 1. CơB này được xóa bằng phần mềm. Ngắt có thể ngăn chặn bởi việc xóa bit TMR1IE. - Ngắt do Timer1 ở chế độ định thời và đếm đồng bộ không làm PIC thoát khỏi chê  đô  ngu . Chỉ có chế độ đếm không đồng bộ mới được. CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI e. Khởi tạo TIMER1 1.Chế độ xung Clock nội CLRF T1CON ; Xóa byte cao và byte thấp CLRF TMR1H CLRF TMR1L ;Không cho phép Ngắt ;Chế độ xung nội với tỉ lệ 1:8 ;Dừng Timer1 MOVLW 0x30 MOVWF T1CON ;Cho phép Timer1 hoạt động BSF T1CON, TMR1ON CLRF INTCON ;Xóa tghi NGẮT ngoại vi BSF STATUS, RP0 CLRF PIE1 ;Xóa các cờ Ngắt ngoại vi BCF STATUS, RP0 CLRF PIR1 ;Vì Ngắt Timer1 bị cấm nên ta dùng vòng lặp để ktra TRÀN T1_OVFL_WAIT BTFSS PIR1, TMR1IF GOTO T1_OVFL_WAIT ;Timer1 TRÀN BCF PIR1, TMR1IF CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI 2.Chế độ xung Clock ngoài CLRF T1CON ; Xóa byte cao và byte thấp CLRF TMR1H CLRF TMR1L ;Không cho phép Ngắt ;Chế độ xung ngoài với tỉ lệ 1:8 ;Timer1 dừng lại MOVLW 0x32 MOVWF T1CON ;Cho phép Timer1 hoạt động BSF T1CON, TMR1ON CLRF INTCON ;Xóa tghi NGẮT ngoại vi BSF STATUS, RP0 CLRF PIE1 ;Xóa các cờ Ngắt ngoại vi BCF STATUS, RP0 CLRF PIR1 ;Vì Ngắt Timer1 bị cấm nên ta dùng vòng lặp để ktra TRÀN T1_OVFL_WAIT BTFSS PIR1, TMR1IF GOTO T1_OVFL_WAIT ;Timer1 TRÀN BCF PIR1, TMR1IF CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI 3. Bô  định thời TIMER2 - TIMER2 là bô  định thời 8 bit, bao gồm 1 bộ tiền định tỉ lệ (PreScaler) và 1 bộ hậu định tỉ lệ (Postscaler) và 1 thanh ghi chu kỳ PR2. - Việc kết hợp 2 bộ định tỉ lệ vào Timer2 cho phép nó hoạt động như là bộ định thời 16 bit. - Ngoài ra, Timer2 còn có chức năng cung cấp thời gian hoạt động cho chế độ điều biến xung PWM khi module CCP được chọn. I Prescaler 1:1, 1:4, 1:16 COMPARATOR Postscaler1:1  1:16 Fosc/4 TMR2 TMR2 OUTPUT PR2 Hình 4: Cấu trúc bộ định thời Timer2 TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 T2CKPS1 T2CKPS0 Timer2 ON 1 = Timer2 enabled T2CONTMR2ON T2CKPS1 T2CKPS2 Scale 0 0 1:1 0 1 1:4 1 X 1:16 I Prescaler 1:1, 1:4, 1:16 COMPARATOR Postscaler1:1  1:16 Fosc/4 TMR2 TMR2 OUTPUT PR2 PIR1 Start Timer2 Counting Hình 4: Cấu trúc bộ định thời Timer2 1 TMR2IF Load Period Register Flag set on first match with postscaler = 1:1 CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI a. Thanh ghi T2CON - Bit 7 chưa được cấu hình. - Bit 6:3 - TOUTPS3 : TOUTPS0 :các bit chọn tỉ lệ ngõ ra Timer2 0000 = 1:1 (Tỉ lệ ngõ ra) 0001 = 1:2 .. 1111 = 1:16 CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI - Bit 2 - TMR2ON :Cho phép Timer2 hoạt động 1 = Cho phép 0 = Không cho phép - Bit 1:0 - T2CKPS1 : T2CKPS0 :Bit chọn tỉ lệ ngõ vào của Timer2 00 = 1:1 01 = 1:4 1x = 1:16 CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI b. Nguồn xung Clock của Timer2 - Timer2 chỉ có một nguồn xung Clock duy nhất là xung bên trong được định tỉ lệ bởi các bit T2CKPS1:T2CKPS0 của bộ Prescaler. c. Thanh ghi TMR2 và PR2 - TMR2 và PR2 là hai thanh ghi cho phép đọc/ghi. - TMR2 sẽ tăng từ giá trị 00H đến giá trị nằm trong PR2, sau đó nó được Reset về 0 cho chu kỳ đếm kế tiếp. CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI d. Tín hiệu báo trạng thái cân bằng - Khi giá trị trong thanh ghi TMR2 và PR2 bằng nhau, bộ so sánh sẽ tạo ra một xung. - Xung này được đưa vào bộ hậu định tỉ lệ (PostScaler) hoặc dùng làm xung Clock cho Module truyền nối tiếp (Shift clock). - Ngoài ra, xung này còn được dùng làm tín hiệu Reset cho Timer2. CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI e. Xóa các Bộ định tỉ lệ Các bộ định tỉ lệ được xóa khi: - Ghi một giá trị vào thanh ghi TMR2. - Ghi một giá trị vào thanh ghi T2CON. - Khi xảy ra bất kỳ một trạng thái Reset thiết bị. f. Chế độ SLEEP - Trong chế độ này, Timer2 không hoạt động. - Giá trị của bộ định tỉ lệ sẽ được lưu và khôi phục lại sau khi thoát khỏi chế độ SLEEP. CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI g. Khởi tạo TIMER2 CLRF T2CON ; Xóa bộ đếm CLRF TMR2 ;Không cho phép Ngắt ; Tỉ lệ ngõ ra 1:15 ;tỉ lệ đầu vào 1:16 ;Tắt Timer2 MOVLW 0x72 MOVWF T2CON ;Cho phép Timer2 hoạt động BSF T2CON, TMR2ON CLRF INTCON ;Xóa tghi NGẮT ngoại vi BSF STATUS, RP0 CLRF PIE1 ;Xóa các cờ Ngắt ngoại vi BCF STATUS, RP0 CLRF PIR1 ;Vì Ngắt Timer2 bị cấm nên ta dùng vòng lặp để ktra TRÀN T2_OVFL_WAIT BTFSS PIR1, TMR2IF GOTO T2_OVFL_WAIT ;Timer1 TRÀN BCF PIR1, TMR2IF CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI TIMER0 TIMER1 TIMER2 SIZE OF REGISTER 8-bits (TMR0) 16-bits (TMR1H:TMR1L) 8-bits (TMR2) CLOCK SOURCE (Internal) Fosc/4 Fosc/4 Fosc/4 CLOCK SOURCE (External ) T0CKI pin T1CKI pin or Timer 1 oscillator (T1OSC) None CLOCK SCALING AVAILABLE (Resolution) Prescaler 3-bits (1:21:256) Prescaler 2-bits (÷1,÷2,÷4,÷8) Prescaler (1:1,1:4,1:8) Postscaler (1:11:16) INTERRUPT EVENT and FLAG LOCATION On overflow FFh00h (TMR0IF in INTCON) On overflow FFFFh0000h (TMR1IF in PIR1) TMR2 matches PR2 (TMR2IF in PIR2) CAN WAKE PIC FROM SLEEP? NO YES NO

Các file đính kèm theo tài liệu này:

  • pdfchuong_4_pic_timer_2825.pdf
Tài liệu liên quan