小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

單片機雙機點對點通信的從機程序

 共同成長888 2015-07-13

單片機雙機點對點通信的從機程序 

/* 雙機點對點通信的從機部分 */ 
#ifndef __P2P_S_C__ 
#define __P2P_S_C__

#include <AT89X51.H> 
#include <STRING.H>

#define __MAX_LEN_ 64    // 數(shù)據(jù)最大長度 
#define _MHZ_ 11    // 設(shè)置單片機使用的晶振頻率(11.0592MHz)

/* 以下為程序協(xié)議中使用的握手信號 */ 
#define __RDY_ 0x06    // 主機開始通信時發(fā)送的呼叫信號 
#define __BUSY_ 0x15    // 從機忙應(yīng)答 
#define __OK_ 0x00    // 從機準(zhǔn)備好 
#define __SUCC_ 0x0f    // 數(shù)據(jù)傳送成功 
#define __ERR_ 0xf0    // 數(shù)據(jù)傳送錯誤

void init_serial();    // 串口初始化 
unsigned char recv_data(unsigned char *buf);    // 接收數(shù)據(jù) 
void Beep_ok();    // 蜂鳴表示數(shù)據(jù)接收ok,該函數(shù)代碼未給出

void main() 

 char buf[__MAX_LEN_]; 
 unsigned char i = 0; 
 unsigned char tmp = 0xff;

 /* 串口初始化 */ 
 init_serial();    // 初始化串口 
 EA = 0;    // 關(guān)閉所有中斷

 /* 進入設(shè)備應(yīng)答階段 */ 
 while(1) 
 { 
  /* 如果接收到的數(shù)據(jù)不是握手信號__RDY_,則繼續(xù)等待 */ 
  while(tmp != __RDY_) 
  { 
   RI = 0; 
   while(!RI); 
   tmp = SBUF; 
   RI = 0; 
  } 
  /* 程序通過檢測P0口數(shù)據(jù)判斷當(dāng)前設(shè)備狀態(tài),若P0=0xab,表示當(dāng)前設(shè)備忙 */ 
  P0 = 0xff; 
  tmp = P0; 
  if(tmp == 0xab)    // 如果P0口數(shù)據(jù)為0x,則當(dāng)前設(shè)備忙,發(fā)送__BUSY_信號 
  { 
   TI = 0; 
   SBUF = __BUSY_; 
   while(!TI); 
   TI = 0; 
   continue; 
  } 
  TI = 0;    // 否則發(fā)送__OK_信號表示可以接收數(shù)據(jù) 
  SBUF = __OK_; 
  while(!TI); 
  TI = 0; 
  /* 數(shù)據(jù)接收 */ 
  tmp = 0xff; 
  while(tmp == 0xff) 
  { 
   tmp = recv_data(buf);    // 校驗失敗返回0xff,接收成功則返回0 
  } 
  Beep_ok();    // 蜂鳴表示數(shù)據(jù)接收成功  
 } 
}

/* 初始化串口 */ 
void init_serial() 

 TMOD = 0x20; //定時器T1使用工作方式2 
 TH1 = 250;    // 設(shè)置初值 
 TL1 = 250; 
 TR1 = 1;    // 開始計時 
 PCON = 0x80;    // SMOD = 1 
 SCON = 0x50; //工作方式1,波特率9600bps,允許接收 
}

/* 接收數(shù)據(jù),注意該函數(shù)使用buf指向的緩沖區(qū)保存數(shù)據(jù),在數(shù)據(jù)末尾使用’\0’表示數(shù)據(jù)結(jié)束 
 * 返回值為0,數(shù)據(jù)校驗成功,返回值為0xff,數(shù)據(jù)校驗失敗   
 */ 
unsigned char recv_data(unsigned char *buf) 

 unsigned char len;    // 該字節(jié)用于保存數(shù)據(jù)長度 
 unsigned char ecc;    // 該字節(jié)用于保存校驗字節(jié) 
 unsigned char i,tmp; 
 /* 接收數(shù)據(jù)長度 */ 
 RI = 0; 
 while(!RI); 
 len = SBUF; 
 RI = 0; 
 /* 使用len的值為校驗字節(jié)ecc賦初值 */ 
 ecc = len; 
 /* 接收數(shù)據(jù) */ 
 for(i=0; i<len; i++) 
 { 
  while(!RI); 
  *buf = SBUF;    // 接收數(shù)據(jù) 
  ecc = ecc^(*buf);    // 進行字節(jié)校驗 
  RI = 0; 
  buf++; 
 } 
 *buf = 0;    // 表示數(shù)據(jù)結(jié)束 
 /* 接收校驗字節(jié) */ 
 while(!RI); 
 tmp = SBUF; 
 RI = 0; 
 /* 進行數(shù)據(jù)校驗 */ 
 ecc = tmp^ecc; 
 if(ecc != 0)    // 校驗失敗 
 { 
  *(buf-len) = 0;    // 清空數(shù)據(jù)緩沖區(qū) 
  TI = 0;    // 發(fā)送校驗失敗信號 
  SBUF = __ERR_; 
  while(!TI); 
  TI = 0; 
  return 0xff;    // 返回0xff表示校驗錯誤 
 } 
 TI = 0;    // 校驗成功 
 SBUF = __SUCC_; 
 while(!TI); 
 TI = 0; 
 return 0;    // 校驗成功,返回0 
}


#endif

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多