51单片机也能用printf()函数进行调试

不知道各位刚入门51单片机的朋友们是不是和我一样,不清楚在工程中定义的变量值的变化是否和自己想的一致,刚学C语言的时候我们都能利用printf函数检查代码的运行情况,今天,我来介绍C51单片机如何使用printf函数,从而实现调试。

思路:将打印结果显示在串口助手上。

main函数代码如下:

#include <REGX51.H>
#include <delay.h>
#include <stdio.h>

void Uart_SendChar(unsigned char  dat)
{
    SBUF = dat; 
    while(!TI); 
    TI = 0; 
}

char putchar(char c)//重定向
{
    Uart_SendChar(c);
    return c;
}

void UART_init()    //设置串行通信 本晶振为11.0592MHZ,其他的就自己算一下应该设置多少
{
      TMOD = 0x20;
      TH1 = 0xfd;
      TL1 = 0xfd;  //波特率9600
      SM0 = 0;  
      SM1 = 1;   // 串口工作方式1 10位异步
      REN = 1;  //串口允许接收
      TR1 = 1;
      EA = 1;
      ES =1 ;  //串口中断
}
void main()
{
    UART_init();
    while(1)
    {
        printf("hello world");
        Delay(2000);
    }
}

代码解析:

串口初始化,实现单片机与PC端的通信。

void UART_init()    //设置串行通信 本晶振为11.0592MHZ
{
      TMOD = 0x20;
      TH1 = 0xfd;
      TL1 = 0xfd;  //波特率9600
      SM0 = 0;  
      SM1 = 1;   // 串口工作方式1 10位异步
      REN = 1;  //串口允许接收
      TR1 = 1;
      EA = 1;
      ES =1 ;  //串口中断
}

头文件<stdio.h>用于使用printf()函数。

头文件<delay.h>进行延时,代码可在生成器中自主生成,如下图:

在C语言中putchar函数只能输出单个字符,而printf函数可输出多个字符以及各种类型的数据;printf()函数在格式化输出的时候调用了putchar()函数,在头文件stdio.h中两个函数都有,我们需修改putchar函数,用SBUF接收输入的数据,则可传到PC端。以下两函数实现:

void Uart_SendChar(unsigned char  dat)
{
    SBUF = dat; 
    while(!TI); 
    TI = 0; 
}

char putchar(char c)//重定向
{
    Uart_SendChar(c);
    return c;
}

结果:

存在的疑问:

我想比如发送int m=15;printf("%d",m);此时m为整型,难道格式化输出的时候也用到putchar函数了吗?类型不一样也可以吗?经过实验,数据15可打印。

如果有朋友知道,非常期待您的解答。

掌握了此方法后,我们只需要利用一个串口调试器就可以打印数据,进而调试代码了。

文章如有不对的地方,期待您的指正。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

良辰353

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值