Значит пишу на ССР под данный контроллер и проблема заключается в том, что ТАЙМЕР1 запускается спустя какое-то время 30сек-1мин.
Упрощенный код:
Код:
// 4MHz
//#define INTS_PER_SECOND 4 // (4000000/(4*4*65536)) = 3,814697265625
//#define TICS_PER_MSECOND 3815
// 8MHz
#define TICS_PER_MSECOND 7629
#define INTS_PER_SECOND 8 // (8000000/4/65536/4)) = 7,62939453125
int8 seconds=0; // A running seconds counter
#INT_TIMER1 // This function is called every time
void clock_isr() { // timer 1 overflows (65535->0), which is
// approximately 19 times per second for
if(--int_count==0) { // this program.
if(seconds == 255) seconds = 0;
++seconds;
int_count = INTS_PER_SECOND;
}
}
// MAIN Procedure
void main()
{
set_tris_a(0x3D);
// Setup timer1 for seconds counting
setup_timer_1(T1_INTERNAL | T1_DIV_BY_4);
delay_ms(250);
enable_interrupts(INT_TIMER1);
delay_ms(250);
enable_interrupts(GLOBAL);
delay_ms(250);
seconds = 0;
// Setup timer2 for our PWM generator
setup_timer_2(T2_DIV_BY_16,127,1); //499 us overflow, 499 us interrupt
delay_ms(250);
// Setup PWM
setup_ccp1(CCP_PWM);
delay_ms(10);
set_pwm1_duty(LIGHT_OFF8);
delay_ms(150);
// ADC (ÀÖÏ)
setup_adc_ports(sAN0);
// setup_adc_ports(sAN0 | sAN1);
// setup_adc_ports(ALL_ANALOG /*sAN0 | sAN1 | sAN3*/);
delay_ms(10);
// setup_adc(ADC_CLOCK_INTERNAL|VSS_VDD);
setup_adc(ADC_CLOCK_INTERNAL);
delay_ms(10);
set_adc_channel(0);
delay_ms(10);
setup_vref(VREF_LOW);
delay_ms(10);
// setup_adc_ports(sAN1);
setup_comparator( NC_NC_NC_NC );
delay_ms(10);
curtime = oldtime = seconds;
while(TRUE)
{
Здесь, например,
Если(seconds = 1) { делпем бип, или блым; seconds = 0; }
}
}
Так вот seconds начинает прибавляться не сразу, а по истечению определенного времени, причем в протеусе та же фигня.
Почему лыжи не едут?
Оно какбЭ и не критично, но напрягает.