• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

51单片机printf问题

skawu 2017-09-05 浏览量:1309

1、51单片机printf打印数字时,为何需要加一个U16的强制类型转换?单片机使用型号中颖SH88F6161

2、51单片机自定义可变参的打印函数Debug_printf(),需全部重写printf内部实现吗?

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 1.SH88F6161是个8位单片机,u16类型数据操作,编译器也会编译成8位运算模式。当然这和printf这个地方没关系。u16是不是你的程序需要啊?在这个单片机上u16也就比int范围大,如果实参是负数输出的是补码?我也不是很确定。。

    2.不用全部改,你可以写一个可变参数函数,里面调用printf

    • 发布于 2017-09-05
    • 举报
    • 评论 1
    • 0
    • 0
skawu 回复了 就是从这里掉出的:是8位单片机,但是直接发送8位数据用串口工具查看数据是错误的,用U16强制类型转换一下才正确 回复

其他答案 数量:4
  • 没用过SH88F6161

    但是stc的printf使用如下:

    //#include <STC15F2K60S2.H>
    #include <REG52.H>
    #include <stdio.h> 
    
    #define FOSC 11059200L          //系统频率
    #define BAUD 115200             //串口波特率
    
    void delay_ms(xms);  
    void InitUART();
    
    void main()  
    {  
       InitUART(); //初始化串口
        while(1)  
        { 
    			
    			printf("OK!\n");
    			delay_ms(500);
        }  
    } 
    //毫秒延时函数  
    void delay_ms(unsigned int xms)  
    {  
        unsigned char i;  
        
          for(xms;xms>0;xms--)  
          for(i=110;i>0;i--);  
       
    }  
    void InitUART(void)//使用定时器1作为串口波特率发生器  
    { 
    //	SCON = 0x50;		//8位数据,可变波特率
    //	T2L = (65536 - (FOSC/4/BAUD));   //设置波特率重装值
    //	T2H = (65536 - (FOSC/4/BAUD))>>8;
    //	AUXR = 0x14;                //T2为1T模式, 并启动定时器2
    //	AUXR |= 0x01;               //选择定时器2为串口1的波特率发生器
    //	ES = 1;                     //使能串口1中断
    //	EA = 1;
    //	
    //	TI=1;//使用printf必须添加 
    	
    	
    		TMOD=0x20;//即0010 0000,定时器/计数器1,工作方式2  
        TH1=0xfd;//设置波特率为9600  
        TL1=0xfd;  
        TR1=1;//启动定时器/计数器1  
          
        SCON=0x50; //0101 0000.串口工作方式1,允许串行控制  
        PCON=0x00;//设置SMOD=0  
        IE=0x90; //CPU允许中断,串行允许中断  
          
        TI=1;//直接使用printf必须加入此句才能实现发送  	
    
    }  
    

    • 发布于2017-09-05
    • 举报
    • 评论 0
    • 0
    • 0

  • 1、应该是你得到的数字需要强制类型转换

    2、不需要

    • 发布于2017-09-05
    • 举报
    • 评论 0
    • 0
    • 0

  • 1. 這轉換是否需要看您的Code才知道

    2. 您只要自定義函數中內部使用printf就可


    • 发布于2017-09-05
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个与厂家提供的函数库的实现有关
    • 发布于2017-09-06
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

51单片机printf问题