4. HOẠT ĐỘNG ĐỊNH THỜI
4.4.1. Các hàm của timer0:
Hàm CloseTimer0
Nguyên mẫu : void CloseTimer0( void );
Chức năng : Hàm được sử dụng để cấm hoạt động của timer0 Hàm OpenTimer0
Nguyên mẫu : void OpenTimer0( unsigned char config );
Chức năng : Hàm được sử dụng để thiết lập các tham số cho timer0 Các đối số bao gồm:
TIMER_INT_ON
TIMER_INT_OFF Cho phép ngắt (Interrupt enabled) Không cho phép ngắt (Interrupt disabled) T0_SOURCE_EXT
T0_SOURCE_INT Dùng nguồn xung từ ngoài (I/O pin) Dùng nguồn dao động nội (TOSC) T0_EDGE_FALL
T0_EDGE_RISE
Đếm khi có sườn xuống (External clock on falling edge) Đếm khi có sườn lên (External clock on rising edge) T0_8BIT
T0_16BIT Chế độ 8bit Chế độ 16bit T0_PS_1_1 T0_PS_1_2 T0_PS_1_4 T0_PS_1_8 T0_PS_1_16 T0_PS_1_32 T0_PS_1_64 T0_PS_1_128 T0_PS_1_256 Hệ số chia tần trước 1:1 Hệ số chia tần trước 1:2 Hệ số chia tần trước 1:4 Hệ số chia tần trước 1:8 Hệ số chia tần trước 1:16 Hệ số chia tần trước 1:32 Hệ số chia tần trước 1:64 Hệ số chia tần trước 1:128 Hệ số chia tần trước 1:256
Các đối số được sử dụng kết hợp với nhau bằng toán từ “&”, ví dụ: OpenTimer0( TIMER_INT_OFF &
T0_8BIT &
T0_SOURCE_INT & T0_PS_1_32 );
Hàm ReadTimer0
Nguyên mẫu : unsigned int ReadTimer0( void );
Chức năng : Hàm được sử dụng để đọc giá trị hiện thời của timer0 Hàm WriteTimer0
Nguyên mẫu : void WriteTimer0(unsigned int timer_value)
Chức năng : Hàm được sử dụng để đọc giá trị hiện thời của timer0 Tham số timer_value là giá trị cần ghi cho timer, ví dụ: WriteTimer0(10);
4.4.2. Các hàm của timer1: Hàm CloseTimer1
Nguyên mẫu : void CloseTimer1( void );
Chức năng : Hàm được sử dụng để cấm hoạt động của timer1 Hàm OpenTimer1
Nguyên mẫu : void OpenTimer1( unsigned char config );
Chức năng : Hàm được sử dụng để thiết lập các tham số cho Timer1 Một số đối số:
TIMER_INT_ON
TIMER_INT_OFF Cho phép ngắt (Interrupt enabled) Không cho phép ngắt (Interrupt disabled) T1_8BIT_RW
T1_16BIT_RW
Chế độ ghi/đọc 8bit Chế độ ghi/đọc 16bit T1_SOURCE_EXT
T1_SOURCE_INT Dùng nguồn xung từ ngoài (I/O pin) Dùng nguồn dao động nội (TOSC) T1_PS_1_1 T1_PS_1_2 T1_PS_1_4 T1_PS_1_8 Hệ số chia tần trước 1:1 Hệ số chia tần trước 1:2 Hệ số chia tần trước 1:4 Hệ số chia tần trước 1:8 T1_OSC1EN_ON
T1_OSC1EN_OFF Sử dụng timer1 như một bộ phát xung cho hệ thống Không sử dụng timer1 như một bộ phát xung cho hệ thống Hàm ReadTimer1
Nguyên mẫu : unsigned int ReadTimer1( void );
Chức năng : Hàm được sử dụng để đọc giá trị hiện thời của Timer1 Hàm WriteTimer1
Nguyên mẫu : void WriteTimer1(unsigned int timer_value)
Chức năng : Hàm được sử dụng để đọc giá trị hiện thời của Timer1 4.4.3. Các hàm của Timer2:
Hàm CloseTimer2
Nguyên mẫu : void CloseTimer2( void );
Chức năng : Hàm được sử dụng để cấm hoạt động của Timer2 Hàm OpenTimer2
Nguyên mẫu : void OpenTimer2( unsigned char config );
Một số đối số:
TIMER_INT_ON TIMER_INT_OFF
Cho phép ngắt (Interrupt enabled)
Không cho phép ngắt (Interrupt disabled) T2_PS_1_1 T2_PS_1_4 T2_PS_1_16 Hệ số chia tần trước 1:1 Hệ số chia tần trước 1:4 Hệ số chia tần trước 1:16 T2_POST_1_1 T2_POST_1_2 … T2_POST_1_16 Hệ số chia tần sau 1:1 Hệ số chia tần sau 1:2 … Hệ số chia tần sau 1:16 Hàm ReadTimer2
Nguyên mẫu : unsigned int ReadTimer2( void );
Chức năng : Hàm được sử dụng để đọc giá trị hiện thời của Timer2 Hàm WriteTimer2
Nguyên mẫu : void WriteTimer2(unsigned int timer_value)
Chức năng : Hàm được sử dụng để đọc giá trị hiện thời của Timer2 4.4.4. Các hàm của Timer3:
Hàm CloseTimer3
Nguyên mẫu : void CloseTimer3( void );
Chức năng : Hàm được sử dụng để cấm hoạt động của Timer3 Hàm OpenTimer3
Nguyên mẫu : void OpenTimer3( unsigned char config );
Chức năng : Hàm được sử dụng để thiết lập các tham số cho Timer3 Một số đối số:
TIMER_INT_ON TIMER_INT_OFF
Cho phép ngắt (Interrupt enabled)
Không cho phép ngắt (Interrupt disabled) T3_SOURCE_EXT
T3_SOURCE_INT Dùng nguồn xung từ ngoài (I/O pin) Dùng nguồn dao động nội (TOSC) T3_8BIT_RW T3_16BIT_RW Chế độ ghi/đọc 8bit Chế độ ghi/đọc 16bit T3_PS_1_1 T3_PS_1_4 T3_PS_1_8 Hệ số chia tần trước 1:1 Hệ số chia tần trước 1:4 Hệ số chia tần trước 1:8 Hàm ReadTimer3
Nguyên mẫu : unsigned int ReadTimer3( void );
Hàm WriteTimer3
Nguyên mẫu : void WriteTimer3(unsigned int timer_value)
5. ĐIỀU CHẾ ĐỘ RỘNG XUNG – PWM
5.1. Sơ đồ khối bộ PWM
Sơ đồ khối của CCP ở chế độ PWM. 5.2. Các thanh ghi liên quan
- Thanh ghi điều khiển CCPx: CCPxCON
U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 — — DCxB1 DCxB0 CCPxM3 CCPxM2 CCPxM1 CCPxM0 bit 7 bit 0 bit 7-6 Không được sử dụng: đọc sẽ được ‘0’
bit 5-4 DCxB1:DCxB0: Bit lựa chọn độ rộng xung 1:0 của chế độ PWM. Capture mode:
Không sử dụng. Compare mode: Không sử dụng. PWM mode:
Là 2 bit thấp DCxB1: DCxB0 của thanh ghi lựa chọn độ rộng xung cho PWM.
bit 3-0 CCPxM3:CCPxM0: Bit lựa chọn chế độ hoạt động cho bộ CCPx 0000 = Cấm CCPx hoạt động.
11xx = Chế độ PWM.
- Thanh ghi chu kỳ (Period) : PR2
PR2 là thanh ghi 8 bit của bộ Timer2, thanh ghi này được sử dụng để tạo chu kỳ cho xung PWM.
- Thanh ghi độ rộng xung (Dyty Cycle) : CCPRx
CCPRx là thanh ghi thanh ghi 8 bit của CCPx, thanh ghi này chứa 8 bit cao DCxB9:DCxB2 sử dụng để tạo độ rộng xung(2 bit thấp trong thanh CCPxCON).
Các thanh ghi liên quan đến chế độ PWM của bộ CCPx:
Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RBIE TMR0IF INT0IF RBIF
RCON IPEN SBOREN — RI TO PD POR BOR
PIR1 PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF
PIE1 PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE
IPR1 PSPIP ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP
TRISB Thanh ghi hướng dữ liệu PORTB TRISC Thanh ghi hướng dữ liệu PORTC TMR2 Thanh ghi đếm của Timer2 PR2 Thanh ghi chu kỳ của Timer2
T2CON — T2OUTPS3 T2OUTPS2 T2OUTPS1 T2OUTPS0 TMR2ON T2CKPS1 T2CKPS0 CCPR1L Thanh ghi Capture/Compare/PWM 1 byte thấp
CCPR1H Thanh ghi Capture/Compare/PWM 1 byte cao
CCP1CON P1M1(1) P1M0(1) DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0 CCPR2L Thanh ghi Capture/Compare/PWM 2 byte thấp
CCPR2H Thanh ghi Capture/Compare/PWM 2 byte cao
CCP2CON — — DC2B1 DC2B0 CCP2M3 CCP2M2 CCP2M1 CCP2M0