// 添加頭文件
#include "stdio.h"
#include "stdarg.h"
//全局變量
bit TI_busy;
unsigned char idata putBuf[100]; //最大數量
/* idata注釋:
定義一個字節型的變量,這個變量保存在RAM的idata區.單片機的存儲主要分為四個區域:data、idata、code、xdata。
data區:單片機能直接訪問的 直接尋址RAM區,00H-7FH
idata區:單片機間接防問的RAM區,80H-FFH
code區:單片機的內部程序存儲區,也就是單片機內置的FALSH
xdata區:單片機外部尋址區,一般指片外的存儲器,0000H-FFFFH
data區:單片機能直接訪問的 直接尋址RAM區,00H-7FH
idata區:單片機間接防問的RAM區,80H-FFH
code區:單片機的內部程序存儲區,也就是單片機內置的FALSH
xdata區:單片機外部尋址區,一般指片外的存儲器,0000H-FFFFH
*/
// 串口打印函數實現
void debug_printf(char* fmt,...)
{
unsigned char i,len;
va_list ap; //定義變量為字符指針
va_start(ap, fmt); //獲取可變參數列表的第一個參數的地址
len = vsprintf((char*)putBuf, fmt, ap); //將可變列表拷貝至緩沖區
va_end(ap); //清空va_list可變參數列表
for(i = 0; i < len; i++) //把緩存內的字符發送出去
{
while( TI_busy ); //等待前面的數據發送完成
TI_busy = 1;
SBUF = putBuf[i]; //發送一個字節
}
memSet(putBuf, 0, sizeof(putBuf)); //清空緩存(自己實現)
}
//main入口函數
void main()
{
unsigned int i;
UartInit(); //串口初始化
EA=1; //開總中斷
while(1)
{
debug_printf(" Hello World ! ");
debug_printf(" i = %03d, 0x%03X\r\n", i, i++);
delayMs(1000);
}
}
//中斷處理函數
void Uart1() interrupt 4
{
if(RI) //接收
RI = 0; //清標志
else //發送
{
TI = 0; //清標志
TI_busy = 0; //非忙
}
}