📄 uart_module.c.bak
字号:
/********************************************************/
/*UART_MODULE.c*/
/********************************************************/
/* 模块:UART_MODULE */
/* 描述:串口初始化模块 */
/* 注意:使用前需要先定义串口波特率,如: */
/* //定义串口波特率为115200 */
/* #define UART_BPS 115200 */
/* */
/* 处理器: */
/* 调用函数: */
/* 版本历史: */
/* V1.0 */
/* 作者: */
/* 日期: */
/* 修改原因: */
/********************************************************/
#include "config.h"
const ary[511]=
{
FA BE 00 7C BF 00 7A B9 00 01 FC 0E 1F 0E 07 F3 A5 EA 16
7A 00 00 BB BE 7B 33 C9 80 3F 80 75 06 FE C5 8B F3 EB 07
80 3F 00 75 02 FE C1 83 C3 10 81 FB FE 7B 72 E5 83 F9 04
74 0B 81 F9 03 01 74 0A BB A5 7A EB 2C BB 87 7A EB 27 8B
4C 02 8B 14 B8 01 02 BB 00 7C CD 13 73 05 BB BC 7A EB 13
2E A1 FE 7D 3D 55 AA 74 05 BB BC 7A EB 05 EA 00 7C 00 00
2E 8A 07 3C 00 74 0C 53 BB 07 00 B4 0E CD 10 5B 43 EB ED
EB FE 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 80 02 06 00 06 1F FF C6 83 00
00 00 9D BE 1D 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55
}
/*F_UART0_Init****************************************/
/* 函数名:UART0_Init() */
/* 参数: 无 */
/* 返回值:无 */
/* 作用域: */
/* 功能: 初始化串口0 */
/********************************************************/
void UART0_Init(void)
{
U0LCR=(ULCR_num|0x80);//设置串口模式并使能访问除数锁存
U0DLM=UDLM_num;//设置除数锁存器,该值在config.h中预定义
U0DLL=UDLL_num;
U0FDR=UFDR_num;
U0LCR=ULCR_num;//设置串口模式并禁止访问除数锁存
U0FCR=0x01;//使能FIFO,触发点为1个字符
U0IER=0x01;//允许RBR中断
}
/* End of F_UART0__Init********************************/
/*F_UART0_GetByte****************************************/
/* 函数名:UART0_GetByte() */
/* 参数: 无 */
/* 返回值:接收到的数据 */
/* 作用域: */
/* 功能: 从串口接收1字节数据 */
/********************************************************/
uint8 UART0_GetByte (void)
{
uint8 rcv_dat=0;
while((U0LSR & 0x01) == 0);//等待有效数据
rcv_dat = U0RBR;
return (rcv_dat);
}
/* End of F_UART0_GetByte********************************/
/*F_UART0_GetStr*****************************************/
/* 函数名: */
/* 参数: s 指向接收数据数组的指针 */
/* n 接收的个数 */
/* 返回值: 无 */
/* 作用域: */
/* 功能: 从串口接收 */
/********************************************************/
void UART0_GetStr (uint8 *s, uint32 n)
{
for ( ; n>0; n--)
{
*(s++) = UART0_GetByte();
}
*(s++) = '\0';
}
/* End of F_UART0_GetStr*********************************************/
/*F_UART0_SendByte*****************************************************/
/* 函数名:UART0_SendByte() */
/* 参数: dat 要发送的数据 */
/* 返回值:无 */
/* 作用域: */
/* 功能: 向串口发送字节数据,并等待发送完毕,查询方式 */
/********************************************************/
void UART0_SendByte (uint8 dat)
{
U0THR = dat;
while ((U0LSR & 0x40) == 0); // 等待数据发送完毕
}
/* End of F_UART0_SendByte*********************************************/
/*F_UART0_SendStr*****************************************************/
/* 函数名:UART0_SendStr() */
/* 参数: str 要发送的字符串的指针 */
/* 返回值:无 */
/* 作用域: */
/* 功能: 向串口发送一字符串 */
/********************************************************/
void UART0_SendStr (uint8 const *str)
{
while (1)
{
if (*str == '\0') break; // 遇到结束符,退出
UART0_SendByte(*str++); // 发送数据
}
}
/* End of F_UART0_SendStr*********************************************/
/*
以字节方式接收一个字符串,并保存到静态数组中(收到一个字节,判断命令接收数组是否已满,
未满即判断是否为0x0D或0x0A,是回车符则不回显并将0x0D改为0x00,既不是回车也不是换行则存储后立刻回显)。
然后判断数组中的字符串是否是预定义的命令,是则执行,不是则回显:
输入命令错误,请重新输入。
*/
__irq void UART0_SERV(void)
{
char *ptr;
static uint8 rcv_ary[512];
uint16 ctr;
uint8 rcv_byte;
static char cmd_str[10]={0x00};//声明一个静态命令接收数组,可以存放8位字节的命令。cmd_str[0]中存放空字节
static uint8 str_ptr=1;//命令接受数组cmd_str[]的数组指针,静态变量。
while(U0LSR&1==0x01)
{
rcv_byte=UART0_GetByte();//字节接收存储器
if(str_ptr<10) //判断命令接收数组是否已满
{
if(rcv_byte!=0x0D)//判断数据是否为回车符
{
cmd_str[str_ptr]=rcv_byte;
UART0_SendByte(rcv_byte);
str_ptr++;
}
else if(rcv_byte==0x0D)//若接收到的字节为回车符,存储不回显
{
cmd_str[str_ptr]=0x00;
ptr=&cmd_str[1];
if(strcmp(ptr,"$SDINIT")==0)
{
UART0_SendStr("\r\n");
UART0_SendStr(">");
UART0_SendStr("你发送给我的命令是:$SDINIT.\r\n");
rcv_byte=SD_Initialize();
UART0_SendByte(rcv_byte);
UART0_SendStr("\r\n");
UART0_SendStr("请发送给我新的命令\r\n");
UART0_SendStr(">");
str_ptr=1;
}
else if(strcmp(ptr,"$SDRB")==0)
{
UART0_SendStr("\r\n");
UART0_SendStr(">");
UART0_SendStr("你发送给我的命令是:$SDRB.\r\n");
if(SD_ReadBlock(0,rcv_ary))
UART0_SendStr("块读失败");
else
{
UART0_SendStr("块读成功!\r\n");
for(ctr=0;ctr<511;ctr++)
{
UART0_SendByte(rcv_ary[ctr]);
}
}
if(SD_WriteBlock(0,ary))
UART0_SendStr("块写失败");
else
{
UART0_SendStr("块写成功!\r\n");
}
if(SD_ReadBlock(0,rcv_ary))
UART0_SendStr("块读失败");
else
{
UART0_SendStr("块读成功!\r\n");
for(ctr=0;ctr<511;ctr++)
{
UART0_SendByte(rcv_ary[ctr]);
}
}
/* for(ctr=0;ctr<511;ctr++)
{
UART0_hex2char(rcv_ary[ctr]);
}
*/
UART0_SendStr("\r\n");
UART0_SendStr("请发送给我新的命令\r\n");
UART0_SendStr(">");
str_ptr=1;
}
else if(strcmp(ptr,"$ULSR")==0)
{
UART0_SendStr("\r\n");
UART0_SendStr(">");
UART0_SendStr("你发送给我的命令是:$ULSR.\r\n");
UART0_SendStr("U0LSR=0x");
UART0_hex2char(U0LSR);
UART0_SendStr("\r\n");
UART0_SendStr("请发送给我新的命令\r\n");
UART0_SendStr(">");
str_ptr=1;
}
else
{
UART0_SendStr("命令错误1,请重新输入!");
UART0_SendStr("\r\n");
UART0_SendStr(">");
str_ptr=1;
}
}
}
else//接收数组已满,但还未接收到回车换行符,说明命令错误
{
UART0_SendStr("命令错误3,请重新输入!");
UART0_SendStr("\r\n");
UART0_SendStr(">");
str_ptr=1;
}
}
VICVectAddr=0;
}
//将一个十六进制表示的数从串口终端显示出来
void UART0_hex2char(uint8 num_hex)
{
UART0_SendByte(num_hex/16+48);
UART0_SendByte(num_hex%16+48);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -