资源描述
#include "..\config.h"
#define UART_BPS 38400 /* 串口通信波特率 */
INT8U const send[]="0xfd 0x0a 0x00 0x01 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09\r\n";
/*********************************************************************************************************
** Function name: delayNS
** Descriptions: 延时函数
** input parameters: ulDly: 延时值
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void delayNS (INT32U ulDly)
{
INT32U i;
for (; ulDly > 0; ulDly--)
{
for (i = 0; i < 5000; i++);
}
}
/*********************************************************************************************************
** Function name: uartInit
** Descriptions: 串口初始化,设置为8位数据位,1位停止位,无奇偶校验,波特率为115200
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void uart0Init (void)
{
INT16U usFdiv;
U0LCR = 0x83; /* 允许设置波特率 */
usFdiv = (FPCLK / 16) / UART_BPS; /* 设置波特率 */
U0DLM = usFdiv / 256;
U0DLL = usFdiv % 256;
U0LCR = 0x03; /* 锁定波特率 */
U0FCR = 0x06;
}
/*********************************************************************************************************
** Function name: uart0GetByte
** Descriptions: 从串口接收1字节数据,使用查询方式接收
** input parameters: 无
** output parameters: 无
** Returned value: ucRcvData: 接收到的数据
*********************************************************************************************************/
INT8U uart0GetByte (void)
{
INT8U ucRcvData;
while ((U0LSR & 0x01) == 0); /* 等待接收标志置位 */
ucRcvData = U0RBR; /* 读取数据 */
return (ucRcvData);
}
/*********************************************************************************************************
** Function name: uart0GetStr
** Descriptions: 串口接收字符串
** input parameters: puiStr: 指向接收数据数组的指针
** ulNum: 接收数据的个数
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void uart0GetStr (INT8U *puiStr, INT32U ulNum)
{
for (; ulNum > 0; ulNum--)
{
*puiStr++ = uart0GetByte ();
}
}
/*********************************************************************************************************
** Function name: uart0SendByte
** Descriptions: 向串口发送子节数据,并等待数据发送完成,使用查询方式
** input parameters: ucDat: 要发送的数据
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void uart0SendByte (INT8U ucDat)
{
U0THR = ucDat; /* 写入数据 */
while ((U0LSR & 0x40) == 0); /* 等待数据发送完毕 */
}
/*********************************************************************************************************
** Function name: uart0SendStr
** Descriptions: 向串口发送字符串
** input parameters: puiStr: 要发送的字符串指针
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void uart0SendStr (INT8U const *puiStr)
{
while (1)
{
if (*puiStr == '\0')
{
break; /* 遇到结束符,退出 */
}
uart0SendByte (*puiStr++);
}
}
/*********************************************************************************************************
** Function name: uartInit
** Descriptions: 串口初始化,设置为8位数据位,1位停止位,无奇偶校验,波特率为9600
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void uartInit (void)
{
INT16U usFdiv;
U1LCR = 0x83; /* 允许设置波特率 */
usFdiv = (FPCLK / 16) / UART_BPS; /* 设置波特率 */
U1DLM = usFdiv / 256;
U1DLL = usFdiv % 256;
U1LCR = 0x03; /* 锁定波特率 */
U1FCR = 0x06;
}
/*********************************************************************************************************
** Function name: uart1GetByte
** Descriptions: 从串口接收1字节数据,使用查询方式接收
** input parameters: 无
** output parameters: 无
** Returned value: ucRcvData: 接收到的数据
*********************************************************************************************************/
INT8U uart1GetByte (void)
{
INT8U ucRcvData;
while ((U1LSR & 0x01) == 0); /* 等待接收标志置位 */
ucRcvData = U1RBR; /* 读取数据 */
return (ucRcvData);
}
/*********************************************************************************************************
** Function name: uart1GetStr
** Descriptions: 串口接收字符串
** input parameters: pucStr: 指向接收数据数组的指针
** ulNum: 接收数据的个数
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void uart1GetStr (INT8U *pucStr, INT32U ulNum)
{
for (; ulNum > 0; ulNum--){
*pucStr++ = uart1GetByte ();
}
}
/*********************************************************************************************************
** Function name: uart1SendByte
** Descriptions: 向串口发送子节数据,并等待数据发送完成,使用查询方式
** input parameters: ucDat: 要发送的数据
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void uart1SendByte (INT8U ucDat)
{
U1THR = ucDat; /* 写入数据 */
while ((U1LSR & 0x40) == 0); /* 等待数据发送完毕 */
}
/*********************************************************************************************************
** Function name: uart1SendStr
** Descriptions: 向串口发送字符串
** input parameters: puiStr: 要发送的字符串指针
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
void uart1SendStr (INT8U const *pucStr)
{
while (1){
if (*pucStr == '\0') break; /* 遇到结束符,退出 */
uart1SendByte (*pucStr++);
}
}
/*********************************************************************************************************
** Function name: main
** Descriptions: 串口查询方式接收发送数据。请用跳线冒短接JP14,全速运行程序用串口调试软件发送字
** 符串,并在接收窗口查看返回数据,波特率为115200,上位机一次需要发送20个字符。
** input parameters: 无
** output parameters: 无
** Returned value: 无
*********************************************************************************************************/
int main (void)
{
INT8U ucBuf[30] = {0};
targetInit(); /* 初始化目标板,切勿删除 */
pinInit(); /* 引脚初始化 */
PCONP = PCONP|0x18; /* 打开串口0,1功能 */
uart0Init (); /* 串口初始化 */
uartInit ();
while (1)
{
uart1GetStr(ucBuf, 1); /* 从串口接收字符串 */
delayNS(5);
uart0SendStr (ucBuf); /* 向串口发送字符串 */
delayNS(5);
uart0GetStr(ucBuf, 1); /* 从串口接收字符串 */
delayNS(5);
uart1SendStr (ucBuf); /* 向串口发送字符串 */
delayNS(5);
}
}
展开阅读全文