配置Timer1 的操作:
1. 将TON 位置1 (= 1)。
2. 使用TCKPS<1:0> 位选择定时器预分频比。
3. 使用TCS 和TGATE 位设置时钟和门控模式。
4. 将TSYNC位置1或清零来配置同步或异步操作。
5. 将定时器的周期值装入PR1 寄存器。
6. 如果需要中断,将中断允许位T1IE 置1。使用中
断优先级位T1IP<2:0> 来设置中断优先级。
timer1的代码:
- /*
- * File: ??mainXC16.c
- * Author: Administrator
- *
- * Created on 2015?3?23?, ??10:20
- */
- #include "xc.h"
- _FBS
- (
- BWRP_OFF & // Boot Segment Write Protect (Disabled)
- BSS_OFF // Boot segment Protect (No boot flash segment)
- )
- //_FGS
- //(
- // GWRP_OFF & // General Segment Flash Write Protect (General segment may be written)
- // GSS0_OFF // General Segment Code Protect (No Protection)
- //)
- _FOSCSEL
- (
- FNOSC_FRC & // Oscillator Select (8MHz FRC with Postscaler (FRCDIV))
- // SOSCSRC_ANA & // SOSC Source Type (Analog Mode for use with crystal)
- // LPRCSEL_HP & // LPRC Power and Accuracy (High Power/High Accuracy)
- IESO_ON // Internal External Switch Over bit (Internal External Switchover mode enabled (Two-speed Start-up enabled))
- )
- _FOSC
- (
- // POSCMD_HS & // Primary Oscillator Mode (Primary oscillator disabled)
- OSCIOFNC_ON & // CLKO Enable Configuration bit (CLKO output signal enabled)
- POSCFREQ_MS & // Primary Oscillator Frequency Range Configuration bits (Primary oscillator/external clock frequency between 100kHz to 8MHz)
- SOSCSEL_SOSCHP &// SOSC Power Selection Configuration bits (Secondary Oscillator configured for high-power operation)
- FCKSM_CSECME // Clock Switching and Monitor Selection (Clock Switching and Fail-safe Clock Monitor Enabled)
- )
- _FWDT
- (
- WDTPS_PS32768 & // Watchdog Timer Postscale Select bits (1:32768)
- FWPSA_PR128 & // WDT Prescaler bit (WDT prescaler ratio of 1:128)
- FWDTEN_OFF & // Watchdog Timer Enable bits (WDT disabled in hardware; SWDTEN bit disabled)
- WINDIS_OFF // Windowed Watchdog Timer Disable bit (Standard WDT selected (windowed WDT disabled))
- )
- // Warning:
- // Always enable MCLRE_ON config bit setting so that the MCLR pin function will
- // work for low-voltage In-Circuit Serial Programming (ICSP). The Microstick
- // programming circuitry only supports low-voltage ICSP. If you disable MCLR pin
- // functionality, a high-voltage ICSP tool will be required to re-program the
- // part in the future.
- _FPOR
- (
- BOREN_BOR3 & // Brown-out Reset Enable bits (Enabled in hardware; SBOREN bit disabled)
- PWRTEN_ON & // Power-up Timer Enable (PWRT enabled)
- I2C1SEL_PRI & // Alternate I2C1 Pin Mapping bit (Default SCL1/SDA1 Pins for I2C1)
- BORV_V18 & // Brown-out Reset Voltage bits (Brown-out Reset at 1.8V)
- MCLRE_ON // MCLR Pin Enable bit (RA5 input disabled; MCLR enabled)
- )
- _FICD
- (
- ICS_PGx3 // ICD Pin Placement Select (EMUC/EMUD share PGC3/PGD3)
- )
- int main(void) {
- TRISAbits.TRISA0 = 0;
- LATAbits.LATA0 = 1;
-
- //Init timer1.
- T1CON = 0x00; //Stops the Timer1 and reset control reg.
- T1CONbits.TCKPS0 =1;
- T1CONbits.TCKPS1 =0;
-
- TMR1 = 0x00; //Clear contents of the timer register
- PR1 = 0x000f; //Load the Period register with the value 0xFFFF
- IPC0bits.T1IP = 0x01; //Setup Timer1 interrupt for desired priority level.
-
- IFS0bits.T1IF = 0;
- IEC0bits.T1IE = 1;
- T1CONbits.TON = 1;
-
-
- while(1)
- {
-
- ;
- }
-
- return 0;
- }
- void __attribute__((interrupt, shadow, no_auto_psv)) _T1Interrupt(void)
- {
- LATAbits.LATA0 ^= 1;
- /* Interrupt Service Routine code goes here. */
- IFS0bits.T1IF = 0; //Reset Timer1 interrupt flag and Return from ISR
-
- }