之前弄的IO测试不太好使,这回从官方网站上搜索到一个标准IO的实例,经过自己的整理,修减终于弄成了一个完整的好使的程序。哈哈,不过还没有进行优化删减,所以还不能保证这是最减模式。#include <avr/io.h> #include <stdio.h> #define BAUDRATE 9600 #define F_CPU 12000000 #define RX_BUFSIZE 80 char g_aString[8]; int uart_putchar(char c, FILE *stream) { if (c == '/a') { fputs("*ring*/n", stderr); return 0; } if (c == '/n') uart_putchar('/r', stream); loop_until_bit_is_set(UCSRA, UDRE); UDR = c; return 0; } int uart_getchar(FILE *stream) { uint8_t c; char *cp, *cp2; static char b[RX_BUFSIZE]; static char *rxp; if (rxp == 0) for (cp = b;;) { loop_until_bit_is_set(UCSRA, RXC); if (UCSRA & _BV(FE)) return _FDEV_EOF; if (UCSRA & _BV(DOR)) return _FDEV_ERR; c = UDR; if (c == '/r') c = '/n'; if (c == '/n') { *cp = c; uart_putchar(c, stream); rxp = b; break; } else if (c == '/t') c = ' '; if ((c >= (uint8_t)' ' && c <= (uint8_t)'/x7e') || c >= (uint8_t)'/xa0') { if (cp == b + RX_BUFSIZE - 1) uart_putchar('/a', stream); else { *cp++ = c; uart_putchar(c, stream); } continue; } switch (c) { case 'c' & 0x1f: return -1; case '/b': case '/x7f': if (cp > b) { uart_putchar('/b', stream); uart_putchar(' ', stream); uart_putchar('/b', stream); cp--; } break; case 'r' & 0x1f: uart_putchar('/r', stream); for (cp2 = b; cp2 < cp; cp2++) uart_putchar(*cp2, stream); break; case 'u' & 0x1f: while (cp > b) { uart_putchar('/b', stream); uart_putchar(' ', stream); uart_putchar('/b', stream); cp--; } break; case 'w' & 0x1f: while (cp > b && cp[-1] != ' ') { uart_putchar('/b', stream); uart_putchar(' ', stream); uart_putchar('/b', stream); cp--; } break; } } c = *rxp++; if (c == '/n') rxp = 0; return c; } FILE uart_str = FDEV_SETUP_STREAM(uart_putchar, uart_getchar, _FDEV_SETUP_RW); void IoInit(void) { UCSRC = (1<<URSEL)|0x06; UBRRL = (F_CPU/BAUDRATE/16-1)%256; UBRRH = (F_CPU/BAUDRATE/16-1)/256; UCSRA = 0x00; UCSRB = (1<<RXCIE)|(1<<RXEN)|(1<<TXEN); } int main(void) { int tmp; stdout = stdin = &uart_str; IoInit(); while(1) { printf("测试1[输入一个字符串]:/n"); scanf("%s",g_aString); printf("您的输入为:%s/n",g_aString); printf("测试2[输入数字]:/n"); scanf("%d",&tmp); printf("您的输入为:%d/n",tmp); } return 0; } 以后就可以那这个当做模板了,哈哈。