找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5725|回复: 28
收起左侧

51单片机printf函数的使用

  [复制链接]
ID:568114 发表于 2021-2-16 14:48 | 显示全部楼层 |阅读模式
为了参加蓝桥杯的比赛学习51单片机,突发奇想51单片机能不能使用printf函数,总结整理希望大家能用到
#include "STC15F2K60S2.H"
#include "stdio.h"
void delay();
void UartInit(void)                //9600bps@11.0592MHz
{
        SCON = 0x50;               
        AUXR |= 0x40;               
        AUXR &= 0xFE;               
        TMOD &= 0x0F;               
        TL1 = 0xE0;               
        TH1 = 0xFE;               
        ET1 = 0;               
        TR1 = 1;               
}
void main()
{
        UartInit();
        while(1)
        {
                TI=1;
          printf("hello world\r\n");
                delay();
        }
}
void delay()
{
        unsigned int i,j;
        for(i=0;i<2000;i++);
        for(j=0;j<3000;j++);
}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:371606 发表于 2021-2-17 10:38 来自手机 | 显示全部楼层
实测可行吗
回复

使用道具 举报

ID:884588 发表于 2021-2-26 10:10 | 显示全部楼层
可以往显示屏上输出吗???
回复

使用道具 举报

ID:568114 发表于 2021-3-4 15:38 | 显示全部楼层

可行
回复

使用道具 举报

ID:568114 发表于 2021-3-4 15:39 | 显示全部楼层
  5.1_phantom 发表于 2021-2-26 10:10
可以往显示屏上输出吗???

串口屏?
回复

使用道具 举报

ID:696335 发表于 2021-3-25 17:14 | 显示全部楼层
波特率是多少了?
回复

使用道具 举报

ID:65956 发表于 2021-3-26 08:15 | 显示全部楼层
51单片机可用printf函数啊,谁说不能用
回复

使用道具 举报

ID:304608 发表于 2021-3-26 09:43 | 显示全部楼层
求解,不做重映射 为什么就可以直接使用?
回复

使用道具 举报

ID:499770 发表于 2021-3-26 09:58 | 显示全部楼层
        while(1)
        {
                TI=1;
          printf("hello world\r\n");
                delay();
        }

刚开始学C语言,请问这句“TI=1;”,是什么作用?
回复

使用道具 举报

ID:440403 发表于 2021-3-26 10:37 | 显示全部楼层
把pringf里面的putchar 换成 串口发送对吧
回复

使用道具 举报

ID:468878 发表于 2021-3-26 16:54 | 显示全部楼层
直接可以用的,不过这个PRINTF好占程序空间。
回复

使用道具 举报

ID:199471 发表于 2021-3-26 17:14 | 显示全部楼层
讲的很基础,很容易懂,挺好的。
回复

使用道具 举报

ID:656213 发表于 2021-10-5 09:22 | 显示全部楼层
我直接拷贝程序,编译报错是咋回事?
回复

使用道具 举报

ID:235200 发表于 2021-10-5 10:46 | 显示全部楼层
jiahz2019 发表于 2021-10-5 09:22
我直接拷贝程序,编译报错是咋回事?

因为你用到头文件stc15f2k60s2.h,而你未添加STC单片机的头文件库
回复

使用道具 举报

ID:969848 发表于 2021-10-5 15:09 | 显示全部楼层
可以往显示屏上输出吗???
回复

使用道具 举报

ID:908826 发表于 2021-10-15 09:03 | 显示全部楼层
liuwang2051 发表于 2021-3-26 09:58
while(1)
        {
                TI=1;

应该是接受标志位置一
回复

使用道具 举报

ID:908826 发表于 2021-10-15 09:05 | 显示全部楼层
liuwang2051 发表于 2021-3-26 09:58
while(1)
        {
                TI=1;

我说错了,是发送标志位
回复

使用道具 举报

ID:331263 发表于 2021-10-16 00:11 | 显示全部楼层
可以,我正在用,要配置中断
回复

使用道具 举报

ID:285175 发表于 2021-10-20 15:52 | 显示全部楼层
liuwang2051 发表于 2021-3-26 09:58
while(1)
        {
                TI=1;

定时器标志位,数据手册有解释
回复

使用道具 举报

ID:285175 发表于 2021-10-20 15:54 | 显示全部楼层
printf到哪里了?
回复

使用道具 举报

ID:654797 发表于 2021-12-13 22:30 | 显示全部楼层
可以用呀!只是没电脑上开发EXE程序的C好用,有很多条件限制,
回复

使用道具 举报

ID:887371 发表于 2021-12-14 10:09 | 显示全部楼层
keil的安装目录中有例程,可以直接拿来用。并且keil的帮助文件有很详细的说明和更适合实际工程的。
  1. /*------------------------------------------------------------------------------
  2. HELLO.C

  3. Copyright 1995-2005 Keil Software, Inc.
  4. ------------------------------------------------------------------------------*/

  5. #include <REG52.H>                /* special function register declarations   */
  6.                                   /* for the intended 8051 derivative         */

  7. #include <stdio.h>                /* prototype declarations for I/O functions */


  8. #ifdef MONITOR51                         /* Debugging with Monitor-51 needs   */
  9. char code reserve [3] _at_ 0x23;         /* space for serial interrupt if     */
  10. #endif                                   /* Stop Exection with Serial Intr.   */
  11.                                          /* is enabled                        */


  12. /*------------------------------------------------
  13. The main C function.  Program execution starts
  14. here after stack initialization.
  15. ------------------------------------------------*/
  16. void main (void) {

  17. /*------------------------------------------------
  18. Setup the serial port for 1200 baud at 16MHz.
  19. ------------------------------------------------*/
  20. #ifndef MONITOR51
  21.     SCON  = 0x50;                        /* SCON: mode 1, 8-bit UART, enable rcvr      */
  22.     TMOD |= 0x20;               /* TMOD: timer 1, mode 2, 8-bit reload        */
  23.     TH1   = 221;                /* TH1:  reload value for 1200 baud @ 16MHz   */
  24.     TR1   = 1;                  /* TR1:  timer 1 run                          */
  25.     TI    = 1;                  /* TI:   set TI to send first char of UART    */
  26. #endif

  27. /*------------------------------------------------
  28. Note that an embedded program never exits (because
  29. there is no operating system to return to).  It
  30. must loop and execute forever.
  31. ------------------------------------------------*/
  32.   while (1) {
  33.     P1 ^= 0x01;                         /* Toggle P1.0 each time we print */
  34.     printf ("Hello World\n");   /* Print "Hello World" */
  35.   }
  36. }


复制代码
代码。
回复

使用道具 举报

ID:887371 发表于 2021-12-14 10:19 | 显示全部楼层
屏幕截图 2021-12-14 101641.jpg
keil帮助文件中使用串口中断和缓存的代码。
回复

使用道具 举报

ID:578842 发表于 2021-12-14 11:09 | 显示全部楼层
51单片机包含#include "stdio.h",printf打印到串口,经常用
回复

使用道具 举报

ID:654797 发表于 2021-12-15 23:21 | 显示全部楼层
liuwang2051 发表于 2021-3-26 09:58
while(1)
        {
                TI=1;

串口发送中断标致位,如果发送成功,TI位等于1
回复

使用道具 举报

ID:388477 发表于 2022-8-11 17:05 | 显示全部楼层
datouyuan 发表于 2021-12-14 10:09
keil的安装目录中有例程,可以直接拿来用。并且keil的帮助文件有很详细的说明和更适合实际工程的。代码。

真给力!
回复

使用道具 举报

ID:654797 发表于 2022-8-12 06:32 | 显示全部楼层
我只发现这函数只能用在串口上,而且没有电脑上的C程序好用
回复

使用道具 举报

ID:514317 发表于 2022-8-12 09:58 | 显示全部楼层
printf本来就可以用   输出到串口    但是用到接收函数就复杂很多了
回复

使用道具 举报

ID:1041297 发表于 2022-8-12 17:04 | 显示全部楼层
liuwang2051 发表于 2021-3-26 09:58
while(1)
        {
                TI=1;

发送标志位TI,当发送完成后TI==1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表