Jaipur
14.12.2006, 13:15
hallo zusammen,
ich habe hier einen PIC12F675 mit einem 4MHz Quartz, diesen programmiere ich mit dem ccs c compiler und anschließend wird der pic mit dem mplab 7.5 + icd2 gebrannt. allerdings macht mir gerade der timer0 ein wenig kopfschmerzen, mein hardware/software timer kann ich nur auf ganze sekunden werte einstellen, also: 1, 2, 3, 4, 5, 6, ...
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
unsigned int8 TM_VALUE_1SEC = 250;
unsigned int8 TM_VALUE_XSEC = 0;
unsigned int8 TM_COUNT_1SEC = 0;
unsigned int8 TM_COUNT_XSEC = 0;
unsigned int1 TM_FLAG_1SEC = FALSE;
unsigned int1 TM_FLAG_XSEC = FALSE;
unsigned int1 TM_FLAG_MAIN = FALSE;
#int_TIMER0
TIMER0_isr( /* 4ms */ )
{
TM_FLAG_1SEC = FALSE;
TM_FLAG_XSEC = FALSE;
if( ++TM_COUNT_1SEC >= TM_VALUE_1SEC)
{
TM_COUNT_1SEC = 0;
TM_FLAG_1SEC = TRUE;
}
if( TM_FLAG_1SEC == TRUE)
{
if( ++TM_COUNT_XSEC >= TM_VALUE_XSEC)
{
TM_COUNT_XSEC = 0;
TM_FLAG_XSEC = TRUE;
}
}
if( TM_FLAG_XSEC == TRUE)
{
TM_FLAG_MAIN = TRUE;
}
}
void main()
{
if( TM_FLAG_MAIN == TRUE)
{
TM_FLAG_MAIN = FALSE;
toggle_einen_ausgang();
}
else
{
toggle_einen_anderen_ausganag();
}
}
aber der timer läuft "falsch", wenn ich die zeit messe, bekomme ich immer werte hinter einem komma heraus ?!?!
ich habe hier einen PIC12F675 mit einem 4MHz Quartz, diesen programmiere ich mit dem ccs c compiler und anschließend wird der pic mit dem mplab 7.5 + icd2 gebrannt. allerdings macht mir gerade der timer0 ein wenig kopfschmerzen, mein hardware/software timer kann ich nur auf ganze sekunden werte einstellen, also: 1, 2, 3, 4, 5, 6, ...
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_16);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
unsigned int8 TM_VALUE_1SEC = 250;
unsigned int8 TM_VALUE_XSEC = 0;
unsigned int8 TM_COUNT_1SEC = 0;
unsigned int8 TM_COUNT_XSEC = 0;
unsigned int1 TM_FLAG_1SEC = FALSE;
unsigned int1 TM_FLAG_XSEC = FALSE;
unsigned int1 TM_FLAG_MAIN = FALSE;
#int_TIMER0
TIMER0_isr( /* 4ms */ )
{
TM_FLAG_1SEC = FALSE;
TM_FLAG_XSEC = FALSE;
if( ++TM_COUNT_1SEC >= TM_VALUE_1SEC)
{
TM_COUNT_1SEC = 0;
TM_FLAG_1SEC = TRUE;
}
if( TM_FLAG_1SEC == TRUE)
{
if( ++TM_COUNT_XSEC >= TM_VALUE_XSEC)
{
TM_COUNT_XSEC = 0;
TM_FLAG_XSEC = TRUE;
}
}
if( TM_FLAG_XSEC == TRUE)
{
TM_FLAG_MAIN = TRUE;
}
}
void main()
{
if( TM_FLAG_MAIN == TRUE)
{
TM_FLAG_MAIN = FALSE;
toggle_einen_ausgang();
}
else
{
toggle_einen_anderen_ausganag();
}
}
aber der timer läuft "falsch", wenn ich die zeit messe, bekomme ich immer werte hinter einem komma heraus ?!?!