51串口通信的问题 请高人们帮忙看看这个程序 谢谢

changyuan009   2009-5-20 12:25 楼主
    做学校的点子大赛,需要单片机之间的通信,传送固定数据的程序调出来了,但是我用计时器产生的变动数据传送却出问题了,想请教一下问题出在哪
下面是大概的程序
发送端:(定时器0每秒加一个数的那部分没问题,省略了,这些只是发送数据的程序 变量sec就是定时器产生的变动数据)
void ultra_init(void)
{
  TMOD=0X20;
  TH1=0Xfd;
  TL1=0Xfd;
  TR1=1;
  SCON=0x40;
  ET1=0;
  EA=1;
  ES=1;
}       
void Timer0Init(void)  //初始化定时器0程序
{
        TMOD = 0x01;
        TH0 = HI; //给TH0,TL0赋初始值
        TL0 = LO;

        TR0 = 1;         
        ET0 = 1;         
         EA = 1;       

void main(void)  
{   uchar i;
    Timer0Init();
    ultra_init();
    i=sec;    (这里我原来直接传送的是sec,后来感觉可能是传送过程中定时器中断导致sec变化所以传送出错,这么改了以后还是不对。。=。+!)
    while(1)
    {
    SBUF=i;
    while(!TI)
    {}
    TI=0;
    }
}

接收端(接收到的数据在LED上显示出来,显示部分没问题省略掉 这些只是接受的程序)
void ultra_init(void)
{
        TMOD=0x20;
    TH1=0Xfd;
    TL1=0Xfd;       
    TR1=1;                //开定时器1
    ET1=0;
        //SM0=0;                //编程SCON寄存器,设置通讯方式,方式1
        //SM1=1;
    SCON=0X40;
   // PCON=PCON|0x7f;
        REN=1;                //接受使能
        EA=1;                //开中断
        ES=1;               
}
void main()
{        uchar j;   
        ultra_init();
        init_wei();
   
        while(1)
    {
        j=key;
        while(!RI)       
        {
        show(j%10,1);                //显示各位
        delay(1);
        init_wei();                       
        show(j/10%10,2);        //显示十位
        delay(1);
        init_wei();
        show(j/100%10,3);        //显示百位
        delay(1);
    init_wei();
        }
   }
}
void serial() interrupt 4
{
        key=SBUF;
        RI=0;//清楚标志        
}


还有个问题就是 握手信号和结束信号大概要怎么写?找了很多书都找不到 。。麻烦各位了~

回复评论 (3)

接收端应该是
while(1)
{         
while(!RI)
{
j=key;
show(j%10,1); //显示各位
delay(1);
init_wei();
show(j/10%10,2); //显示十位
delay(1);
init_wei();
show(j/100%10,3); //显示百位
delay(1);
    init_wei();
}
  }
}
void serial() interrupt 4
{
key=SBUF;
RI=0;//清楚标志
}

忘了改。。竟然没法编辑帖子吗
点赞  2009-5-20 12:32
就是这个sec有问题,它在main和int中都要用到,对于这样的变量要加volatile修饰符。
点赞  2009-5-20 20:01
先说发送端
Timer0Init()中TMOD为0x01
ultra_init()中TMOD为0x20
T0的模式变了
点赞  2009-5-20 20:51
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复