$ifndef _TimerMacroDef_ $define _TimerMacroDef_ $Include TimerDefs.Inc 'constants only (********************************************************************************) ' Timer0 Macros ' Create a word sized Timer0 for reading and writing 'Dim _wTimer0M As TMR0L.Word 'this is the trick to read both TMR0L and TMR0H ' 'replaced with Cntlw in the main module '--------------------------------------------------------------------------------- ' Macro Name : OpenTimer0 ' Return Value : None ' Parameters : Bit definitions to configure Timer0 ' Notes : Reset the Timer0 regs to the POR state and configures the interrupt, clock source, edge and prescaler. ' : The bit definitions for pConfig can be found in the TimerDefs.inc file. ' $define OpenTimer0(PC) _OpenTimer0 PC _OpenTimer0 Macro pConfig #if(Prm_Count != 1) #error "OpenTimer0 Macro requires a parameter" Exitm #endif #if((Prm_1 != Num8) && (Prm_1 != Num16) && (Prm_1 != Num32)) #error "OpenTimer0 Macro parameter must be a constant value" Exitm #endif #if((0x7F & pConfig) == 0) Clear T0CON #else Num_SFR (0x7F & pConfig),T0CON ' Configure timer0, but don't start it yet #endif Clear TMR0H ' Reset Timer0 to 0x0000 Clear TMR0L Clear INTCONbits_T0IF ' Clear Timer0 overflow flag #if(pConfig & 0x80) ' If interrupts enabled Set INTCONbits_T0IE ' Enable Timer0 overflow interrupt #else Clear INTCONbits_T0IE ' Disable Timer0 overflow interrupt #endif Set T0CONbits_TMR0ON Endm '--------------------------------------------------------------------------------- ' Macro Name : CloseTimer0 ' Return Value : None ' Parameters : None ' Description : Disable the Timer0 interrupt and stop Timer0 ' $define CloseTimer0() ' Clear INTCONbits_TMR0IE ' T0CON = $7F '--------------------------------------------------------------------------------- ' Macro Name : ReadTimer0 ' Return Value : Timer0 value ' Parameters : None ' Description : Read a value from Timer0. ' '$define ReadTimer0() Cntlw ' '--------------------------------------------------------------------------------- ' Macro Name : WriteTimer0 ' Return Value : None ' Parameters : Value to write to Timer0 ' Description : Write a value to Timer0 ' '$define WriteTimer0(pTimerValue) Cntlw = pTimerValue (********************************************************************************) ' ' Timer1 Macros ' ' Create a word sized Timer1 for reading and writing ' Dim _wTimer1M As TMR1L.Word '--------------------------------------------------------------------------------- ' Macro Name : OpenTimer1 ' Return Value : None ' Parameters : pConfig. Bit definitions to configure Timer1 ' Notes : Reset the Timer1 regs to the POR state and configures the interrupt, clock source, edge and prescaler. ' : The bit definitions for pConfig can be found in the TimerDefs.Inc file. ' $define OpenTimer1(PC) _OpenTimer1 PC _OpenTimer1 Macro pConfig #if(Prm_Count != 1) #error "OpenTimer1 Macro requires a parameter" Exitm #endif #if((Prm_1 != Num8) && (Prm_1 != Num16) && (Prm_1 != Num32)) #error "OpenTimer1 Macro parameter must be a constant value" Exitm #endif #if((0x7E & pConfig) == 0) Clear T1CON #else Num_SFR (0x7E & pConfig),T1CON ' Configure timer1, but don't start it yet #endif #if(pConfig & 0x40) ' The 8/16 selection bit isn't in the Set T1CONbits_RD16 ' right place so we need to move it #else Clear T1CONbits_RD16 #endif Clear TMR1H ' Reset Timer1 to 0x0000 Clear TMR1L Clear PIR1bits_TMR1IF ' Clear Timer1 overflow flag #if(pConfig & 0x80) ' If interrupts enabled Set PIE1bits_TMR1IE ' Enable Timer1 overflow interrupt #else Clear PIE1bits_TMR1IE #endif Set T1CONbits_TMR1ON Endm '--------------------------------------------------------------------------------- ' Macro Name : CloseTimer1 ' Return Value : None ' Parameters : None ' Description : Disable the Timer1 interrupt and stop Timer1 ' $define CloseTimer1() ' Clear T1CONbits_TMR1ON ' Clear PIE1bits_TMR1IE '--------------------------------------------------------------------------------- ' Macro Name : ReadTimer1 ' Return Value : Timer1 value ' Parameters : None ' Description : Read a value from Timer1 ' $define ReadTimer1() _wTimer1M '--------------------------------------------------------------------------------- ' Macro Name : WriteTimer1 ' Return Value : None ' Parameters : Value to write to Timer1 ' Description : Write a value to Timer1 ' $define WriteTimer1(pTimerValue) _wTimer1M = pTimerValue (********************************************************************************) ' ' Timer2 Macros ' '--------------------------------------------------------------------------------- ' Macro Name : OpenTimer2 ' Return Value : None ' Parameters : pConfig. Bit definitions to configure Timer2 ' Notes : Reset the Timer2 regs to the POR state and configures the interrupt, clock source, edge and prescaler. ' : The bit definitions for pConfig can be found in the TimerDefs.Inc file. ' $define OpenTimer2(PC) _OpenTimer2 PC _OpenTimer2 Macro pConfig #if(Prm_Count != 1) #error "OpenTimer2 Macro requires a parameter" Exitm #endif #if((Prm_1 != Num8) && (Prm_1 != Num16) && (Prm_1 != Num32)) #error "OpenTimer2 Macro parameter must be a constant value" Exitm #endif #if((0xFB & pConfig) == 0) Clear T2CON #else Num_SFR (0xFB & pConfig),T2CON ' Configure Timer2, but don't start it yet #endif Clear TMR2 ' Reset Timer2 to 0x00 Clear PIR1bits_TMR2IF ' Clear Timer2 overflow flag #if(pConfig & 0x80) ' If interrupts enabled Set PIE1bits_TMR2IE ' Enable Timer2 overflow interrupt #else Clear PIE1bits_TMR2IE ' Disable Timer2 overflow interrupt #endif Set T2CONbits_TMR2ON ' Enable Timer2 Endm '--------------------------------------------------------------------------------- ' Macro Name : CloseTimer2 ' Return Value : None ' Parameters : None ' Description : Disable the Timer2 interrupt and stop Timer2 ' $define CloseTimer2() ' Clear T2CONbits_TMR2ON ' Clear PIE1bits_TMR2IE '--------------------------------------------------------------------------------- ' Macro Name : ReadTimer2 ' Return Value : Timer2 value ' Parameters : None ' Description : Read a value from Timer2. ' $define ReadTimer2() TMR2 '--------------------------------------------------------------------------------- ' Macro Name : WriteTimer2 ' Return Value : None ' Parameters : Value to write to Timer2 ' Description : Write a value to Timer2 ' $define WriteTimer2(pTimerValue) TMR2 = pTimerValue (********************************************************************************) ' ' Timer3 Macros ' Dim _wTimer3M As TMR3L.Word '--------------------------------------------------------------------------------- ' Macro Name : T3_OSC1EN_ON ' Overview : Sets the T1OSCEN bit in the T1CON ' Parameters : None ' Remarks : None. $define T3_OSC1EN_ON() T1CONbits_T1OSCEN = 1 ' Timer 3 oscillator enables '--------------------------------------------------------------------------------- ' Macro name : T3_OSC1EN_OFF ' Overview : Clears the T1OSCEN bit in the T1CON ' Parameters : None ' Remarks : None $define T3_OSC1EN_OFF() T1CONbits_T1OSCEN = 0 ' Timer 3 oscillator Disables '--------------------------------------------------------------------------------- ' Macro Name : OpenTimer3 ' Return Value : None ' Parameters : pConfig: bit definitions to configure Timer3 ' Description : This routine first resets the Timer3 regs to the POR state and then configures the interrupt, clock source. ' Notes : The bit definitions for config can be found in the TimerDefs.inc file. ' $define OpenTimer3(PC) _OpenTimer3 PC _OpenTimer3 Macro pConfig #if(Prm_Count != 1) #error "OpenTimer3 Macro requires a parameter" Exitm #endif #if((Prm_1 != Num8) && (Prm_1 != Num16) && (Prm_1 != Num32)) #error "OpenTimer3 Macro parameter must be a constant value" Exitm #endif #if((0x7E & pConfig) == 0) Clear T3CON #else Num_SFR (0x7E & pConfig),T3CON ' Set everything except 8/16 mode, and don't start timer yet #endif Clear TMR3H ' Clear timer3-related registers Clear TMR3L Clear PIR2bits_TMR3IF #if(pConfig & 0x80) ' Interrupt on/off Set PIE2bits_TMR3IE #else Clear PIE2bits_TMR3IE #endif #if(pConfig & 2) Set T1CONbits_T1OSCEN ' Enable Timer 1 Oscillator enable (200KHz max freq) #endif #if(pConfig & ~T3_8BIT_RW) ' Select between 8-bit and 16-bit modes Set T3CONbits_RD16 #else Clear T3CONbits_RD16 #endif Set T3CONbits_TMR3ON ' Turn on Timer3 Endm '--------------------------------------------------------------------------------- ' Macro Name : CloseTimer3 ' Return Value : None ' Parameters : None ' Description : Disable the Timer3 interrupt and stop Timer3 ' $define CloseTimer3() ' Clear T3CONbits_TMR3ON ' Clear PIE2bits_TMR3IE ' '--------------------------------------------------------------------------------- ' Macro Name : ReadTimer3 ' Return Value : Timer3 value ' Parameters : None ' Description : Read a value from Timer3. ' $define ReadTimer3() _wTimer3M '--------------------------------------------------------------------------------- ' Macro Name : WriteTimer3 ' Return Value : None ' Parameters : Value to write to Timer3 ' Description : Write a value to Timer3 ' $define WriteTimer3(pTimerValue) _wTimer3M = pTimerValue '--------------------------------------------------------------------------------- ' Macro Name : SetTmrCCPSrc ' Return Value : None ' Parameters : pConfig: bit definitions to configure Timer as a clock source to CCP module ' Description : This routine configures the timer to work as a clock source to CCP module. ' : Required timer has to be enabled by calling respective function. ' Notes : The bit definitions for config can be found in the TimerDefs.inc file. $define SetTmrCCPSrc(pConfig) ' T3CON = T3CON & $B7 ' WREG = pConfig & $48 ' T3CON = T3CON | WREG ' $endif