欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1598|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)主從結(jié)構(gòu)的多及通訊

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:353273 發(fā)表于 2018-6-17 15:13 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include<reg51.h>
#include<string.h>
#define addr     0x01//從機(jī)1的地址
#define _SUCC_   0x0f//數(shù)據(jù)傳送成功
#define _ERR_    0xf0//數(shù)據(jù)傳送失敗
unsigned char aa=0xff;//主機(jī)與從機(jī)之間通信標(biāo)志
unsigned char Buff[20];//數(shù)據(jù)緩沖區(qū)
//串口初始化函數(shù)
void serial_init()
{
TMOD=0x20; //定時(shí)器1工作于方式2
TH1=0xfd;  
TL1=0xfd; //波特率為9600
PCON=0;
SCON=0xd0;  //串口工作于方式3
TR1=1;  //開(kāi)啟定時(shí)器
TI=0;
RI=0;
}
//接收數(shù)據(jù)函數(shù)
unsigned char RECE_data(unsigned char *Buff)
{
unsigned char i,temp;
unsigned char lenth;
unsigned char check;
RI=0;     //接收數(shù)據(jù)長(zhǎng)度
while(!RI);
if(RB8==1)    //若接收到地址幀,則返回0xfe
  return 0xfe;
lenth=SBUF;
RI=0;     

check=lenth;
for(i=0;i<lenth;i++) //接收數(shù)據(jù)
{
  while(!RI);
  if(RB8==1)   //若接收到地址幀,則返回0xfe
   return 0xfe;
  Buff=SBUF;   
  check=check^(Buff);
  RI=0;
}
while(!RI);    //接收校驗(yàn)字節(jié)
if(RB8==1)    //若接收到地址幀,則返回0xfe
  return 0xfe;
temp=SBUF;
RI=0;

check=temp^check;  //將從主機(jī)接收到的校驗(yàn)碼與自己計(jì)算的校驗(yàn)碼比對(duì)
if(check!=0)   //校驗(yàn)碼不一致,表明數(shù)據(jù)接收錯(cuò)誤,向主機(jī)發(fā)送錯(cuò)誤信號(hào),函數(shù)返回0xff
{
  TI=0;
  TB8=0;
  SBUF=_ERR_;
  while(!TI);
  TI=0;
  return 0xff;
}
TI=0;           //校驗(yàn)碼一致,表明數(shù)據(jù)接收正確,向主機(jī)發(fā)送成功信號(hào),函數(shù)返回0x00
TB8=0;
SBUF=_SUCC_;
while(!TI);
TI=0;
return 0;
}
void main()
{
serial_init();
while(1)
{
  SM2=1;              //接收地址幀
  while(aa!=addr)  //從機(jī)等待主機(jī)請(qǐng)求自己的地址
  {
   RI=0;
   while(!RI);
   aa=SBUF;
   RI=0;
  }
  TI=0;     //一旦被請(qǐng)求,從機(jī)返回自己的地址作為應(yīng)答,等待接收數(shù)據(jù)
  TB8=0;
  SBUF=addr;
  while(!TI);
  TI=0;
  SM2=0;                  //接收數(shù)據(jù)幀
  aa=0xff;    //從機(jī)接收數(shù)據(jù),并將數(shù)據(jù)保存到數(shù)據(jù)緩沖區(qū)
  while(aa==0xff)
  {
   aa=RECE_data(Buff);
  }
  if(aa==0xfe)
   continue;
  P1=Buff[1];      //查看接收到的數(shù)據(jù)
}
}

主機(jī)程序
#include<reg51.h>
#include<string.h>
#define _SUCC_   0x0f//數(shù)據(jù)傳送成功
#define _ERR_    0xf0//數(shù)據(jù)傳送失敗
unsigned charTable[9]={0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
unsigned char Buff[20];  //數(shù)據(jù)緩沖區(qū)
unsigned char temp=0xff;
sbit KEY1=P1^6;
sbit KEY2=P1^7;
//unsigned char addr;
//延時(shí)1ms函數(shù)
void delay_1ms(unsigned int t)
{
unsigned int x,y;
for(x=t;x>0;x--)
for(y=110;y>0;y--);
}
//緩沖區(qū)初始化
void Buff_init()
{
unsigned char i;    //將Table里的數(shù)據(jù)放到緩沖區(qū)里
for(i=0;i<9;i++)  
{
Buff= Table;
delay_1ms(100);
}
}
//串口初始化函數(shù)
void serial_init()
{
TMOD=0x20; //定時(shí)器1工作于方式2
TH1=0xfd;
TL1=0xfd; //波特率為9600
PCON=0;
SCON=0xd0; //串口工作于方式3
TR1=1; //開(kāi)啟定時(shí)器
TI=0;
RI=0;
}
//發(fā)送數(shù)據(jù)函數(shù)
void SEND_data(unsigned char *Buff)
{
unsigned char i;
unsigned char lenth;
unsigned char check;
lenth=strlen(Buff);      //計(jì)算數(shù)據(jù)長(zhǎng)度
check=lenth;
TI=0;        //發(fā)送數(shù)據(jù)長(zhǎng)度
TB8=0;     //發(fā)送數(shù)據(jù)幀
SBUF=lenth;
while(!TI);
TI=0;
        
for(i=0;i<lenth;i++)  //發(fā)送數(shù)據(jù)
{
check=check^Buff;
TB8=0;
SBUF=Buff;   
while(!TI);
TI=0;
}
TB8=0;     //發(fā)送校驗(yàn)字節(jié)
SBUF=check;   
while(!TI);
TI=0;   
}
//向指定從機(jī)地址發(fā)送數(shù)據(jù)
void ADDR_data(unsigned addr)
{
while(temp!=addr) //主機(jī)等待從機(jī)返回其地址作為應(yīng)答信號(hào)
{
TI=0;    //發(fā)送從機(jī)地址
TB8=1;    //發(fā)送地址幀
SBUF=addr;
while(!TI);
TI=0;
  
RI=0;
while(!RI);
temp=SBUF;
RI=0;
}
temp=_ERR_;  //主機(jī)等待從機(jī)數(shù)據(jù)接收成功信號(hào)
while(temp!=_SUCC_)
{
SEND_data(Buff);
RI=0;
while(!RI);
temp=SBUF;
RI=0;
}
}      
void main()
{
Buff_init();
serial_init();
while(1)
{
if(KEY1==0)
  {
  delay_1ms(5);
  if(KEY1==0)
   {
   while(!KEY1);
   ADDR_data(0x01);
   }
  }
if(KEY2==0)
  {
  delay_1ms(5);
  if(KEY2==0)
   {
   while(!KEY2);
   ADDR_data(0x02);
   }
  }
}

}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表