历史上的今天
返回首页

历史上的今天

今天是:2025年03月08日(星期六)

2020年03月08日 | Keil C51 中使用Printf()进行串口输出

2020-03-08 来源:eefocus

如何使用printf在串口显示信息,有两种办法,因为在keil C51中 printf函数是调用putchar进行数据传送的,而putchar应该是先判断TI是否为1,不为1则等待为1。 如果为1则清0,然后送出一个字符。因此如果你直接使用printf函数,你的程序就会在putchar函数中等待TI为1。这时你的程序就相当于直接死掉了。你可以通过改写putchar函数实现自己的目的。TI相当于是初始化不给赋初值就不干活。


所以第一种办法就是在初始化的时候,给TI赋值为1,比如


void uart_init()

 

{

    

PCON &= 0x7F; //波特率不倍速

SCON = 0x50; //8位数据,可变波特率

AUXR |= 0x40; //定时器1时钟为Fosc,即1T

AUXR &= 0xFE; //串口1选择定时器1为波特率发生器

TMOD &= 0x0F; //清除定时器1模式位

TMOD |= 0x20; //设定定时器1为8位自动重装方式

TL1 = 0xDC; //设定定时初值

TH1 = 0xDC; 

ET1 = 0; //禁止定时器1中断

TR1 = 1; //启动定时器1    

    TI=1;           //发送中断标志位置1

 

}


但是有时候像在用到UART中断的时候,这个串行传输数据发送中断标志位TI是不能长置为1的,这时候我们就需要对putchar函数进行重新编写就可以对printf函数输出重定向,然后就可以使用printf显示了。具体可以参照C:Keil/C51/LIB/PUTCHAR.C,下面是一个例子:


char putchar (char c)  {

  while (!TI);

  TI = 0;

  return (SBUF = c);

}


推荐阅读

史海拾趣

COMPUTAR公司的发展小趣事

随着摄影和摄像技术的不断发展,市场对镜头性能的要求也越来越高。为了满足这一需求,CBC株式会社于1985年成功研制出第一款非球面高速镜头。这款镜头采用了先进的非球面设计,有效减少了像差和畸变,提高了成像质量。非球面高速镜头的诞生,不仅为CBC赢得了更多的市场份额,也为整个光学行业树立了新的技术标杆。

Elprotronic Inc.公司的发展小趣事

随着公司业务的不断发展壮大,Elprotronic Inc.开始实施国际化战略。他们积极开拓海外市场,与全球众多知名电子厂商建立了长期稳定的合作关系。为了更好地服务海外客户,公司还成立了专业的海外销售和技术支持团队,提供及时、高效的服务。通过国际化战略的实施,Elprotronic Inc.不仅拓展了业务范围,也提升了公司的国际竞争力。

Allen Avionics Inc公司的发展小趣事

品质管理一直是Elprotronic Inc.非常重视的一项工作。公司建立了一套完善的品质管理体系,从原材料采购到产品生产、检测、包装等各个环节都进行严格把关。同时,公司还引入了先进的生产设备和技术手段,提高了产品的生产效率和质量水平。此外,公司还定期组织员工进行品质管理培训和学习交流活动,不断提升员工的品质意识和技能水平。这些措施的实施使得Elprotronic Inc.的产品质量得到了进一步提升和保障。

Harbour Industries公司的发展小趣事

背景:近年来,随着环保意识的提高和可持续发展理念的普及,电子行业也开始向绿色化、低碳化方向发展。Handok积极响应这一趋势,将绿色可持续发展作为公司的重要战略之一。

发展:Handok加大了对环保技术的研发投入,推出了一系列绿色电子产品和解决方案。同时,公司还优化了生产流程和管理体系,实现了资源的高效利用和废弃物的减量化处理。

影响:Handok的绿色可持续发展战略不仅赢得了市场的广泛认可,还为公司树立了良好的社会形象。此外,这一战略还有助于公司在未来更加激烈的市场竞争中保持领先地位。

Good Sky Electric Co Ltd公司的发展小趣事
正确操作摇臂钻床的关键在于遵循操作规程和安全规范。在操作过程中,应注意避免超负荷运行、频繁启动和停止以及长时间连续工作等不当操作。同时,还应定期对设备进行维护保养,如清洁电气元件、检查接线是否松动、更换老化的元件等。
富芯森美(FUXINSEMI)公司的发展小趣事

随着技术实力的不断提升,富芯森美开始积极拓展市场。公司凭借优质的产品和专业的服务,成功打入消费类电子、安防、工控、汽车电子等多个领域。同时,富芯森美还注重品牌建设,通过参加国内外知名展会、举办技术研讨会等方式,不断提升品牌知名度和影响力。这些努力使得富芯森美在电子行业中逐渐崭露头角,成为行业内的佼佼者。

问答坊 | AI 解惑

关于51与PC的串口通讯问题

#include #define uchar unsigned char void delay(unsigned char t) { unsigned char y,z; for(y=110;y>0;y--)    for(z=t;z>0;z--); } void  Comint()   //初始化串口 {   TMOD=0x20; //方式 ...…

查看全部问答>

你听过这么感人的演讲

本帖最后由 paulhyde 于 2014-9-15 09:00 编辑 http://v.youku.com/v_show/id_XMTA3NTQ3Njky.html  …

查看全部问答>

今天体验了一把网上缴费~~

刚好身边有两个号码需要充值,一个联通,一个移动。 直接登录联通网站,输入号码后,就可以直接充值,基本操作需要(算上仔细检查的时间)5分钟吧! 登录移动网站,也许是移动业务太多的缘故,一下子迷失在里面,经过几番周折,进了充值页面,跳 ...…

查看全部问答>

请教:WINCE6.0拨号成功,但打不开网页

WINCE6.0系统通过GPRS MODEM CMNET方式连接中国移动,能够连接上,而且运行ping www.google.com是能够PING通的, 但是用IE不能打开网页,用IPCONFIG查看发现连接不是PPP adpter,而是Ethernet adapter。换成WINCE5.0是可以上网的, 不知WINCE6 ...…

查看全部问答>

EVC中CStatic的问题(SetbitmapCStatic * pSat = (CStatic*)GetDlgItem(IDC_STATI)

VC6下的代码:   CStatic* pSat = (CStatic*)GetDlgItem(IDC_STATIC111);   pSat->ModifyStyle(0,SS_BITMAP|SS_CENTERIMAGE);   HBITMAP hBitmap = ::LoadBitmap(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDB_B ...…

查看全部问答>

*((volatile unsigned *)i)=0xEA000000+0x1FFE;

*((volatile unsigned *)i)=0xEA000000+0x1FFE; 上面的这段代码一直看不懂是什么意思: 在启动文件里面,将中断的地址映射到了_ISR_STARTADDRESS为起始地址处。 在C语言的主程序里面也是将中断服务程序定义到了_ISR_STARTADDRESS处。如 #define ...…

查看全部问答>

lm3s8962 bootloader_serial问题

我想问问大家,我用jtag烧录好bootloader后,然后串口更新应用程序,但是应用程序就是不能运行,全部用的是例程里面的程序,也不知道为什么就不是不运行。应用程序起始地址为0x00001000,网上说bl.sct 这个文件也要配置,这个我不知道,我没改过, ...…

查看全部问答>

2个月前买的飞凌板子OK6410-A

详细可联系 QQ:348075293 手机:13732189922 [local]1[/local]参考价550(包含仿真器、串口转接、串口扩展,如不需这些配件,价格可议)…

查看全部问答>

新年大家对于学习MSP430有何打算

新年的假期结束了,大家开始回到工作岗位或者回到学校,又要回到往常的忙碌的工作和生活中了。在春节期间,咱们都忙着吃吃喝喝玩玩,现在得振作起来了,打到节后综合症。我们版块也要活跃起来,新年新气象,咱们一起来学习430,开展新一轮的活动, ...…

查看全部问答>

初学FPGA

下面是我学习FPGA时的笔记,希望以后有用: 安装软件Quertus II以后,我们还需要安装USB BLASTER(下载线)的驱动USB BLASTER的驱动是有Quartus II软件提供的。 一种是JTAG方式,一种是AS方式。对应的在核心板上有两个10针的接口,上面有标识AS口 ...…

查看全部问答>