2569|1

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

有哪位大侠用华邦的78E516B做过串口的收发通信的??帮帮忙 [复制链接]

本人现在用飞利浦的p89c669与华邦的w78e56b进行通信
实现的功能为:由p89c669发送一串长度24个字节的命令,w78e516b在接收到这段命令后回传一段命令给p89c669,传输采用rs485,转换芯片为sn75176b
通路如下:

  p89c669<=>sn75176b<=>sn75176b<=>w78e516b

p89c669这边的程序已经完成,可以手动发送长度为24字节的命令
起先我不用串口中断进行收发 程序如下:
#pragma CODE /*DEBUG*/ OBJECTEXTEND NOAREGS
#include
#include
#include
#include "dpjsoftmain.h"

#define                Nop                _nop_();_nop_();_nop_();_nop_();

unsigned int i=0,o=0,sum=0;


unsigned char data Configure[24];        //存储局端发送过来的配置命令
unsigned char data Feedback[25];        //存储回给局端的命令




main()
{
//        InitialProcess();
         TMOD = 0x20;  /* T/C1 方式2*/
         TL1  = 0xf7;   
         TH1  = 0xf7;  //波特率19200
         PCON =        0x80;
         TR1  = 1;
         SCON = 0x50;  /* 串口方式1*/
         ES   = 0;     
         EA   = 0;
         WIDTH=0,ATT1=1,ATT2=0,CMC1=1; //各端口初始化
                 for(i=0;i<24;i++)
                {
                        Configure=0x00;
                }
                 Configure[1]=0x10;
        while(1)
        {       
                        DE1=0; //75176b准备接收
                        RI=0;
                        for (i = 0;i<24;i++)
                        {       
                                Configure = SBUF;
                                while(RI==0);
                                RI=0;                               
                        }

                        DE1=1;  //75176b准备发送
                        TI=0;
                       
                        for(i=0;i<24;i++)
                        {
                                SBUF = Configure;
                                while(TI==0);
                                TI=0;
                       
                        }               
                       
        }
}
此程序用调试助手观察w78e516b回上来的数据长度以及数值的大小均不对..
但是屏蔽掉接收部分,让78e516b自己发送时..数据确是正确的..
由于一直调不出来..所以后来网上看了些程序..加入了中断..
程序如下:
#pragma CODE /*DEBUG*/ OBJECTEXTEND NOAREGS
#include
#include
#include
#include "dpjsoftmain.h"

#define                Nop                _nop_();_nop_();_nop_();_nop_();

unsigned int i=0,o=0,sum=0;
//unsigned char sum;




unsigned char data Configure[25];        //存储局端发送过来的配置命令
unsigned char data Feedback[25];        //存储回给局端的命令


void com_inerrupt(void) interrupt 4 using 2
{
  if(RI)
    {
            RI=0;
            Configure=SBUF;
                i++;
    }
}





main()
{
//        InitialProcess();
         TMOD = 0x20;  /* T/C1 方式2*/
         TL1  = 0xf7;   
         TH1  = 0xf7;  
         PCON =        0x80;
         TR1  = 1;
         SCON = 0x50;  /* 串口方式1*/
         ET1  = 0;
         ES   = 1;     
         EA   = 1;
         WIDTH=0,ATT1=1,ATT2=0,CMC1=1;
                 for(i=0;i<24;i++)
                {
                        Configure=0x00;
                }
                 Configure[1]=0x10;
        while(1)
        {       
                        ES=1;
                        DE1=0;
                        RI=0;
                        while(1)
                        {
                                if(i==24)
                                {
                                        break;
                                }
                        }

                        ES=1;
                        DE1=1;
                        TI=0;
                       
                        for(i=0;i<24;i++)
                        {
                                SBUF = Configure;
                                while(TI==0);
                                TI=0;                       
                        }               
                       
        }
}
程序变的回不上来数据,但是很奇怪,由p89c669发送第一串长度为24字节的数据后,再由p89c669发送一串长度为16字节的数据后,w78e516b开始不停的回第一次发送的24字节的数据,所以我觉得数据应该是收下来了.

本人刚接触单片机没多久,而且学的很不系统,所以我估计中断那一块写的乱七八咱的..望高手们多指点指点.

最新回复

呃..这里的帖子居然不能编辑.. 采用中断的时候有个地方写错了..主函数里接收的部分应该是 while(1) {         if(READ_COUNT==24)         {                 break;         } } 中断中的i改成READ_COUNT 顺便顶一记..  详情 回复 发表于 2007-11-6 10:45
点赞 关注

回复
举报

76

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
呃..这里的帖子居然不能编辑..
采用中断的时候有个地方写错了..主函数里接收的部分应该是
while(1)
{
        if(READ_COUNT==24)
        {
                break;
        }
}
中断中的i改成READ_COUNT
顺便顶一记..
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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