打印

帮忙看一段串行窗口输出程序

[复制链接]
1322|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
roophoon|  楼主 | 2007-10-16 20:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
完整程序如下:
#include <reg52.h>
#include <stdio.h>

void main()
{
    //定时器T1工作在方式2,波特率为9600,
    TMOD=0x20;
    TH1=0xfd;
    TL1=0xfd;
        TR1=1;        //启动计数器T1

    SM0=0;       //设置SCON中各位,串口工作在方式1,允许接受信号
    SM1=1;
    REN=1; 
       PCON=0x00; //设置PCON

    EA=1;          //开总中断
    ES=1;           //允许串行口中断  

    TI=1;

    while(1)
    {
        printf("Hello world! ");
    }    
}

问题是:
(1)为什么要将TI置1,一般来说,TI都是由硬件置1软件清零的,而且即使执行了"TI=1"这一句后,在 seril channel窗口中TI标志栏并未打勾,也就是说虽然软件置了1,但看上去对这一位并没有产生任何影响,为什么?
(2)如果将TI=1这一句去掉,程序会死在printf()处,为什么?

相关帖子

沙发
huntington| | 2007-10-17 09:33 | 只看该作者

re

因为在printf()函数的实现过程中调用了putchar()函数,而51的putchar()函数实现过程中有

    while (!TI);
    TI = 0;
这句,所以必须先TI=1;

使用特权

评论回复
板凳
computer00| | 2007-10-17 09:48 | 只看该作者

楼上正解。不倒过来写的原因是为了不白白浪费时间

使用特权

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

本版积分规则

3

主题

10

帖子

1

粉丝