单片机下C编程的问题

QQ837477829   2007-4-19 15:40 楼主
#include

unsigned char i,j;

unsigned char code tab[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
                        0x87,0xff,0xef} ;

void Init_Com()
{
     TMOD = 0x20;
     PCON = 0x00;
     SCON = 0x50;
     TH1 = 0xFd;
     TL1 = 0xFd;
     TR1 = 1;
}

void main()
{
        EA=1;
        Init_Com();
        TI=1;
        while(TI)
                {
                        for(i=0;i<10;i++)
                                SBUF=tab;
                }
        TR1=0;
}


程序的目的是向上位机传输十个数,完成后停止

但我在运行的时候发现接收到的数据不是按照顺序来的,离散分布。还有一点是程序无法停止,TR1=0不起作用,无法停止计数器,一直传输数据,这两点是怎么回事?

现在我都开始怀疑我的C水平了,我刚刚接触单片机

回复评论 (9)

for(i=0;i<10;i++)
{SBUF=tab;
while(TI);
TI=0;}
试试
点赞  2007-4-19 16:11
这样试试:
void main()
{
        Init_Com();
        TI=0;
         for(i=0;i<10;i++)
         {
            SBUF=tab;
            while(TI);
            TI=0;
         }
         while(1);
}
点赞  2007-4-19 16:18
是这个while(TI==0);
   TI=0;
点赞  2007-4-19 16:22
void main()
{
        Init_Com();
        TI=0;
         for(i=0;i<10;i++)
         {
            SBUF=tab;
            while(TI);
            TI=0;
         }
         while(1);
}
这样不行,传输一个数据就停下了,对了,请问一下while(1)什么意思,那不是一个死循环了,如果没有这条语句,整个main是不是就是循环?
点赞  2007-4-19 16:48
for(i=0;i<10;i++)
    {
        SBUF=tab;
        while(TI==0);
        TI=0;
    }
TR1=0;

这样可以实现了,不过没有TR1=0的时候,会出现在输出完一遍后,出现再重新输出的现象,这是不是表明,main里的语句是循环的?


点赞  2007-4-19 16:57
在单片机里开发的时候,main里必须是可知的,由于没有OS,所以只能用户自己处理.

也就是一般放到一个死循环里while (1);
点赞  2007-4-19 18:38
在单片机的程序中是不停的从RAM调用程序,所以没有程序结束之说。同意楼上的说法。
但即使有OS,也是需要一个死循环。看看UCOS的原代码就知道了
点赞  2007-4-20 12:42
单片机程序一般是这样的当系统初始化工作结束后就进入一个循环系统.循环系统内有各种查寻来对系统的操作,进入各种子模块,或由中断进入子模块,退出后又进入循环系统.使系统在可控范围内运行.楼主的程序指行好就不知道程序到了什么地方去了.
点赞  2007-4-21 07:27
study
点赞  2007-5-26 13:05
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复