Hello all - another newbie here. I am having difficulty with this TIMER1 code developed by Jeremy and Hippy - thanks much, guys. I am attempting to adapt this code to an 08M2 but can't seem to get Timer1 to start properly - I keep getting 0 values after attempting to time a pause. Any help would be greatly appreciated. It's probably something simple but the solution escapes me.
Thanks,
Bob D
Thanks,
Bob D
Code:
'08M2 chip running at 8 mhz
'This module enables you to time events in milliseconds using Timer1.
'RAM Addresses:
Symbol RAM_PIR1 = $11
Symbol RAM_T1CON = $18
Symbol RAM_TMR1 = $16
'PIR1:
Symbol ADIF_BIT = bit6
Symbol RCIF_BIT = bit5
Symbol TXIF_BIT = bit4
Symbol SSPIF_BIT = bit3
Symbol CCP1IF_BIT = bit2
Symbol TMR2IF_BIT = bit1
Symbol TMR1IF_BIT = bit0
'T1CON:
Symbol TMRCS1_Bit=bit7
Symbol T1RUN_BIT = bit6 'TMRCS
Symbol T1CKPS1_BIT = bit5 '
Symbol T1CKPS0_BIT = bit4
Symbol T1OSCEN_BIT = bit3
Symbol NOT_T1SYNC_BIT = bit2
Symbol T1INSYNC_BIT = bit2
Symbol TMR1CS_BIT = bit1
Symbol TMR1ON_BIT = bit0
'General Timer1 variable
Symbol Timer1ValueW = w5
Symbol T1CON = b0
Symbol PIR1 = b0
setfreq m8
'InitialiseTimer1:
'Sets the T1CON control register. Only needs to be called once, before
'using Timer1.
TMRCS1_Bit=0 '
T1RUN_BIT =1 '01 =Timer1 clock source is system clock (FOSC)
T1CKPS1_BIT = 1'Divide by 8 Pre-Scaler
T1CKPS0_BIT = 1'Divide by 8 Pre-Scaler
T1OSCEN_BIT = 0'External LP Oscillator Not Enabled
NOT_T1SYNC_BIT = 0'Ignored if Internal Clock
TMR1CS_BIT = 0'Unimplemented
TMR1ON_BIT = 1'Timer 1 Enabled
Poke RAM_T1CON,T1CON 'Set T1CON
'Return
'ResetAndStartTimer1:
'Clear Timer1 and the interrupt(overflow) flag. Start Timer1.
'Set both LSB and MSB of Timer1 to 0
Poke RAM_TMR1,0,0
'Clear Timer1 Interrupt
Peek RAM_PIR1,PIR1
TMR1IF_BIT = 0
Poke RAM_PIR1,PIR1
'Start Timer1
Peek RAM_T1CON,T1CON
TMR1ON_BIT = 1
Poke RAM_T1CON,T1CON
'Return
pause 2000 'pause 1 sec
'GetTime:
'Stop Timer1, Load the result into Timer1ValueW and convert it
'to milliseconds (Assumes an 8MHz clock)
'Stop Timer1
Peek RAM_T1CON,T1CON
TMR1ON_BIT = 0
Poke RAM_T1CON,T1CON
'Load result
Peek RAM_TMR1,Word Timer1ValueW
'sertxd(#Timer1ValueW," = Timer Value",cr,lf)
'Convert result to milliseconds.
'With a 8MHz clock, and a pre-scaler of 1:1, Timer1 increments every 0.5uS.
'With a pre-scaler of 1:8 it increments every 4uS. So the time in uS =
'4 * Timer1ValueW. So the time in mS = 4 * Time1ValueW / 1000 =
'Timer1ValueW / 250.
Timer1ValueW = Timer1ValueW / 250
'Check for Timer1 overflow and if it has overflowed add on another 262ms
'onto Timer1ValueW
Peek RAM_PIR1,PIR1
If TMR1IF_BIT = 1 Then
Timer1ValueW = Timer1ValueW + 262
sertxd(#Timer1ValueW," = Timer Overflow Value",cr,lf)
Endif
sertxd(#Timer1ValueW," = Timer Value",cr,lf)
'Return