51单片机 printf函数 调试程序

发布者:自由探索最新更新时间:2020-05-13 来源: eefocus关键字:51单片机  printf函数  调试程序 手机看文章 扫描二维码
随时随地手机看文章

主要分三个部分(1)51单片机程序部分;(2)keil工具部分;(3)为何printf输出为串口。


(1)51单片机程序部分


#include

#include

 

void InitUART(void)//使用定时器1作为串口波特率发生器

{

    TH1 = 0xF3; //晶振12mhz 波特率串口上设为2400才不显示乱码代码是4800

    TL1 = TH1;

    TMOD |= 0x20; //定时器1方式2

    SCON = 0x50; //串口接收使能

    ES = 1; //串口中断使能

    TR1 = 1; //定时器1使能

    TI = 1; //发送中断标记位,必须设置

}

//毫秒延时函数

void delay_ms(unsigned int t)

{

    unsigned char a,b;

    while(t--)

    {

      for(b=102;b>0;b--)

      for(a=3;a>0;a--);

    }

}

 

void main()

{

    InitUART(); //初始化串口

    EA = 1;   //开总中断

    while(1)

    {

        delay_ms(500);

        printf("hellon");//串口打印结果

    }

 }


代码部分注意事项:


代码中包含 头文件#include,其中包含printf函数;

串口初始化时,TI = 1;


(2)keil设置显示串口输出结果


在C51中、printf和scanf函数主要用于串行数据的收发


有时在进行软件调试的时候,需要使用printf函数输出一些结果


要在Keil中看到这些结果,只需要两步:(当然首先要进入调试界面再做以下两步)


1  设置

打开Peripherals-->Serial窗口,选择IRQ中的TI、RI两个选项


2  打开输出窗口

打开View-->Serial Window #1窗口


在程序中的printf语句的输出就显示在这个窗口中


现在就到程序窗口运行程序、运行结束后打开Serial窗口就可以看到printf的输出了。


(3)为何printf从串口输出


查看了keil的帮助文件里面的printf函数说明,原来printf函数最终是调用putchar函数来实现打印输出字符的。


KeilC51LIB文件夹里面找到了putchar.c文件,putchar函数使用TI和SBUF,确定为串口终端输出。


注意:printf重定向功能,即用户自己定义putchar函数,例如


//UART1 发送串口数据

void UART1_SendData(char dat)

{

    ES=0;           //关串口中断

    SBUF=dat;           

    while(TI!=1);   //等待发送成功

    TI=0;           //清除发送中断标志

    ES=1;           //开串口中断

}

 

//UART1 发送字符串

void UART1_SendString(char *s)

{

    while(*s)//检测字符串结束符

    {

        UART1_SendData(*s++);//发送当前字符

    }

}

 

//重写putchar函数

char putchar(char c)

{

    UART1_SendData(c);

    return c;

}

关键字:51单片机  printf函数  调试程序 引用地址:51单片机 printf函数 调试程序

上一篇:关于51单片机使用printf串口调试
下一篇:基于51 单片机的串口收发数据

推荐阅读最新更新时间:2024-11-10 16:27

基于51单片机的等精度频率计设计
设计以51单片机为核心,显示采用1602液晶。频率测量方法采用等精度频率法测量,外部脉冲作为内部高速脉冲计数的启动信号,也是最后的计数的结束信号。保证外部脉冲计数的无误差,通过内部的高速计数保证测量精度。 等精度频率计ppt: 仿真原理图如下(proteus仿真工程文件可到本帖附件中下载): 单片机源程序如下: #include STC12C5A60S2.H #include Intrins.h #include 1602.h unsigned char t0_hh,t1_hh; unsigned char dis_buf ; //unsigned char code frequence ={ frequence:
[单片机]
基于<font color='red'>51单片机</font>的等精度频率计设计
基于51单片机的正弦信号发生器的设计
正弦信号是电子电路设计中非常重要的信号之一。在很多电子设备和系统中,需要正弦信号作为输入源。基于51单片机的正弦信号发生器设计是一种较为简单且常见的方法。本文将详细介绍如何设计一个基于51单片机的正弦信号发生器。 一、51单片机简介 51单片机是以英特尔公司的MCS-51单片机为核心的一族单片机,主要用于嵌入式系统和电子设备上。51单片机内部集成了CPU、RAM、ROM、计时器、串行通信接口等功能模块,具有较强的实时控制能力和通用性。 二、正弦信号的生成原理 正弦信号是一种周期性连续信号,可由谐振电路或数字信号处理的方法生成。在本文中,我们采用数字信号处理的方法来生成正弦信号。 数字信号的表示 在51单片机中,数字信号是
[单片机]
51单片机实现对24C02进行页写、顺序读取并显示验证
//************************************************************************************* //**程序名称:51单片机实现对24C02进行页写、顺序读取并显示验证 //**编写人:**** //**修改人:**** //**程序目的:熟悉I2C总线协议,实现51模拟I2C时序和24C02通信 //**功能描述:51单片机将8个字节数据写入24C02的一页中,然后顺序读出,每隔1秒送P0口LED显示 //**其他说明:本程序是采用某51开发板,若在其他地方验证可更改相关端口及延时程序等。 //** 程序编写前曾参考过多个教程,最终自己编程通过,并详
[单片机]
51单片机复习004 -- HD44780控制的1602LCD
1、HD44780控制的1602LCD : 也称1602字符型液晶 1602 : 即每行最多有16个字符的显示位,共有2行。 显示字符的位与位之间存在间隔,所以一般不用1602LCD显示图片 (主要是效果不好) 每个显示位分为 5*7点阵 和 5*11点阵,我学习时用的是5*7点阵的LCD 2、HD44780控制的1602LCD的外观、引脚、内部资源 3、基本时序和11条操作指令
[单片机]
<font color='red'>51单片机</font>复习004 -- HD44780控制的1602LCD
51单片机和OLED仿真 芯片SSD1306
用的是7Pin的OLED,就那个宝买的那种。用的是不是中景园的程序我就不知道了。芯片应该是用SSD1306,但是用仿真里面的SSD1306总是不对。我随便试了试SSD1308到时对了! 单片机源程序如下 #include xianshispi.h #include oledfont.h void delay_ms(unsigned int ms) { unsigned int a; while(ms) { a=1800; while(a--); ms--; } return; } void OLED_WR_
[单片机]
<font color='red'>51单片机</font>和OLED仿真 芯片SSD1306
51单片机lcd1602
{ Uchar i; for (i=0;i 16;i++) { DispOneChar(i,1,dd++); dd &= 0x7f; if (dd 32) dd=32; } } // 显示光标定位 void LocateXY( char posx,char posy) { Uchar temp; temp = posx & 0xf; posy &= 0x1; if ( posy )temp |= 0x40; temp |= 0x80; LcdWriteCommand(temp,0); } // 按指定位置显示数出一个字符 void DispOneChar(Uchar x,Uchar y,Uchar Wd
[单片机]
51单片机的复位电路
1、基本复位电路 复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后, 撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号, 以防电源开关或电源插头分-合过程中引起的抖动而影响复位。图1所示的 RC复位电路可以实现上述基本功能,图3为其输入-输出特性。但解决不了 电源毛刺(A点)和电源缓慢下降(电池电压不足)等问题 而且调整 RC 常数改变延时会令驱动能力变差。左边的电路为高电平复位有效 右边为低电平Sm为手动复位开关 Ch可避免高频谐波对电路的干扰 图1 RC复位电路 图2所示的复位电路增加了二极管,在电源电压瞬间下降时使电容迅速放电, 一定宽度的电源毛刺也可令系统可靠复位。 图3所示复位电
[单片机]
C51单片机与PC串口通信的单片机部分程序
注意波特率是9600 功能:电脑通过串口给单片机发一个字节,单片机收到后又给电脑发回去 、#include #define uchar unsigned char #define uint unsigned int uint temp; bit flag; void init_ser1(); main() { init_ser1(); while(1) { if(RI==1) { P1=SBUF; RI=0; } if(flag==1) { ES=0;//暂时关闭接收 flag=0; SBUF=temp; while(!TI);//等待发送完毕 TI=0; ES=1; } } } void sel() interrup
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved