2079|3

64

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

51串口通信的问题 请高人们帮忙看看这个程序 谢谢 [复制链接]

    做学校的点子大赛,需要单片机之间的通信,传送固定数据的程序调出来了,但是我用计时器产生的变动数据传送却出问题了,想请教一下问题出在哪
下面是大概的程序
发送端:(定时器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;//清楚标志        
}


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

最新回复

先说发送端 Timer0Init()中TMOD为0x01 ultra_init()中TMOD为0x20 T0的模式变了  详情 回复 发表于 2009-5-20 20:51
点赞 关注

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
接收端应该是
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;//清楚标志
}

忘了改。。竟然没法编辑帖子吗
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
就是这个sec有问题,它在main和int中都要用到,对于这样的变量要加volatile修饰符。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
先说发送端
Timer0Init()中TMOD为0x01
ultra_init()中TMOD为0x20
T0的模式变了
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表