Не работает scanf в IARC 3.20A
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено hill1960 26 августа 2004 г. 15:36


Не работает scanf в IARC 3.20A

Подскажите почему не хочет работать scanf,просто выдает в rs символ который набирается на клаве.Printf работает нормально.На PC проверил все работает,в чем трабл.print и scanf в опциях полные,стек увеличил!
Такое ощущение что на scanf прога зацикливается.


#include
#include
#include


int putchar(int Bait)
{
//выдаем байт в RS232
UDR=Bait;
while(!(USR & 0x40));
USR=USR|0x40;
return Bait;
}



static char _low_level_get(void)
{
while(!(USR & 0x80));return (UDR );
}

static void put_message (char *s)
{
while (*s)
putchar (*s++);
}


#define LINE_LENGTH 10 // Change if you need 80

#define In_DELETE 0x7F // ASCII
#define In_EOL '\r' // ASCII
#define In_SKIP '\3' // ASCII control-C
#define In_EOF '\x1A' // ASCII control-Z

#define Out_DELETE "\x8 \x8" // VT100 backspace and clear
#define Out_SKIP "^C\n" // ^C and new line
#define Out_EOF "^Z" // ^Z and return EOF

int getchar(void)
{
static char io_buffer[LINE_LENGTH + 2]; // Where to put chars
static int ptr; // Pointer in buffer
char c;

for (;;)
{
if (io_buffer[ptr])
return (io_buffer[ptr++]);
ptr = 0;
for (;;)
{
if ( (c = _low_level_get()) == In_EOF && ! ptr)
{
put_message (Out_EOF);
return (EOF);
}
if (c == In_DELETE)
{
if (ptr)
{
ptr--;
put_message (Out_DELETE);
}
}
else if (c == In_SKIP)
{
put_message (Out_SKIP);
ptr = LINE_LENGTH + 1; // Where there always is a zero...
break;
}
else if (c == In_EOL)
{
putchar (io_buffer[ptr++] = '\n');
io_buffer[ptr] = 0;
ptr = 0;
break;
}
else if (ptr < LINE_LENGTH)
{
if (c >= ' ')
{
putchar (io_buffer[ptr++] = c);
}
}
else
{
putchar ('\7');
}
}
}
}


void main(void)
{

double v,sum;
sum =0;

MCUCR = 0; //работаем без внешнего ОЗУ
//настроим RS232
UBRR =102;//-4800 bode для кварца 8000
UCR =0x18;
//ЭТО РАБОТАЕТ выдает в RS232 Прог 0.841471!!!!!!!!!!!!!!!
printf("Прог %f\n\r",sin(1));

//ЭТО НЕ РАБОТАЕТ выдает в RS цифру которую вводят!!!!!!!!!!!
while (scanf("%lf", &v) !=EOF)
//до этой строки программа не доходит
printf(" \t%.2f\n", sum += v);


}

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru