📄 44blib.c
字号:
char *string2 = string;
char c;
while ((c = Uart_Getch(port)) != '\r')
{
if (c == '\b')
{
if ((int)string2 < (int)string)
{
Uart_Printf(port,"\b \b");
string--;
}
}
else
{
*string++=c;
Uart_SendByte(c,port);
}
}
*string='\0';
Uart_SendByte('\n',port);
}
/*
*************************************************************************************************************
- 函数名称 : Uart_GetIntNum(void)
- 函数说明 : 得到串口初始号
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
int Uart_GetIntNum(char port)
{
char str[30];
char *string = str;
int base = 10;
int minus = 0;
int lastIndex;
int result = 0;
int i;
Uart_GetString(string,port);
if (string[0] == '-')
{
minus = 1;
string++;
}
if (string[0]=='0' && (string[1]=='x' || string[1]=='X'))
{
base = 16;
string += 2;
}
lastIndex = strlen(string) - 1;
if (string[lastIndex]=='h' || string[lastIndex]=='H')
{
base = 16;
string[lastIndex] = 0;
lastIndex--;
}
if (base == 10)
{
result = atoi(string);
result = minus ? (-1*result):result;
}
else
{
for (i=0;i<=lastIndex;i++)
{
if (isalpha(string[i]))
{
if (isupper(string[i]))
result = (result<<4)+string[i]-'A'+10;
else
result = (result<<4)+string[i]-'a'+10;
}
else
{
result = (result<<4)+string[i]-'0';
}
}
result = minus ? (-1*result):result;
}
return result;
}
/*
*************************************************************************************************************
- 函数名称 : Uart_SendByte(int data)
- 函数说明 : 串口发送字节
- 输入参数 : data
- 输出参数 : 无
*************************************************************************************************************
*/
void Uart_SendByte(int data,char port)
{
if (port == 0)
{
if (data == '\n')
{
while(!(rUTRSTAT0 & 0x2));
//Delay(1); //由于高端的较慢响应
WrUTXH0('\r');
}
while(!(rUTRSTAT0 & 0x2)); //一直等到 THR 为空
//Delay(1);
WrUTXH0(data);
}
else
{
if(data=='\n')
{
while(!(rUTRSTAT1 & 0x2));
//Delay(10); //由于高端的较慢响应
rUTXH1='\r';
}
while(!(rUTRSTAT1 & 0x2)); //一直等到 THR 为空
//Delay(10);
rUTXH1=data;
}
}
/*
*************************************************************************************************************
- 函数名称 : Uart_SendString(char *pt)
- 函数说明 : 串口发送字符串
- 输入参数 : pt
- 输出参数 : 无
*************************************************************************************************************
*/
void Uart_SendString(char *pt,char port)
{
while(*pt)
Uart_SendByte(*pt++,port);
}
/*
*************************************************************************************************************
- 函数名称 : Uart_Printf(char *fmt,...)
- 函数说明 : 串口打印字符
- 输入参数 : fmt ...
- 输出参数 : 无
*************************************************************************************************************
*/
void Uart_Printf(char port,char *fmt,...) //如果您不使用 vsprintf(), 代码量将大幅减少
{
va_list ap;
char string[256];
va_start(ap,fmt);
vsprintf(string,fmt,ap);
Uart_SendString(string,port);
va_end(ap);
}
/*
*************************************************************************************************************
- 函数名称 : ChangePllValue(int mdiv,int pdiv,int sdiv)
- 函数说明 : 改变PLL的值
- 输入参数 : int mdiv,int pdiv,int sdiv
- 输出参数 : 无
*************************************************************************************************************
*/
void ChangePllValue(int mdiv,int pdiv,int sdiv)
{
rPLLCON = (mdiv<<12)|(pdiv<<4)|sdiv;
}
/*
*************************************************************************************************************
- 函数名称 : malloc
- 函数说明 : 动态分配函数
- 输入参数 : nbyte
- 输出参数 : 无
*************************************************************************************************************
*/
void * malloc(unsigned nbyte)
{
void *returnPt=mallocPt;
mallocPt = (int *)mallocPt + nbyte/4 + ((nbyte%4)>0); //对齐4字节
if ((int)mallocPt > HEAPEND)
{
mallocPt = returnPt;
return NULL;
}
return returnPt;
}
/*
*************************************************************************************************************
- 函数名称 : free
- 函数说明 : 动态释放函数
- 输入参数 : *pt
- 输出参数 : 无
*************************************************************************************************************
*/
void free(void *pt)
{
mallocPt=pt;
}
/*
*************************************************************************************************************
- 函数名称 : Cache_Flush(void)
- 函数说明 : 高速缓存清空
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void Cache_Flush(void)
{
int i,saveSyscfg;
saveSyscfg = rSYSCFG;
rSYSCFG = SYSCFG_0KB; //把CACHE变为内部RAM
for (i=0x10004000;i<0x10004800;i+=16)
{
*((int *)i) = 0x0;
}
rSYSCFG = saveSyscfg;
}
/*
*************************************************************************************************************
- 函数名称 : Timer_Start
- 函数说明 : 启动定时器
- 输入参数 : divider
- 输出参数 : 无
*************************************************************************************************************
*/
void Timer_Start(int divider) //0:16us,1:32us 2:64us 3:128us
{
rWTCON = ((MCLK/1000000-1)<<8)|(divider<<3);
rWTDAT = 0xffff;
rWTCNT = 0xffff;
// 1/16/(65+1),nRESET & interrupt disable
rWTCON = ((MCLK/1000000-1)<<8)|(divider<<3)|(1<<5);
}
/*
*************************************************************************************************************
- 函数名称 : Timer_Stop
- 函数说明 : 停止定时器
- 输入参数 : 无
- 输出参数 : (0xffff-rWTCNT)
*************************************************************************************************************
*/
int Timer_Stop(void)
{
rWTCON = ((MCLK/1000000-1)<<8);
return (0xffff-rWTCNT);
}
/*
*************************************************************************************************************
*- 结束文件 -*
*************************************************************************************************************
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -