📄 uart.c.bak
字号:
/***********************************************
**** 名 称:AVRmega128 标准I/O流调试程序
****
**** 作 者:zhiyu
**** 编译器:WINAVR20070525
****
**** 参 考:<<AVR单片机GCC程序设计>>
**** 日 期:2008.03.01
****
**** 芯 片:M16L
**** 时钟源:外部7.2728M晶振
****
**** 结 果:测试成功
**** 问 题:当时配置熔丝位的时候,忘记把103的那个钩去掉,害得搞了一天!
***********************************************/
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <stdio.h>
#include <util/delay.h>
char g_aString[100];//读取字符串缓冲区
static int uart_putchar(char c, FILE *stream);
static int uart_getchar(FILE *stream);
static FILE mystdio = FDEV_SETUP_STREAM(uart_putchar, uart_getchar,_FDEV_SETUP_RW);
//向UART写一字节
static int
uart_putchar(char c, FILE *stream)
{
if(c=='\n')
uart_putchar('\r', stream);
loop_until_bit_is_set(UCSR0A,UDRE0);
UDR0=c;
return 0;
}
//从UART读一字节
static int
uart_getchar(FILE *stream)
{
loop_until_bit_is_set(UCSR0A,RXC0);
return UDR0;
}
//初始化i/o
void IoInit(void)
{
//UART初始化
UCSR0C=0x06;
UBRR0H=0;
UBRR0L=47; //9600 baud
UCSR0B=_BV(RXEN0)|_BV(TXEN0);/*(1<<RXCIE0)|(1<<TXCIE0)|*/
//i/o流UART连接
//fdevopen(usart_putchar,usart_getchar,0);
}
//测试主程序
int main(void)
{
int tmp;
IoInit();
stdout = stdin = &mystdio ;
_delay_ms(30); //延时一下显示就不会出什么错了,可能是没延时,一上电没来得及那么快,输出就有误吧
while(1)
{
//测试1
printf("测试1[输入一字符串]:\n");
scanf("%s",g_aString);
printf("您的输入为:%s\n",g_aString);
//测试2:使用FLASH区的字符串
printf_P(PSTR("测试2[输入数字]:\n"));
scanf_P(PSTR("%d"),&tmp);
printf_P(PSTR("您的输入为:%d\n"),tmp);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -