хотя может я и вообще неправильно понимаю....., обясните плиз
хотя может я и вообще неправильно понимаю....., обясните плиз
Код: Выделить всё
void METRIKKOD(void) //
{
word Rj = 0, Ri = 0, Rg = 0, Rr;
temp = 0;
/*-- Мантисса !--*/
/*-- Первый символ !--*/
temp =getchar(); //
switch (temp)
{
case '-': neg = On; temp =getchar(); break;
case ' ': goto m1;
case '.': goto m;
case 0x0D: temp =getchar(); if(temp == 0x0A){}; break;
default:
}; Rj = temp -=0x30; Rj *= 1000; Ri = Rj;
/*-- Второй символ !--*/
temp =getchar(); //
switch (temp)
{
case ' ': Ri = Ri /1000; goto m1;
case '.': Ri = Ri /1000; goto m;
case 0x0D:Ri = Ri /1000; temp =getchar(); if(temp == 0x0A){}; break;
default:
}; Rj = temp -=0x30; Rj *= 100; Ri = Rj + Ri;
/*-- Третий символ !--*/
temp = getchar();
switch (temp)
{
case ' ': Ri = Ri /100; goto m1;
case '.': Ri = Ri /100; goto m;
case 0x0D:Ri = Ri /100; temp = getchar(); if(temp == 0x0A){}; break;
default:
}; Rj = temp -=0x30; Rj *= 10; Ri = Rj + Ri;
/*-- Четвертый символ !--*/
temp = getchar();
switch (temp)
{
case ' ': Ri = Ri /10; goto m1;
case '.': Ri = Ri /10; goto m;
case 0x0D:Ri = Ri /10; temp = getchar(); if(temp == 0x0A){}; break;
default:
}; Rj = temp -=0x30; Ri = Rj + Ri;
temp = getchar();
switch (temp)
{
case '.': putchar(temp); goto m;
case ' ': putchar(temp); goto m1;
case 0x0D: temp = getchar(); if(temp == 0x0A){}; break;
default:
};
/*-- Экспонента !--*/
m:
temp = 0;
/*-- Первый символ !--*/
temp = getchar();
if(temp == ' '){goto m1;};
if(temp == 0x0D)temp = getchar(); if(temp == 0x0A){};
Rj = temp -=0x30; Rj *= 1000; Rg = Rj;
/*-- Второй символ !--*/
temp =getchar();
if(temp == ' '){Rg = Rg /1000; goto m1;};
if(temp == 0x0D)Rg = Rg /1000; temp = getchar(); if(temp == 0x0A){};
Rj = temp -=0x30; Rj *= 100; Rg = Rj + Rg;
/*-- Третий символ !--*/
temp =getchar();
if(temp == ' '){Rg = Rg /100; goto m1;};
if(temp == 0x0D)Rg = Rg /100; temp = getchar(); if(temp == 0x0A){};
Rj = temp -=0x30; Rj *= 10; Rg = Rj + Rg;
/*-- Четвертый символ !--*/
temp = getchar();
if(temp == ' '){Rg = Rg /10; goto m1;};
if(temp == 0x0D)Rg = Rg /10; temp = getchar(); if(temp == 0x0A){};
Rj = temp -=0x30; Rg = Rj + Rg;
m1:
mant = Ri;
exsp = Rg;
}А можно вот так? Проверено, работает:FreshMan писал(а):мне нужно нулевой таймер настроит на 1мс
если я сделаю вот такие настройки......, будет ли данный таймер начинать свой расчет с числа 82h ?
этот приемчик я знаюEprinter писал(а):А можно вот так? Проверено, работает:
это делается в фоновой задаче ?Eprinter писал(а):нужно каждый раз программно выставлять таймеру стартовое значение.
Посмотреть бы, как пробовали, может какой нюанс упущен.FreshMan писал(а):странно......., пробовал но не помогло
Код: Выделить всё
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0x82;
if (++ms>=1000){ms=0;sec++;};
if (sec>=60)sec=0;
flag=1;
}Код: Выделить всё
unsigned long fn_AtoL(unsigned char *arr)
{
unsigned long lRez=0;
while(*arr > 0x2F)
{
lRez = lRez*10+(*arr-'0');
*arr++;
}
return lRez;
}
Судя по коду, у вас секундомер? Если нужна хорошая точность и в программе есть другие прерывания, то лучше записать так:FreshMan писал(а):Код: Выделить всё
// Reinitialize Timer 0 value TCNT0=0x82; if (++ms>=1000){ms=0;sec++;}; if (sec>=60)sec=0; flag=1;