?? 44blib.c
字號:
Uart_GetString(string);
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;
}
//***************************************************************************
/****************************************************************************
【功能說明】向串口發送一個字節的整型數
****************************************************************************/
void Uart_SendByte(int data)
{
if(whichUart==0)
{
if(data=='\n')
{
while(!(rUTRSTAT0 & 0x2));
Delay(10); //because the slow response of hyper_terminal
WrUTXH0('\r');
}
while(!(rUTRSTAT0 & 0x2)); //Wait until THR is empty.
Delay(5);
WrUTXH0(data);
}
else
{
if(data=='\n')
{
while(!(rUTRSTAT1 & 0x2));
Delay(10); //because the slow response of hyper_terminal
rUTXH1='\r';
}
while(!(rUTRSTAT1 & 0x2)); //Wait until THR is empty.
Delay(5);
rUTXH1=data;
}
}
//***************************************************************************
/****************************************************************************
【功能說明】向串口送出一串字符
****************************************************************************/
void Uart_SendString(const char *pt)
{
while(*pt)
Uart_SendByte(*pt++);
}
//***************************************************************************
/****************************************************************************
【功能說明】以標準輸出格式向串口輸出各種信息
****************************************************************************/
//if you don't use vsprintf(), the code size is reduced very much.
void Uart_Printf(const char *fmt,...)
{
va_list ap;
char string[256];
va_start(ap,fmt);
vsprintf(string,fmt,ap);
Uart_SendString(string);
va_end(ap);
}
//***************************************************************************
/****************************************************************************
【功能說明】蜂鳴器鳴叫time個100us
****************************************************************************/
void Beep(unsigned int time)
{
rPDATE = (rPDATE | 0x08);
Delay(time); //延時若干個100us
rPDATE = (rPDATE & 0x1f7);
}
//***************************************************************************
/****************************************************************************
【功能說明】檢測四個按鍵,有任何一個按鍵按下就讓蜂鳴器鳴叫,否則不鳴叫
****************************************************************************/
void Key_Speaker(void)
{
unsigned int m;
m = rPDATG;
if((m & 0xf8) < 0xf8) {rPDATE = (rPDATE | 0x08);}
else {rPDATE = (rPDATE & 0x1f7);}
}
//***************************************************************************
/****************************************************************************
【功能說明】四個LED 點亮/熄滅狀態設置(LedStatus低四位電平高低對應著四個LED亮/熄)
****************************************************************************/
void Led_Set(int LedStatus)
{
if((LedStatus&0x01)==0x01) //PE7狀態設置
rPDATE=rPDATE&0x17f;
else
rPDATE=rPDATE|0x80;
if((LedStatus&0x02)==0x02) //PE6狀態設置
rPDATE=rPDATE&0x1bf;
else
rPDATE=rPDATE|0x40;
if((LedStatus&0x04)==0x04) //PE5狀態設置
rPDATE=rPDATE&0x1df;
else
rPDATE=rPDATE|0x20;
if((LedStatus&0x08)==0x08) //PE4狀態設置
rPDATE=rPDATE&0x1ef;
else
rPDATE=rPDATE|0x10;
}
//***************************************************************************
/****************************************************************************
【功能說明】LED來回閃爍顯示
****************************************************************************/
void Led_Disp(void)
{
rPDATE = (rPDATE | 0x08); //蜂鳴器開始鳴叫
Led_Set(0x08); //LED點亮/熄滅狀態設置
Delay(400); //延時若干個100us
Led_Set(0x04); //LED點亮/熄滅狀態設置
Delay(400); //延時若干個100us
Led_Set(0x02); //LED點亮/熄滅狀態設置
Delay(400); //延時若干個100us
Led_Set(0x01); //LED點亮/熄滅狀態設置
Delay(400); //延時若干個100us
Led_Set(0x02); //LED點亮/熄滅狀態設置
Delay(400); //延時若干個100us
Led_Set(0x04); //LED點亮/熄滅狀態設置
Delay(400); //延時若干個100us
Led_Set(0x08); //LED點亮/熄滅狀態設置
Delay(400); //延時若干個100us
Led_Set(0x00); //LED點亮/熄滅狀態設置
rPDATE = (rPDATE & 0x1f7); //蜂鳴器停止鳴叫
}
//***************************************************************************
/****************************************************************************
【功能說明】定時器啟動
****************************************************************************/
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);
}
//***************************************************************************
/****************************************************************************
【功能說明】定時器停止
****************************************************************************/
int Timer_Stop(void)
{
// int i;
rWTCON=((MCLK/1000000-1)<<8);
return (0xffff-rWTCNT);
}
//***************************************************************************
/****************************************************************************
【功能說明】鎖相環設置,修改系統主頻
Fout = (8 + M_DIV) * Fin / [ (2+P_DIV) * (2^S_DIV) ]
****************************************************************************/
void ChangePllValue(int mdiv,int pdiv,int sdiv)
{
int i = 1;
rPLLCON = (mdiv << 12) | (pdiv << 4) | sdiv;
while(sdiv--)
i *= 2;
MCLK = (EXT_OSC_CLK*(mdiv+8))/((pdiv+2)*i);
}
//***************************************************************************
/****************************************************************************
【功能說明】
****************************************************************************/
void * malloc(unsigned nbyte)
/*Very simple; Use malloc() & free() like Stack*/
//void *mallocPt=Image$$RW$$Limit;
{
void *returnPt=mallocPt;
mallocPt= (int *)mallocPt+nbyte/4+((nbyte%4)>0); //to align 4byte
if( (int)mallocPt > HEAPEND )
{
mallocPt=returnPt;
return NULL;
}
return returnPt;
}
//***************************************************************************
/****************************************************************************
【功能說明】
****************************************************************************/
void free(void *pt)
{
mallocPt=pt;
}
//***************************************************************************
/****************************************************************************
【功能說明】
****************************************************************************/
void Cache_Flush(void)
{
int i,saveSyscfg;
saveSyscfg=rSYSCFG;
rSYSCFG=SYSCFG_0KB;
for(i=0x10004000;i<0x10004800;i+=16)
{
*((int *)i)=0x0;
}
rSYSCFG=saveSyscfg;
}
//***************************************************************************
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -