|
USART.lib ,串口函数库 for CVAVR
点击此处下载armok01123008.rar
/******************************************************************/
/* USART Library
/*
/* Designed by Aleyn.wu
/* E-mail: Aleyn@e-midas.cn
/* Last Update:2005.10.16
/*
/******************************************************************/
#include <io.h>
#include <USART.h>
//#if funcused TransmitByte
void TransmitByte(unsigned char C)
{
while (!(UCSRA&(1<<UDRE)));
UDR=C;
}
//#endif
//#if funcused ReceiveByte
unsigned char ReceiveByte(void)
{
while (!(UCSRA&(1<<RXC)));
return UDR;
}
//#endif
#if funcused TransmitLine
void TransmitLine(char *s)
{
while (*s)
{
TransmitByte(*s);
s++;
}
TransmitByte(0x0d);
TransmitByte(0x0a);
}
#endif
#if funcused TransmitLineF
void TransmitLineF(flash char *s)
{
while (*s)
{
TransmitByte(*s);
s++;
}
TransmitByte(0x0d);
TransmitByte(0x0a);
}
#endif
#if funcused TransmitString
void TransmitString(char *s)
{
while (*s)
{
TransmitByte(*s);
s++;
}
}
#endif
#if funcused TransmitStringF
void TransmitStringF(flash char *s)
{
while (*s)
{
TransmitByte(*s);
s++;
}
}
#endif
#if funcused USART_Init
void USART_Init(unsigned char BaudRate)
{
UCSRB = 0x00; //disable while setting baud rate
UCSRA = 0x00;
UCSRC = 0x00;
UCSRB=(1<<RXEN)|(1<<TXEN);
#ifndef _MEGA128_INCLUDED_
UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
#else
UCSRC=(1<<UCSZ1)|(1<<UCSZ0);
#endif
UBRRL=BaudRate;
UBRRH=0;
//UBRR=BaudRate;
}
#endif
#if funcused TestRate
void TestRate(void)
{
unsigned char i;
int j;
i=0;
while (i<255)
{
USART_Init(i);
TransmitString("RATE");
TransmitByte(i);
i++;
for (j=1;j<65535;j++);
}
}
#endif
#if funcused ReceiveCMD
/***************************************************************/
// ReceiveCMD 函数
// 从USART中读取一条命令字符串
// 参数:
// CmdBuf: 命令串缓冲区
// MaxCmdBuf:缓冲区最大长度
// 返回:
// CmdBuf,如果命令读取成功,则CmdBuf[0]不为0,否则为0.
/***************************************************************/
void ReceiveCMD(unsigned char * CmdBuf)
{
unsigned char Cmd; //读取一个字节
unsigned char BufIdx; //命令缓冲区Index
unsigned int wait; //设置超时
if (UCSRA&(1<<RXC)) //串口有信息吗?
{
Cmd=UDR; //如果有,接收一个字节
BufIdx=1;
if (Cmd==CMD_BEGIN)
{
wait=0; //wait是做为命令串接收超时用的
while ((Cmd!=CMD_END)&&(BufIdx<15)) //如果 CMD不是命令结束符
{
if (UCSRA&(1<<RXC)) //如果串口有信息,就继续接收
{
Cmd=UDR;
if ((Cmd!=CMD_BEGIN)&&(Cmd!=CMD_END)&&(BufIdx<CMD_MAXBUFFER-1)) //如果不是命令开始符或命令结束符则
{
CmdBuf[BufIdx++]=Cmd; //保存命令到缓冲区
CmdBuf[0]=BufIdx-1; //写命令长度
}
wait=0;
}
else
{
wait++;
}
if (wait>=65530) //如果接收命令超时
{
CmdBuf[0]=0; //取消命令
BufIdx=1;
break;
}
}
if (BufIdx>=CMD_MAXBUFFER) //如果命令行太长
{
CmdBuf[0]=CMD_MAXBUFFER-1; //截止长度
BufIdx=1;
}
else
{
CmdBuf[0]=BufIdx-1; //设置长度
CmdBuf[BufIdx]=0;
}
}
}
}
#endif
#if funcused ReceiveString
/***************************************************************/
// ReceiveString 函数
// 从USART中读取一条命令字符串
// 参数:
// CmdBuf: 命令串缓冲区
// MaxCmdBuf:缓冲区最大长度
// 返回:
// CmdBuf,如果命令读取成功,则CmdBuf[0]不为0,否则为0.
/***************************************************************/
void ReceiveString(unsigned char * CmdBuf)
{
unsigned char Cmd; //读取一个字节
unsigned char BufIdx; //命令缓冲区Index
unsigned int wait; //设置超时
if (UCSRA&(1<<RXC)) //串口有信息吗?
{
Cmd=UDR; //如果有,接收一个字节
BufIdx=1;
if (Cmd!=0)
{
wait=0; //wait是做为命令串接收超时用的
CmdBuf[BufIdx]=Cmd; //保存命令到缓冲区
CmdBuf[0]=BufIdx++; //写命令长度
while ((Cmd!=0)&&(BufIdx<CMD_MAXBUFFER)) //如果 CMD不是命令结束符
{
if (UCSRA&(1<<RXC)) //如果串口有信息,就继续接收
{
Cmd=UDR;
if ((Cmd!=0)&&(BufIdx<CMD_MAXBUFFER-1)) //如果不是命令开始符或命令结束符则
{
CmdBuf[BufIdx]=Cmd; //保存命令到缓冲区
CmdBuf[0]=BufIdx++; //写命令长度
}
wait=0;
}
else
{
wait++;
}
if (wait>=65530) //如果接收命令超时
{
//CmdBuf[0]=0; //取消命令
//BufIdx=1;
break;
}
}
if (BufIdx>=CMD_MAXBUFFER) //如果命令行太长
{
CmdBuf[0]=CMD_MAXBUFFER-1; //截止长度
BufIdx=1;
}
else
{
CmdBuf[0]=BufIdx-1; //设置长度
CmdBuf[BufIdx]=0;
}
}
else
{CmdBuf[0]=0;}
}
else
{CmdBuf[0]=0;}
}
#endif
USART.lib ,串口函数库 for CVAVR
点击此处下载armok01123008.rar
-----此内容被aleyn于2006-07-12,08:32:51编辑过 |
|