// 添加头文件 #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 */   // 串口打印函数实现  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;      //非忙   }  }
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄