📄 uart.c
字号:
#include "common.h"
#include "UART.h"
#include<avr/interrupt.h>
uchar Send_Buf; //发送数据绶冲区
uchar Recv_Buf; //接收数据缓冲区
//接收中断****************************************************************//
/*
SIGNAL (SIG_UART_RECV)
{
uchar c= UDR;
Recv_Buf= c;
Send_Buf= Recv_Buf ;
UDR= Send_Buf ;
}*/
//发送中断****************************************************************//
/*
SIGNAL (SIG_UART_TRANS)
{
//在执行中断过程中,判断并改写 寄存器状态
}
*/
//初始化设置**************************************************************//
void Uart_Init(void)
{
//接收使能、发送使能、接收中断允许、发送中断允许
UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE)|(1<<TXCIE);
UBRRL= (fosc/16/(baud+1)) % 256;
UBRRH= (fosc/16/(baud+1)) / 256;
UCSRC= (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0); //8位数据 +1位STOP位
// sei(); //总中断允许
}
//发送字符函数************************************************************//
void Uart_PutChar(uchar data)
{
while ( !( UCSRA & (1<<UDRE)) ) //等待发送缓冲器为空
;
UDR = data; //将数据放入缓冲器,发送数据
}
//发送字符串函数**********************************************************//
void Uart_PutString(uchar* p)
{
uchar* temp;
temp=p;
while(!(*temp=='\0'))
{
Uart_PutChar(*temp);
temp++;
}
Uart_PutChar(0x0D);
}
//接收字符函数************************************************************//
uchar Uart_Recv(void)
{
if(UCSRA & (1<<RXC))
return UDR;
else return 0;
}
/*
uchar Uart_Recv(void)
{
while (!(UCSRA & (1<<RXC)))
; //等待接收数据
return UDR; //从缓冲器中获取并返回数据
}*/
//接收字符串函数**********************************************************//
/*
void Uart_RecvString(void)
{
uchar i=0;
do
{
String_Buf[i]=Uart_Recv();
i++;
} while(!(String_Buf[i-1]==0x0D));
for(i=0;i<20;i++)
{
String_Buf[i]=Uart_Recv();
delay(40);
}
String_Buf[i]='\0';
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -