mmm, can you (or someone else) try the following for me? Try both with a 4 MHz and then with a 20MHz crystal. You just need to change the DEFINE OSC and the code will automatically change for you (config fuses, Prescaller and PR2). Sit a scope on PinActivar (PORTB.0) and measure the frequency. It has to be close of 4KHz
Code 1 with ON INTERRUPT
Code 2, with DT-INTCode:DEFINE OSC 4 ' select 4 or 20 PinActivar VAR portb.0 LoopCount VAR WORD TMR2IF VAR PIR1.1 TRISB = 0 portb = 0 INTCON = %11000000 PIE1 = %00000010 PIR1 = %00000000 OPTION_REG = %00000000 PinActivar = 0 @ IF (OSC==20) @ __config _HS_OSC & _WDT_ON & _PWRTE_ON & _MCLRE_ON & _LVP_OFF & _CP_OFF pr2 = 155 T2CON = %00000101 ' TMR2 Prescale 1:4 @ ELSE @ __config _XT_OSC & _WDT_ON & _PWRTE_ON & _MCLRE_ON & _LVP_OFF & _CP_OFF PR2 = 118 T2CON = %00000100 ' TMR2 prescale 1:1 @ ENDIF ON INTERRUPT GOTO Sample MAIN: GOTO MAIN disable Sample: TOGGLE PinActivar tmr2if=0 resume enable
i'm curious to knwo if there's any significant difference between the above, and how much. I feel them equal @20MHz, but some doubt on 4MHz.Code:DEFINE OSC 4 ' select 4 or 20 INCLUDE "c:\pbp_prog\Include_routines\DT_INTS-14.bas" INCLUDE "c:\pbp_prog\Include_routines\ReEnterPBP.bas" ASM INT_LIST macro ; IntSource, Label, Type, ResetFlag? INT_Handler TMR2_INT, _Sample, PBP, YES endm INT_CREATE ENDASM PinActivar VAR portb.0 TRISB = 0 portb = 0 OPTION_REG = %00000000 @ IF (OSC==20) @ __config _HS_OSC & _WDT_ON & _PWRTE_ON & _MCLRE_ON & _LVP_OFF & _CP_OFF pr2 = 155 ' load tmr2 PR2 to reset every 125 uSec T2CON = %00000101 ' TMR2 Prescale 1:4 @ ELSE @ __config _XT_OSC & _WDT_ON & _PWRTE_ON & _MCLRE_ON & _LVP_OFF & _CP_OFF PR2 = 118 T2CON = %00000100 ' TMR2 prescale 1:1 @ ENDIF @ INT_ENABLE TMR2_INT MAIN: GOTO MAIN Sample: toggle pinactivar @ INT_RETURN
Obviously this code don't do anything interesting... i'm just curious...
As i said, i can't check anything it here.




Bookmarks