// 添加头文件
#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
", i, i++);
delayMs(1000);
}
}
//中断处理函数
void Uart1() interrupt 4
{
if(RI) //接收
RI = 0; //清标志
else //发送
{
TI = 0; //清标志
TI_busy = 0; //非忙
}
}