keil中的printf函数显示结果
来源:互联网 发布:mac怎么用u盘重装系统 编辑:程序博客网 时间:2024/05/01 18:07
问题描述:
今天在keil中写c51程序时,遇到一个问题-----按道理在keil中c51程序只要引入头文件<stdio.h>即可使用printf函数,编译、运行即可显示出printf里的内容,但是遇到了下面几个问题:一.c51程序如何在keil里运行(以前只是用keil来写一些小程序,写好了直接烧录到单片机运行的。。。。。。);二.运行了结果显示不出来。若能显示出printf里的内容,程序调试将会方便很多,特做笔记,方便以后查看和初学者学习。
解决办法:
在各种百度,Google,查阅相关资料之后终于解决了。keil虽然不像vc++类似的软件直接拥有运行的快捷方式,因为它是针对嵌入式开发的一款软件,但是他同样提供了debug功能,所以针对第一个问题,只要编译好之后,点击debug,下拉菜单里有Start/Stop Debug Session 选项,点击它,这时你就进入了debug模式,debug下拉菜单里还有run选项,同样点击一下程序就开始运行了,点stop程序就停止运行,这样第一个问题解决好了,但更重要的问题还没解决-----------我们是要看到printf里的内容,方便调试。百度你会发现大量如"在debug下打开view菜单里的Serial Windows的UART #1”之类的内容,他们说的对么,当然是对的,但是我的keil怎么还没有显示出printf里的内容呢,原来里面有一个很重要的机制-------printf函数是调用putchar函数输入的,而putchar应该是先判断ti是否为1,不为1则等待为1。 如果为1则清0,然后送出一个字符。因此 你如果直接使用printf函数,你的程序就会在putchar函数中等待ti为1。这时你的程序就相当于直接死掉了。你可以通过改写putchar函数 实现自己的目的。TI相当于是初始化~不给赋初值就不干活。
无奈,总不能和机器唱反调吧,于是就老老实实地干活,初始化TI,在程序中加入了如下语句:
SCON = 0x50; //SCON 串行口控制寄存器方式2工作 多机通信 禁止接收
TMOD = 0x20; //TMOD 定时器方式寄存器 控制T1 与~INT0无关 定时器模式 工作方式2
TCON = 0x40; //TCON 定时器控制寄存器 有T1溢出中断 停T1计数 无T0中断(硬件复位) 停T0复位
TH1 = 0xE8; //定时器1高位初始化
TL1 = 0xE8; //定时器1低位初始化
TI = 1; //发送中断标志
TR1 = 1; //启T1计数
再 编译->Debug->Start/Stop Debug Session ->run 终于在UART #1窗口中出现了梦寐以求的printf中的内容。(注:UART #1窗口在debug下的View->Serial Windows->UART #1)
- keil中的printf函数显示结果
- keil中的printf
- 51keil编译器printf函数
- Keil C51 实现 printf 函数
- 关于keil c51里面的 printf 函数
- keil C 中调用串口函数 printf
- STM32+Keil 如何使用printf函数?
- Keil C51中printf()函数的说明
- STM32+Keil 如何使用printf函数?
- Keil v4函数列表显示
- awk中的printf函数
- 在keil中使用printf()函数的要点
- 在keil中使用printf()函数的要点分析:
- STM32下Keil IDE中Printf函数的使用
- Keil MDK环境下使用printf函数的解决方法
- keil C51:printf sprintf vprintf vsprintf 函数学习
- keil c 中用宏构建自己的printf函数
- KEIL下STM32如何使用printf函数进行串口输出
- Largest Rectangle in a Histogram
- 空汽水瓶换汽水问题
- 信源编码第二次作业
- QT多线程使用互斥体
- STM32 —— 多路DAC(输出电压和正弦波)
- keil中的printf函数显示结果
- 递归算法---全排列
- Android Activity生命周期--应知应会
- slua 1.3.1 vs2017 build file
- 记录下 刚开的博客
- 7.Draftjs 学习笔记-StateToHtml
- (java)leetcode-22
- JMeter proxy server
- Java学习笔记3--类与对象