搜索
bottom↓
回复: 5

C51内核单片机中用printf()函数进行打印时寄存器配置注意点

[复制链接]

出0入0汤圆

发表于 2013-4-12 21:57:59 | 显示全部楼层 |阅读模式
     最近用了C51的单片机,具体的型号是SST89E58RD,因为没有仿真器,所以需要用串口打印运行中的变量的信息,因为有许多变量什么的,如果自己写打印函数,含多不同类型的变量不是很好处理,所以考虑用printf()函数进行串口打印。

  首先肯定要添加头文件#include <stdio.h>,然后在程序中的适当地方通过调用printf()函数来打印出信息,这里很奇怪,C51内核单片机刻意直接调用printf()打印信息,其用法和标准C语言差不多,但是如果是其他内核的单片机,比如说cortex m3内核的,如果调用要用printf()打印,那么必须要重写fputc()函数。

  这里串口相关的寄存器要进行初始化,无非就是SCON,PCON(最高位),TMOD,TH1,TL1,TR1.在SCON中的TI,一般默认配置的时候是TI = 0,因为这一位是中断标志位,如果采用查询的方式,就是检测这一位是1还是0,而且这一位必须软件清零。

  如果我们配置的时候将TI = 0,那么我们就会发现,调用printf()的时候根本打印不出信息,这里的原因我也不知道。而且要调用printf()进行打印信息,就不可以开启串口中断,否则也无法打印出信息。

  这里总结两点(仅限C51内核):

  1.如果用printf()做串口打印,就必须在配置串口相关寄存器的时候吧TI位置1,而且不能开启串口中断。

  2.如果需要开启串口中断,那么自己写打印函数,否则等着系统不正常吧。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2013-4-12 22:17:10 来自手机 | 显示全部楼层
c51不用重写putchar是因为编译器有个默认的,在编译器的目录下可以找到这个文件,实际上也是可以重写。至于TI需要置1,和默认的那个putchar有关,因为这个函数先判断TI是否为1,以确定前一次发送完成,然后TI置0,写SBUF,然后返回,这样的好处是发送后不必等待低速的串口,可以先忙别的事

出0入0汤圆

发表于 2013-4-12 22:25:23 来自手机 | 显示全部楼层
顺便说一句,你那个单片机可以烧一个叫mon51的一个程序在它的一个区里来实现仿真功能

出0入0汤圆

发表于 2013-4-12 23:05:06 | 显示全部楼层
我一般都是重写putchar,将串口输出单个字符的代码写进去。至于寄存器初始化没有什么特殊的地方。也很好用。

出0入0汤圆

 楼主| 发表于 2013-4-13 12:02:51 | 显示全部楼层
slfs007 发表于 2013-4-12 23:05
我一般都是重写putchar,将串口输出单个字符的代码写进去。至于寄存器初始化没有什么特殊的地方。也很好用 ...

那你如果需要输出的信息中有整型、实型的话,还要首先把这些变量转化成字符数组,如果只是打印信息不开串口中断的话,我觉得还是用printf比较方便。

出0入0汤圆

发表于 2013-4-13 21:54:26 | 显示全部楼层
wzd5230 发表于 2013-4-13 12:02
那你如果需要输出的信息中有整型、实型的话,还要首先把这些变量转化成字符数组,如果只是打印信息不开串 ...

我的意思是重写putchar,然后直接调用printf。
不好意思我没直接说清楚哈。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 08:46

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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