📄 uart.c
字号:
#include <avr/io.h>
#include "type.h"
uchar PC_RecvBuf[20]; //接收数据缓冲区
uchar pc_bRxdPos=0; //接收定位计数器
uchar pc_bRxdLen=0; //等待接收字节数
uint cmddata;
void uart0_init(void) //串口初始化
{
DDRE &= 0xFE;
DDRE |= 0x02;
UCSR0A= 0x00; // 使用异步正常模式
UCSR0B= 0x98; // 1001 1000B
UCSR0C= 0x06; // 0000 0110B 二者说明UCSZ[2~0]=011 则字符长度是8位 没有校验位
UBRR0H= 0x00; // 设置波特率寄存器
UBRR0L= 47; // UBRR=47 而外部晶振是7.3728MHZ 故波特率由表格知是9600b/s
//UBRR0L= 51;
}
void uart0_Send_Str(char *p) //串口发送字符串
{
uchar j;
for(j=0;*(p+j)!='\0';j++)
{
UDR0=*(p+j);//发送数据
while(!(UCSR0A&0x20));//等待发送完成
}
}
void uart0_Send_Data(char *p,uchar n) //串口发送数据
{
uchar j;
for(j=0;j<n;j++)
{
UDR0=*(p+j);//发送数据
while(!(UCSR0A&0x20));//等待发送完成
}
}
void uart0_Send_uchar(uchar data) //串口发送数据
{
UDR0=data;//发送数据
while(!(UCSR0A&0x20));//等待发送完成
}
void uart0_Send_uint(uint data) //串口发送数据
{
UDR0=data>>8;//发送数据
while(!(UCSR0A&0x20));//等待发送完成
UDR1=data;//发送数据
while(!(UCSR0A&0x20));//等待发送完成
}
/*
void uart0_Receive(void) //串口接受数据
{
for(uchar j=0;j<10;j++)
{
while(!(UCSR0A&0x80));//等待接收完成
PC_RecvBuf[j]=UDR0;//接收数据
}
}*/
//接收指定长度数据到接收缓冲区
void RecvFromPC(uchar size,uchar bwait)
{
pc_bRxdPos=0;
pc_bRxdLen=size;
if(bwait)
{
while(pc_bRxdLen>0);
}
}
//是否接收完成
uchar IsRecvComplete(void)
{
return pc_bRxdLen==0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -