|
Не работает scanf в IARC 3.20A
Подскажите почему не хочет работать scanf,просто выдает в rs символ который набирается на клаве.Printf работает нормально.На PC проверил все работает,в чем трабл.print и scanf в опциях полные,стек увеличил!
Такое ощущение что на scanf прога зацикливается.
static void put_message (char *s) #define In_DELETE 0x7F // ASCII #define Out_DELETE "\x8 \x8" // VT100 backspace and clear int getchar(void) for (;;) void main(void) double v,sum; //ЭТО НЕ РАБОТАЕТ выдает в RS цифру которую вводят!!!!!!!!!!!
E-mail:
info@telesys.ru
#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 );
}
{
while (*s)
putchar (*s++);
}
#define LINE_LENGTH 10 // Change if you need 80
#define In_EOL '\r' // ASCII
#define In_SKIP '\3' // ASCII control-C
#define In_EOF '\x1A' // ASCII control-Z
#define Out_SKIP "^C\n" // ^C and new line
#define Out_EOF "^Z" // ^Z and return EOF
{
static char io_buffer[LINE_LENGTH + 2]; // Where to put chars
static int ptr; // Pointer in buffer
char c;
{
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');
}
}
}
}
{
sum =0;
MCUCR = 0; //работаем без внешнего ОЗУ
//настроим RS232
UBRR =102;//-4800 bode для кварца 8000
UCR =0x18;
//ЭТО РАБОТАЕТ выдает в RS232 Прог 0.841471!!!!!!!!!!!!!!!
printf("Прог %f\n\r",sin(1));
while (scanf("%lf", &v) !=EOF)
//до этой строки программа не доходит
printf(" \t%.2f\n", sum += v);
}
Ответы