导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→我使用的一个PC-MCU通讯程序(实用的)

* 58288: pc机与51的数据传输问题

   lenglianxi 
lenglianxi发表的帖子 

 我使用的一个PC-MCU通讯程序(实用的)

char xdata *  pSend;
bit  bSerRcved;

// 假设所有的数据存放在XDATA中
// 
// 在发送数据的时候将pSend设置好,指向要发送的数据
// 数据包的格式
// START_F + CMD + DATAS + CHECKSUM + END_F
// 定义 START = 0X7E, END_F = 0X7F, ESC_F = 0X7D
// 当数据中包含以上3个字符时, 转义, 方法是
// 转义后的字符 = 转移前的字符 ^ 0x20
// eg : 30, 40, 7e, 55, 7f --->   30, 40, 7d, 5e, 55, 7d, 5f
//             ---     ---              -------     ------ 
// 

// lenglianxi@tom.com

SerProc() interrupt 4 using 2
{

 static char xdata * pRcv;
 static uchar  cCheckSum;
 static bit  bEsc, bRcving;
 uchar cTemp;

 if(TI){
  TI = 0;
  if(bSendFin){
   bSendFin = 0;
   REN = 1;
  } 
  else{
   cTemp = *pSend;
   pSend++;
   SBUF = cTemp;
   if(cTemp == END_F)
    bSendFin = 1;
  }
 }
  // recived some data
 else{
  RI = 0;
  cTemp = SBUF;
 
  switch(cTemp){
  case START_F:
   pRcv = SerBuf+1;
   SerBuf[0] = START_F;
   cCheckSum = START_F;
   bEsc = 0;
   bRcving = 1;
   break;

  case END_F:
   ES = 0;
   cCheckSum += END_F;
   bSerRcved = 1;
   bCheckSumErr = cCheckSum == 0 ? 0 : 1;
   bRcving = 0;
   break;

  case ESC_F:
   bEsc = 1;
   break;

  default:
   if(bRcving){
    if(bEsc)
     *pRcv = cTemp ^ 0x20;
    else
     *pRcv = cTemp;
    cCheckSum += *pRcv;
       pRcv ++;
    bEsc = 0;
   }
  }
 }
}


发表时间:2004年7月16日13:36:59

  
回复该帖

本主题共有 26 帖,分页:>>>>>该主题的所有内容[26]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  58297.[详细]结果
摘要: 我发送12345678,结果收到的是0p |6|? s |&|? p06|?0p |6|?   &n......(113字)
- [sdgaga][896次] 2004年7月16日

  58468.[详细]你怎么说有问题呢?我刚刚用我的硬件验证了这个程序,是没问题的阿?编译后的程序如下:flag&nbs..
摘要:你怎么说有问题呢?我刚刚用我的硬件验证了这个程序,是没问题的阿? 编译后的程序如下: flag  equ  10h  beep   ......(1501字)
- [justrong][1057次] 2004年7月19日

  58617.[详细]justrong,拜托了
摘要:......(无内容)
- [sdgaga][899次] 2004年7月21日

[上一篇帖子]:[救急]谁有老版本的orCAD、能打开*.sch文件的那种……如题、 /P P 大家谁用用DOS
[下一篇帖子]:请各位大侠帮忙,有谁用过该片子呀