📄 uart._c
字号:
#include <iom16v.h>
#include "Uart.h"
#include "Crc.h"
//============================================================
//函 数:void Uart_PutChar(unsigned char Data)
//功 能:发送一个字符
//入口参数:发送的字符数据
//返 回 值:无
//设 计 者:覃道堂
//创作时间:2006-03-16
//修改时间:
//修改目的:
//============================================================
void Uart_PutChar(unsigned char Data)
{
//while(!(UCSRA & 0x20));
while ( !( UCSRA & (1<<UDRE)) );
UDR = Data;
}
//============================================================
//函 数:int Uart_GetChar(void)
//功 能:接收一个字符
//入口参数:无
//返 回 值:返回-1接受数据错误,否则为接收到的一个字符数据
//设 计 者:覃道堂
//创作时间:2006-03-16
//修改时间:
//修改目的:
//============================================================
int Uart_GetChar(void)
{
unsigned char status,res;
if(!(UCSRA&(1<<RXC)))
return -1;
status = UCSRA;
res = UDR;
if ( status & (1<<FE)|(1<<DOR)|(1<<PE) )//if(status & 0x1c)//数据益处,数据贞错误,校验错误
return -1;
else
return res;
}
//============================================================
//函 数:void Uart_Send_Frame(unsigned char *Frame, int Len)
//功 能:发送一个字符串
//入口参数:*Frame发送一个字符串数据,Len发送的长度
//返 回 值:无
//设 计 者:覃道堂
//创作时间:2006-03-16
//修改时间:
//修改目的:
//============================================================
void Uart_Send_Frame(unsigned char *Frame, int Len)
{
while(Len > 0)
{
Uart_PutChar(*Frame);
Frame ++;
Len --;
}
}
//============================================================
//函 数:unsigned char Uart_Receive_Frame(unsigned char *Frame,
// int OverTime)
//功 能:接收一个字符串
//入口参数:*Frame接收一个字符串数据存放地址,OverTime超时时间
//返 回 值:无
//设 计 者:覃道堂
//创作时间:2006-03-16
//修改时间:
//修改目的:
//============================================================
unsigned char Uart_Receive_Frame(unsigned char *Frame,int OverTime)
{
int ByteData;
int TimerCount = 0;
int ReceiveLen = 0;
int Len = 255;
while(ReceiveLen < Len)
{
while((ByteData = Uart_GetChar()) == -1)
{
if(TIFR& 0x02)
{
if(++TimerCount > OverTime)
return 0;//等待超时如果还没接收到数据,则返回数据长度0
TIFR=TIFR|0x02;
}
}
Frame[ReceiveLen] = (unsigned char)ByteData;
if(ReceiveLen == 0x04)
Len = Frame[ReceiveLen] + 0x02;
ReceiveLen ++;
TimerCount = 0;
}
return ReceiveLen;
}
//============================================================
//函 数:void PC_Send_Err(unsigned char Ret,unsigned char *SendBuf)
//功 能:向PC返回执行结果
//入口参数:结果代码,发送缓冲区
//返 回 值:无
//设 计 者:覃道堂
//创作时间:2006-03-16
//修改时间:
//修改目的:
//============================================================
void PC_Send_Err(unsigned char Err_Ret,unsigned char *SendBuf)
{
unsigned short Crc_Data;
SendBuf[0] = 0x45;
SendBuf[1] = 0x52;
SendBuf[2] = 0x00;
SendBuf[3] = 0x05;
SendBuf[4] = Err_Ret;
Crc_Data = CRC16(SendBuf,5);
SendBuf[5] = Crc_Data / 0x100;
SendBuf[6] = (unsigned char)Crc_Data;
Uart_Send_Frame(SendBuf, 7);
}
//============================================================
//函 数:void PC_Send_Ok(unsigned char *Ok_Frame,unsigned char Ok_Coad,
// unsigned char *SendBuf,int Len)
//功 能:向PC返回执行结果
//入口参数:发送数据,结果代码,发送缓冲区,发送数据长度
//返 回 值:无
//设 计 者:覃道堂
//创作时间:2006-03-16
//修改时间:
//修改目的:
//============================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -