欧美午夜欧美,台湾成人av,久久av一区,最近看过的日韩成人

電子開發(fā)網(wǎng)

電子開發(fā)網(wǎng)電子設(shè)計(jì) | 電子開發(fā)網(wǎng)Rss 2.0 會(huì)員中心 會(huì)員注冊(cè)
搜索: 您現(xiàn)在的位置: 電子開發(fā)網(wǎng) >> 電子開發(fā) >> 單片機(jī) >> 正文

單片機(jī)雙機(jī)點(diǎn)對(duì)點(diǎn)通信的從機(jī)程序

作者:佚名    文章來源:本站原創(chuàng)    點(diǎn)擊數(shù):    更新時(shí)間:2011/5/22

/* 雙機(jī)點(diǎn)對(duì)點(diǎn)通信的從機(jī)部分 */
#ifndef __P2P_S_C__
#define __P2P_S_C__

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

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

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

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)閉所有中斷

 /* 進(jìn)入設(shè)備應(yīng)答階段 */
 while(1)
 {
  /* 如果接收到的數(shù)據(jù)不是握手信號(hào)__RDY_,則繼續(xù)等待 */
  while(tmp != __RDY_)
  {
   RI = 0;
   while(!RI);
   tmp = SBUF;
   RI = 0;
  }
  /* 程序通過檢測(cè)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_信號(hào)
  {
   TI = 0;
   SBUF = __BUSY_;
   while(!TI);
   TI = 0;
   continue;
  }
  TI = 0;    // 否則發(fā)送__OK_信號(hào)表示可以接收數(shù)據(jù)
  SBUF = __OK_;
  while(!TI);
  TI = 0;
  /* 數(shù)據(jù)接收 */
  tmp = 0xff;
  while(tmp == 0xff)
  {
   tmp = recv_data(buf);    // 校驗(yàn)失敗返回0xff,接收成功則返回0
  }
  Beep_ok();    // 蜂鳴表示數(shù)據(jù)接收成功 
 }
}

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

/* 接收數(shù)據(jù),注意該函數(shù)使用buf指向的緩沖區(qū)保存數(shù)據(jù),在數(shù)據(jù)末尾使用’\0’表示數(shù)據(jù)結(jié)束
 * 返回值為0,數(shù)據(jù)校驗(yàn)成功,返回值為0xff,數(shù)據(jù)校驗(yàn)失敗  
 */
unsigned char recv_data(unsigned char *buf)
{
 unsigned char len;    // 該字節(jié)用于保存數(shù)據(jù)長(zhǎng)度
 unsigned char ecc;    // 該字節(jié)用于保存校驗(yàn)字節(jié)
 unsigned char i,tmp;
 /* 接收數(shù)據(jù)長(zhǎng)度 */
 RI = 0;
 while(!RI);
 len = SBUF;
 RI = 0;
 /* 使用len的值為校驗(yàn)字節(jié)ecc賦初值 */
 ecc = len;
 /* 接收數(shù)據(jù) */
 for(i=0; i<len; i++)
 {
  while(!RI);
  *buf = SBUF;    // 接收數(shù)據(jù)
  ecc = ecc^(*buf);    // 進(jìn)行字節(jié)校驗(yàn)
  RI = 0;
  buf++;
 }
 *buf = 0;    // 表示數(shù)據(jù)結(jié)束
 /* 接收校驗(yàn)字節(jié) */
 while(!RI);
 tmp = SBUF;
 RI = 0;
 /* 進(jìn)行數(shù)據(jù)校驗(yàn) */
 ecc = tmp^ecc;
 if(ecc != 0)    // 校驗(yàn)失敗
 {
  *(buf-len) = 0;    // 清空數(shù)據(jù)緩沖區(qū)
  TI = 0;    // 發(fā)送校驗(yàn)失敗信號(hào)
  SBUF = __ERR_;
  while(!TI);
  TI = 0;
  return 0xff;    // 返回0xff表示校驗(yàn)錯(cuò)誤
 }
 TI = 0;    // 校驗(yàn)成功
 SBUF = __SUCC_;
 while(!TI);
 TI = 0;
 return 0;    // 校驗(yàn)成功,返回0
}


#endif

Tags:單片機(jī),c語言,通信  
責(zé)任編輯:admin
相關(guān)文章列表
【實(shí)例詳解】三菱FX3U系列PLC和臺(tái)達(dá)變頻器通信工程 ADPRW指令詳解
小白必看 | 西門子S7-200SMART通信概述
基于AT89C52單片機(jī)控制的雙軸太陽自動(dòng)跟蹤系統(tǒng)設(shè)計(jì)
ESP32單片機(jī)入門篇
開放式通信之MODBUS TCP通信_(tái)西門子PLC MODBUS-TCP通信
超聲波測(cè)距+溫度+報(bào)警的單片機(jī)代碼_51單片機(jī)超聲波測(cè)距C語言程序
S7-1200+ModbusRTU主站調(diào)用多從站速度延遲問題_MODBUS通信延遲
S7 200 SMART modbus rtu 通信問題,數(shù)量多會(huì)不會(huì)延時(shí)?S7-200 M
RS485通信----基本原理+電路圖_RS485通信原理_RS485電路圖
RS485通信問題、解決方法及基本原理講解_RS485通訊原理
解讀Modbus和tcp的區(qū)別和聯(lián)系_Modbus RTU和TCP/IP區(qū)別
Modbus RTU通信教程 STEP 7-MicroWIN SMART軟件 從站的配置及編程
基于51單片機(jī)的恒溫控制器系統(tǒng) protues+keil c
西門子plc s7-200smart modbus-tcp通信實(shí)例編程詳細(xì)指導(dǎo),STEP7軟
七段數(shù)碼管顯示原理研究_數(shù)碼管顯示0~9對(duì)應(yīng)的段碼
單片機(jī)C語言編程入門教程  流水燈程序示例
PLC通信入門教程:通信從來都不難,就是幾個(gè)0和1
51單片機(jī)學(xué)習(xí)筆記直流電機(jī)驅(qū)動(dòng)(PWM)C語言程序
基于51單片機(jī)—多功能秒表,多功能計(jì)時(shí)器C語言程序
西門子plc S7-200 SMART與丹佛斯變頻器之間Modbus通信
請(qǐng)文明參與討論,禁止漫罵攻擊,不要惡意評(píng)論、違禁詞語。 昵稱:
1分 2分 3分 4分 5分

還可以輸入 200 個(gè)字
[ 查看全部 ] 網(wǎng)友評(píng)論
最新推薦
關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁(yè)面
下到頁(yè)底
晶體管查詢
主站蜘蛛池模板: 吴桥县| 宝坻区| 新营市| 荥经县| 临西县| 尼木县| 建始县| 五大连池市| 富蕴县| 昭平县| 万宁市| 永定县| 吉林市| 景宁| 西和县| 石阡县| 淳化县| 横峰县| 高清| 英吉沙县| 南城县| 新源县| 南宁市| 城固县| 贡山| 东丽区| 米脂县| 凤庆县| 凤冈县| 竹溪县| 漳平市| 秦皇岛市| 塔城市| 雷波县| 罗田县| 临潭县| 武川县| 定陶县| 喜德县| 华坪县| 曲靖市|