⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.c.bak

📁 avr中mega128的uart程序,还不错的了
💻 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 + -