#include<iom128v.h>
#include<macros.h>
#include<delay.h>
#define fosc 8000000
#define baud 4800
#define uchar unsigned char
#define uint unsigned int
char rev_buf[80]; //接收缓存
/*uchar rev_start = 0; //接收开始标志
uchar rev_stop = 0; //接收停止标志
uchar gps_flag = 0; //GPS处理标志
uchar change_page = 0; //换页显示标志
*/
uchar num = 0; //
uchar rdata;
/******************************************
串口1初始化
*******************************************/
void uart0_init(void)
{
UCSR0B=0x00;//关闭USART0
UCSR0A=0x00;//u2x=0,不适应倍速传送
UCSR0C=(1<<UCSZ01)|(1<<UCSZ00);//8位数据帧
UBRR0L=(fosc/16/(baud+1))%256;//UBRR异步正常情况下计算公式
UBRR0H=(fosc/16/(baud+1))/256;
SREG=BIT(7);
UCSR0B=(1<<RXEN0)|(1<<TXEN0);//接收使能,发送使能
DDRE|=BIT(1);
}
/**************************************************
往串口1发送 一个数据,其中c为要发送的字符
**************************************************/
void Usart0SendByte(uchar c)
{
while(!(UCSR0A&(1<<UDRE0)));//表明发送器0准备就绪
UDR0=c;
}
/*****************************************************
读取串口1缓冲中的一个字符,并作为函数返回值
*******************************************************/
uchar Usart0GetByte(void)
{
while(!(UCSR0A&(1<<RXC0)));//接收结束
return UDR0;
}
/*******************************************************
往串口1发送一串数据,其中str为要发送的字符串
*******************************************************/
void Usart0SendStr(uchar *s)
{
static char i=0;
while(*s)
{
Usart0SendByte(*s);
s++;
}
Usart0SendByte(0x0a);//回车换行
//putchar0(0x0d);
}
/******************************************
串口2初始化
*******************************************/
void uart1_init(void)
{
UCSR1B=0x00;//关闭USART0
UCSR1A=0x00;//u2x=0,不适应倍速传送
UCSR1C=(1<<UCSZ11)|(1<<UCSZ10);//8位数据帧
UBRR1L=(fosc/16/(baud+1))%256;//UBRR异步正常情况下计算公式
UBRR1H=(fosc/16/(baud+1))/256;
SREG=BIT(7);
UCSR1B=(1<<RXEN1)|(1<<TXEN1);//接收使能,发送使能
DDRD|=BIT(3);
}
/**************************************************
往串口2发送 一个数据,其中c为要发送的字符
**************************************************/
void Usart1SendByte(uchar c)
{
while(!(UCSR1A&(1<<UDRE1)));//表明发送器0准备就绪
UDR1=c;
}
/*****************************************************
读取串口2缓冲中的一个字符,并作为函数返回值
*******************************************************/
uchar Usart1GetByte(void)
{
while(!(UCSR1A&(1<<RXC1)));//接收结束
return UDR1;
}
/*******************************************************
往串口1发送一串数据,其中str为要发送的字符串
*******************************************************/
void Usart1SendStr(uchar *s)
{
static char i=0;
while(*s)
{
Usart1SendByte(*s);
s++;
}
}
#pragma interrupt_handler uart1_rx_isr:31
void uart1_rx_isr(void)
{
uchar rdata;
uchar i=0;
UCSR1A=(1<<RXC1)|(1<<UDRE1);
UCSR1B=(1<<RXCIE1)|(1<<RXEN1);
UCSR1B&=~BIT(RXCIE1);//先关接收中断
rdata=UDR1;
if(!(rdata=='
'))
{
rev_buf[i++]=rdata;//用变量接收数据
}
i=0;
Usart0SendStr(rev_buf);
UCSR1B|=BIT(RXCIE1);//重新开接收中断重新开接收中断
}
/******************************************************
串口1的测试代码
********************************************************/
void main(void)
{
uart0_init();
uart1_init();
while(1)
{
}
}
此帖出自
小平头技术问答
一周热门 更多>