单片机编程keilc51使用教程里面,UART #1不输出”hello world”。

最近有同学在51单片机的学习过程中困扰如何使用单片机串口在上位机串口助手上输出显示的问题,其实很多开发环境都支持使用C语言里面最常用的printf函数,Keil中也不例外,不仅仅是最常用的STC89C52、keil下其他51系列单片机如STC12、STC15等同样适用。具体步骤如下:
在Keil中建立一个空的工程,加入一个源文件,如main.c 粘贴以下代码,编译生成hex文件,下载到单片机即可。
需要注意的是:1、需要包含stdio.h头文件 2、串口初试化函数中需要有 TI = 1;
废话少说,直接上代码:
#include &stdio.h&
#include &reg52.h&
void InitUART(void)//使用定时器1作为串口波特率发生器
TH1 = 0xFD;
//晶振11.0592mhz 波特率设为9600
TL1 = TH1;
TMOD |= 0x20;
//定时器1方式2
SCON = 0x50;
//串口接收使能
//串口中断使能
//定时器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(); //初始化串口
//开总中断
delay_ms(500);
printf("Hello World!\n");//串口打印结果
C51 串口收发,printf, 接收字符串
串口发送,接收在while(1){printf(“xxx”); delay(100); //此处需要有delay函数;}#include
//stdio.h,string.h用于printf函数原...
Keil重定向printf到串口UART输出
就是在你配置完串口的时候首先写一个数到SBUF寄存器中然后在用printf函数打印就可以,当让这个顺序是不可以变的,如果你想在追问细节为什么,我只能告诉你这应该是开发环境决定的,这一点我就理解这么多,...
51单片机串口通信使用类似printf函数的两种办法
今天就简单来说说怎么在51单片机中使用&printf&函数:包括使用自带的printf函数和自己动手写一个printf函数,再贴代码之前先介绍几个相关的知识,主要用于自己写printf函数。
C51里怎样使用printf函数
在c文件中包含stdio.h就使用printf是不行的,还需要把TI先置1,才能使用printf函数...
让单片机直接支持printf函数
在使用单片机的时候经常需要使用到UART输出一些调试信息。通常情况下是自己写一些类似UART_SendChar();或者UART_SendString();之类的函数。但是这种有时候对于输出的格式支持...
51单片机的Printf使用方法
51单片机使用Printf的方法
单片机printf使用
一、printf常用说明
printf的格式控制的完整格式:
下面对组成格式说明的各项加以说明:
①%:表示格式说明的起始符号,不可缺少。
单片机不支持printf函数,实现几个常用串口打印函数
在单机开发中经常使用串口调试或者收集实时各种数据类型不同的数据少不了使用printf()函数重定向,但是对于资源紧缺的单片机使用printf(),性能不佳。为了以后工作方便,把几个常用的打印函数记录下...
本人在调试STC8A8K64S4单片机时遇到一个很奇葩的问题,使用printf函数打印一个带参数的调试信息时出现异常,具体表现定义了8位的变量使用%X格式打印出的值却变成了16位,且赋...
没有更多推荐了,提示信息 单片机论坛
后使用快捷导航没有帐号?
Powered by刚刚准备自学接口技术,求Keil 4下的打印HelloWorld程序的操作步骤
[问题点数:20分,结帖人a8522816]
本版专家分:0
结帖率 94%
CSDN今日推荐
本版专家分:1885
本版专家分:0
本版专家分:80
本版专家分:3
匿名用户不能发表回复!
其他相关推荐一个简单的makefile示例及其注释  相信在unix下编程的没有不知道makefile的,刚开始学习unix平台下的东西,了解了下makefile的制作,觉得有点东西可以记录下。  下面是一个极其简单的例子:现在我要编译一个Hello world,需要如下三个文件:  1. print.h      #include&stdio.h&      void printhello();  2. print.c      #include"print.h"      void printhello(){        printf("Hello, world\n");      }   3. main.c      #include "print.h"      int main(void){        printhello();        return 0;      }  好了,很简单的程序了。如果我们想要编译成功需要哪些步骤呢?我认为在这里需要理解的就两步:  #
为每一个 *.c文件生成 *o文件。  #
连接每一个*o文件,生成可执行文件。下面的makefile 就是根据这样的原则来写的。一:makefile 雏形:#makefile的撰写是基于规则的,当然这个规则也是很简单的,就是:#target : prerequisites   command  //任意的shell 命令实例如下:makefile:    helloworld : main.o print.o #helloword 就是我们要生成的目标                 # main.o print.o是生成此目标的先决条件      gcc -o helloworld main.o print.o#shell命令,最前面的一定是一个tab键    mian.o : mian.c print.h      gcc -c main.c    print.o : print.c print.h      gcc -c print.c        clean :                  rm helloworld main.o print.o  OK,一个简单的makefile制作完毕,现成我们输入 make,自动调用Gcc编译了,输入 make clean就会删除 hellowworld mian.o print.o二:小步改进:  在上面的例子中我们可以发现 main.o print.o 被定义了多处,我们是不是可以向C语言中定义一个宏一样定义它呢?当然可以:makefile:    objects =
main.o print.o #应该叫变量的声明更合适    helloworld : $(objects) //声明了变量以后使用就要$()了      gcc -o helloworld$(objects)   
mian.o : mian.c print.h      gcc -c main.c    print.o : print.c print.h      gcc -c print.c        clean :                  rm helloworld $(objects)修改完毕,这样使用了变量的话在很多文件的工程中就能体现出方便性了。三:再进一步:  再看一下,为没一个*.o文件都写一句gcc -c main.c是不是显得多余了,能不能把它干掉?而且 main.c 和print.c都需要print.h,为每一个都写上是不是多余了,能不能再改进?能,当然能了:makefile:   
main.o print.o     helloworld : $(objects)       gcc -o helloworld$(objects)        $(objects) : print.h # 都依赖print.h   
mian.o : mian.c
#干掉了gcc -c main.c 让Gun make自动推导了。    print.o : print.c         clean :                  rm helloworld $(objects)好了,一个简单的makefile就这样完毕了,简单吧。
Makefile编写
实际上,make工具是一个自动编译管理器,能够根据文件的时间戳自动发现更新过的文件从而减少编译的工作量。同时,它通过读入Makefile文件中的内容来执行大量的编译工作,用户只...
1. 什么是Makefile?
相信大多数学过单片机的同学都用过各种IDE软件,例如visual c++、keil、IAR、eclipse、Visual Studio等等,这些软件为我们提供了很方便的...
Makefile核心要点:
1.会不会写makefile从侧面说明了一个人是否具备完成大型项目开发大型工程的能力
2.makefile是用来编译链接文件的,实现了自动化编译
3.与make指令搭...
本读不讲理论,只讲实践。
适用对象,有GCC基础,对GCC编译有了解的人群。
1、先了解程序从无到有的过程,即编译到执行。
(图片的引用来自互联网)
下面用实例来演示整个过程。
原文地址: http://www.cnblogs.com/mfryf/p/3305778.html
近期在学习Linux下的C编程,买了一本叫《Linux环境下的C编程指南》读到ma...
makefile很久就接触过了,但是一直没怎么深入的去学习和总结;在项目中我也只是看看makefile或者修改部分语句,全部自己动手写的话还真没有;知识在于沉淀,这句说的非常好,所以现在把自己理解的东...
程序的设计通常遵循一个极为简单的惯例:编辑源代码文件,将源代码编译成可执行的形式以及对成果进行调试...
标签: Linux C/C++开发
文件的构成
使用条件语句
make:维护程...
1.一个最基本的C++程序
2.第二个c++程序
3.第一个入门级别的简单的makefile
4.在makefile中定义变量。
5.编写makefile的依赖
没有更多推荐了,今天就简单来说说怎么在51单片机中使用"printf"函数:包括使用自带的printf函数和自己动手写一个printf函数,再贴代码之前先介绍几个相关的知识,主要用于自己写printf函数。
①C语言函数:vsprintf
其原型为int vsprintf(char *string, char *format, va_list param);,作用为将param按格式format写入字符串string中,因此他可以用于将任何格式数据转化为字符串数据,比如把整数97转化为ASCII码的97的程序就像下面这样vsprintf(string,”%d”,97),当然还有一点需要注意:在keil里面使用sprintf需要包含stdio.h这个头文件(当然这里也可以使用sprintf,作用完全差不多,只需要稍加修改即可,不多介绍)。说到这里,再来说说另一个函数itoa吧,其实他比vsprintf更简单,其原型为char *itoa(int value, char *string, int radix),作用为将value按radix进制写入到string字符串中,使用时需要包含头文件stdlib.h,可是在keil里面却无法使用,头文件里面不包含itoa,即使把VC里面的复制进来貌似还是不行,呵呵,目前不知道原因。
②可变参数函数
具体来说就是stdarg.h里面的这几个函数va_start,va_arg,va_list,va_end,这几个参数用于开辟一段内存区域,可以配合vsprintf使用,但是对内存使用较大,需要单片机具备一定的RAM,否则程序就算能编译通过也是无法运行的,用法见这里
#include &STC12C5A60S2.H&
#include &stdio.h&
void Uart1Init(void)
PCON &= 0x7F;
AUXR |= 0x04;
AUXR |=0X01;
AUXR |=0X10;
void UART1_SendData(char dat)
while(TI!=1);
void UART1_SendString(char *s)
UART1_SendData(*s++);
void printf(const char *fmt,...)
char xdata string[50];
va_start(ap,fmt);
vsprintf(string,fmt,ap);
UART1_SendString(string);
va_end(ap);
void main(void)
Uart1Init();
printf("Hello World\r\n");
printf("Hello %s\r\n","WillemObama");
printf("This num is %d\r\n",(int)123);
打开串口把波特率调成115200bps,可以看到串口打印如下信息:
Hello World
Hello WillemObama
This num is 123
单片机系统重写printf函数
参考:http://www.51hei.com/mcu/3429.html
//将stdio.h头文件中的printf函数注释掉不然会冲突
//stdio.h头文件还是要包含的里面有va_list的...
51单片机在Keil中使用printf进行串口输出
最近有同学在51单片机的学习过程中困扰如何使用单片机串口在上位机串口助手上输出显示的问题,其实很多开发环境都支持使用C语言里面最常用的printf函数,Keil中也不例外,不仅仅是C52、keil下其...
实现自己的printf函数
在嵌入式开发中,常常会通过串口打印一些信息到PC终端,这就需要实现自己的printf函数,下面介绍打印函数print的实现。
__PRINT_H_
实现简单的printf函数
首先,要介绍一下printf实现的原理
printf函数原型如下:
int printf(const char* format,...);
返回值是int,返回输出的字符个数。
int mai...
自定义printf写法
int vprintf(const char *format, va_list arg)
发送格式化输出到stdout使用一个参数列表传递给它。printf就是用vprintf写的。定义自己的pri...
让单片机直接支持printf函数
在使用单片机的时候经常需要使用到UART输出一些调试信息。通常情况下是自己写一些类似UART_SendChar();或者UART_SendString();之类的函数。但是这种有时候对于输出的格式支持...
51单片机实现printf函数
使用printf打印函数在调试的时候十分方便,因此在开发过程中首先实现此函数是非常有必要的。在经常整理网上资料后发现实现printf函数非常简单,首先添加stdio.h头文件,然后在串口函数中添加如下...
单片机printf使用
一、printf常用说明
printf的格式控制的完整格式:
下面对组成格式说明的各项加以说明:
①%:表示格式说明的起始符号,不可缺少。
可移植的单片机printf(print by format)函数实现
一个有趣的实验:
说明%号一出现要么被”吃掉”要么他会终止与f,d,s。
那么再加以大胆猜想:
int sprintf(const char *format, …);
当然我们需要...
51单片机的Printf使用方法
51单片机使用Printf的方法
没有更多推荐了,

我要回帖

更多关于 51单片机keil编程 的文章

 

随机推荐