导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→发表看法:[huhu_long]下位机程序求助~~~



No.5690
作者:huhu_long
邮件:longxiao19851016@126.com
ID:104473
登陆:1次
文章数:1篇
最后登陆IP:
最后登陆:2008/5/9 16:06:59
注册:2008/5/9 16:06:59
财富:100
发帖时间:2008/5/9 16:11:25
发贴者IP:222.247.53.29
标题:huhu_long:下位机程序求助~~~
摘要:No.5690下位机程序求助~~~ 上位机程序自发自收都没问题,但和单片机通信时却没反应,希望大家帮小弟看看,不胜感激!!!!!
P.S:  大家可以不管具体的发送接收内容,帮忙看下这样子是否能正确地进行接收和发送
程序如下:
//******************************************************************
#include   <reg51.h>  
#include   <stdio.h>  

unsigned char Fun01_Len = 5; 
unsigned char Fun05_Len = 6; 
unsigned char *P1Addr;        
unsigned char SendBuf[5];  
unsigned char RcvBuf[16];      

void UART_Init()
{
 SCON = 0x50;  //选择工作方式一,并允许接收
 //PCON = 0x80;  //SMOD为1
 REN = 1;
 RI = 0;
 TI = 0;
}

void timer_Init()
{
 TMOD |= 0x20;  //选择定时器一,方式二工作
 TH1 = 0xfa;    //24MHz  9600波特率      TH1 = 256 - 24M/(32*12*9600);
 TL1 = 0xfa;
 TR1 = 1;       //开始计时
}

void system_Init()
{
 UART_Init();
 timer_Init();
}

void UART_Rcv()
{
                                     
 unsigned char i = 0;     
 while(!RI);  //允许接收位为0,等待
 RcvBuf[i++] = SBUF;    //此时接收到的是设备地址
 RI = 0;      //硬件自动置1,所以要把它清0
       
 if(RcvBuf[0] == 0x01)  //如果从机地址吻合,则继续执行,否则什么也不干
 {      
  while(!RI);
  RcvBuf[i++] = SBUF;   //此时接收到的是功能代码,包括(01、03、05、16)
  RI = 0;
  if(RcvBuf[1] == 0x01) //当前为读线圈命令,即读取P1口状态的命令
  {     
   while(i   < Fun01_Len)
   {
    while(!RI);
    RcvBuf[i++] = SBUF;
    RI = 0;
   }
   //此时,RcvBuf里面装的是01功能的一个数据帧,接下来应该对这些数据进行分析
  }
  else if(RcvBuf[1] == 0x05) //当前为更新P1口状态命令
  {     
   while(i   < Fun05_Len)
   {
     while(!RI);
    RcvBuf[i++ ......

>>返回讨论的主题



  发表回复
用户名   *您没有注册?
密码   *
验证码   * .
标题   *
心情
随便说说    我回答你    最新发现    得意的笑   
气死我了    真是没劲    坚决同意    表示反对   
大家过来    好奇怪哟    懒得理它    大家小心   
文件上传
内容


字体:      字体大小:    颜色:
粗体 斜体 下划线 居中 超级连接 Email连接 图片 Flash图片 Shockwave文件 realplay视频文件 Media Player视频文件 QuickTime视频文件 引用 飞行字 移动字 发光字 阴影字 查看更多的心情图标 背景音乐
点击加入表情
                         
选项
有回复时用短消息通知您?

   




老古网执行:16毫秒 最大:4266毫秒 查询6次