打印

郁闷的printf.........

[复制链接]
2268|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
a5566255|  楼主 | 2008-12-4 13:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C51中printf是如何实现串口输出的????
void main(void) 

uint t,n,i; 
uchar m; 
SCON=0X50; 
TMOD=0X20; 
TH1=0XFD; 
TL1=0XFD; 
TI=0; 
TR1=1; 
i=0; 
while(1){ 
while(RI){ 
    n=SBUF; 
    RI=0; 
    for(m=0;m <80;m=m+1) 
    { 
    TI=1; //这句不写接收端就收不到printf发的数,但把printf换成SBUF=123就可以,WHY?? 
    t=4000; 
    printf("%d ",t);//SBUF=123; 
    P3_2=1;    
    } 
          } 
        } 

如注释部分。。。。。

 偶的猜想: 

printf串口输出是采用中断方式,需要TI置位才能进入串口中断,
但这个函数本身被调用时确没有加入置位TI中断标志位的功能,所以需要自己在之前手动中断,
然后它被调用并执行完后却能自动清OTI退出中断。。。。。
请问各位大虾,如果是这样的话KEILC这么做什么意思??? 
 

相关帖子

沙发
原野之狼| | 2008-12-4 15:43 | 只看该作者

自己利用vsprintf实现一个myprintf

这样用起来要灵活些。

其实在KEIL里printf语句默认是重定向到串口的,你当然可以修改这个定向。修改的位置是:
putchar()
函数。
比如说你可以重定向到LCD或者缓冲或者文件。

使用特权

评论回复
板凳
a5566255|  楼主 | 2008-12-4 17:10 | 只看该作者

可我现在用了printf,并发现问题了。。。。

我想知道为什么。。。。。。

使用特权

评论回复
地板
古道热肠| | 2008-12-4 17:35 | 只看该作者

俺用sprintf,然后自己写输出函数,可到LCD,也可到串口

使用特权

评论回复
5
huntington| | 2008-12-4 18:28 | 只看该作者
6
a5566255|  楼主 | 2008-12-4 20:31 | 只看该作者

感谢LS!

  

使用特权

评论回复
7
ayb_ice| | 2008-12-4 22:26 | 只看该作者

C51 的printf

本来就要自己写个串口输出函数

使用特权

评论回复
8
Mindist| | 2009-10-25 13:13 | 只看该作者
1# a5566255
楼主,
TI=1; //这句不写接收端就收不到printf发的数,但把printf换成SBUF=123就可以WHY??

这个你弄明白了没?请赐教啊。。。先谢过。。。

使用特权

评论回复
9
16777216| | 2013-6-12 21:14 | 只看该作者
古道热肠 发表于 2008-12-4 17:35

斑竹能分享下简单的思路么 在lcd上  或者又简单的伪代码么

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

218

帖子

1

粉丝