Bài giảng Chương 4: Hoạt động của bộ định thời giúp các bạn biết được bộ định thời Timero; bộ định thời Timer 1; bộ định thời Timer 2. Mời các bạn tham khảo bài giảng để bổ sung thêm kiến thức về lĩnh vực này, với các bạn chuyên ngành Công nghệ thông tin thì đây là tài liệu hữu ích.
CHƯƠNG I CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI Bô định thời TIMER0 - Bộ định thời TIMER0 bô định thời / bô đếm bit - Bao gồm bô tiền định ti lê bit lập trình (Prescaler) - Có Bit chọn xung Clock nội hay bên ngồi - Có Bit lựa chọn cạnh tác động xung Clock CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI a Bô tiền định ti lê (Prescaler) Là bô đếm bit dùng làm bô tiền định ti lê cho Timer0 hậu định ti lê cho bô WDT - Bit PSA bit chọn dùng cho Timer hay WDT - bit PS2 : PS0 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ó chê hoạt động lựa chọn bit T0CS ( OPTION ) - Ở chê đô định thời: ghi TMR0 tăng lên sau chu ky máy ( với điều kiện Prescaler khơng có tác dụng có ti lê 1:1 ) - Ở chê đô đếm xung: TMR0 tăng lên có sườn cạnh lên hay sườn cạnh xuống (qui định bit T0SE) xuất 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 ngồi đồng bơ với xung Clock nội - Với ti lê bơ Prescaler 1:1 Nguồn xung Clock ngồi đồng bô với xung Clock nội cách lấy mẫu chu ky Q2 va Q4 xung Clock nội - Do đo, chu ky xung Clock ngoại, thời gian trạng thái cao (Ton) trạng thái thấp (Toff) phải Tosc I DATA BUS Fosc/4 synchronize prescaler Watchdog Timer RBPU TMR0 scaled clock T0CKI pin WDT out INTEDG TOCS TOSE OPTION PSA PS2 PS1 PS0 Prescaler Assignment 1= prescaler assigned to WDT 0= prescaler assigned to Timer TMR0 Clock Source Select Source Edge Select = T0CKI, = Fosc/4 PS2 PS1 PS0 TMR0 RATE 0 1:2 0 1:4 1:8 1 1:16 0 1:32 1 1:64 1 1:128 1 1:256 = High-to-Low = Low-to-High Hình 1: Cấu trúc Bộ định thời TIMER0 CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI c Ngắt TIMER0 -Ngắt Timer0 xảy tràn bô đếm TMR0: FF – 00h -Khi tràn T0IF = Cơ xóa phần mềm -Ngắt Timer0 khơng làm PIC 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 ghi TMR0 CLRF INTCON ; Khơng cho phép ngắt ; Chọn Bank1 BSF STATUS, RP0 MOVLW 0xC3 ; Khơng cho phép Port B có trơ treo OPTION MOVWF chân RB0 RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0 OPTION_REG ; Ngắt có cạnh lên ;Timer0 tăng có xung (RUN) ;Tỉ lê bơ tiền định 1:16 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 ghi TMR0 CLRF INTCON ; Không cho phép ngắt BSF STATUS, RP0 MOVLW 0x37 MOVWF OPTION_REG OPTION RBPU ; Chọn Bank1 ; Cho phép Port B có trơ treo INTEDG TOCS TOSE PSA PS2 PS1 PS0 ; Ngắt có cạnh xuống chân RB0 ;Timer0 tăng có xung (Timer RUN) ;Tỉ lê bô tiền định 1:256 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, MOVLW LO_BYTE MOVWF TMR1L, ……… CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI c Bộ dao động riêng TIMER1 - Chúng ta tạo dao động độc lập cho Timer1 thạch anh với tần số lên đến 200KH - Khi đó, đếm hoạt động chế độ SLEEP Hình 3: Bảng lựa chọn tụ lọc cho OSC riêng CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI d Ngắt TIMER1 - Ngắt Timer1 xảy tràn bô đếm TMR1 tư FFFF – 0000h - Khi Timer1 tràn, TMR1IF = Cơ xóa phần mềm Ngắt ngăn chặn việc xóa bit TMR1IE - Ngắt Timer1 chế độ định thời đếm đồng không làm PIC khỏi chê ngu Chỉ có chế độ đếm không đồng 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 byte thấp CLRF CLRF TMR1H TMR1L ;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 ;Không cho phép Ngắt CLRF INTCON ;Xóa tghi NGẮT ngoại vi BSF STATUS, RP0 CLRF PIE1 ;Xóa 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 ngồi CLRF T1CON ; Xóa byte cao byte thấp CLRF CLRF TMR1H TMR1L ;Không cho phép Ngắt CLRF INTCON ;Xóa tghi NGẮT ngoại vi BSF STATUS, RP0 CLRF PIE1 ;Xóa cờ Ngắt ngoại vi BCF STATUS, RP0 CLRF PIR1 ;Chế độ xung 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 ;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 Bô định thời TIMER2 - TIMER2 bô định thời bit, bao gồm tiền định tỉ lệ (PreScaler) hậu định tỉ lệ (Postscaler) ghi chu kỳ PR2 - Việc kết hợp định tỉ lệ vào Timer2 cho phép hoạt động định thời 16 bit - Ngoài ra, Timer2 cịn có chức cung cấp thời gian hoạt động cho chế độ điều biến xung PWM module CCP chọn I TMR2 OUTPUT Fosc/4 TMR2 Prescaler 1:1, 1:4, 1:16 Postscaler 1:1 1:16 COMPARATOR PR2 TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 Timer2 ON = Timer2 enabled T2CON T2CKPS0 T2CKPS1 T2CKPS2 Scale 0 1:1 1:4 X 1:16 Hình 4: Cấu trúc định thời Timer2 I Start Timer2 Counting TMR2 OUTPUT TMR2 Fosc/4 Prescaler 1:1, 1:4, 1:16 Postscaler 1:1 1:16 COMPARATOR Load Period Register PR2 PIR1 TMR2IF Flag set on first match with postscaler = 1:1 Hình 4: Cấu trúc định thời Timer2 CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI a Thanh ghi T2CON - Bit chưa cấu hình - Bit 6:3 - TOUTPS3 : TOUTPS0 :các bit chọn tỉ lệ ngõ 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 - TMR2ON :Cho phép Timer2 hoạt động = Cho phép = Không cho phép - Bit 1:0 - T2CKPS1 : T2CKPS0 :Bit chọn tỉ lệ ngõ vào 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 Timer2 - Timer2 có nguồn xung Clock xung bên định tỉ lệ bit T2CKPS1:T2CKPS0 Prescaler c Thanh ghi TMR2 PR2 - TMR2 PR2 hai ghi cho phép đọc/ghi - TMR2 tăng từ giá trị 00H đến giá trị nằm PR2, sau Reset cho chu kỳ đếm CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI d Tín hiệu báo trạng thái cân - Khi giá trị ghi TMR2 PR2 nhau, so sánh tạo xung - Xung đưa vào hậu định tỉ lệ (PostScaler) dùng làm xung Clock cho Module truyền nối tiếp (Shift clock) - Ngồi ra, xung cịn dùng làm tín hiệu Reset cho Timer2 CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI e Xóa Bộ định tỉ lệ Các định tỉ lệ xóa khi: - Ghi giá trị vào ghi TMR2 - Ghi giá trị vào ghi T2CON - Khi xảy trạng thái Reset thiết bị f Chế độ SLEEP - Trong chế độ này, Timer2 không hoạt động - Giá trị định tỉ lệ lưu khơi phục lại sau khỏi chế độ SLEEP CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI g Khởi tạo TIMER2 CLRF T2CON ; Xóa đếm CLRF TMR2 ;Khơng cho phép Ngắt CLRF INTCON ;Xóa tghi NGẮT ngoại vi BSF STATUS, RP0 CLRF PIE1 ;Xóa cờ Ngắt ngoại vi BCF STATUS, RP0 CLRF PIR1 ; Tỉ lệ ngõ 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 ;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 oscillator (T1OSC) None CLOCK SCALING AVAILABLE (Resolution) Prescaler 3-bits (1:2 1:256) Prescaler 2-bits (÷1,÷2,÷4,÷8) Prescaler (1:1,1:4,1:8) Postscaler (1:1 1:16) INTERRUPT EVENT and FLAG LOCATION On overflow FFh 00h (TMR0IF in INTCON) On overflow FFFFh 0000h (TMR1IF in PIR1) TMR2 matches PR2 (TMR2IF in PIR2) CAN WAKE PIC FROM SLEEP? NO YES NO ... 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, MOVLW LO_BYTE MOVWF TMR1L, ……… CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI c Bộ dao động. .. bit PS2 : PS0 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ó chê đô hoạt động lựa chọn bit T0CS ( OPTION ) - Ở chê đô định thời: ghi TMR0 tăng...CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI Bô định thời TIMER0 - Bộ định thời TIMER0 bô định thời / bô đếm bit - Bao gồm bơ tiền định ti lê bit lập trình (Prescaler)