⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 slave.c

📁 不少单片机C代码
💻 C
字号:
#include <reg51.h>
#define  uchar unsigned char
#define  SLAVE  0x02
#define  BN  16
uchar idata trbuf[16];
uchar idata rebuf[16];
bit  tready;
bit  rready;

void main(void)
{ 
  TMOD=0x20;
  TL1=0xfd;
  TH1=0xfd;
  PCON=0x00;
  TR1=1;
  SCON=0xf0;
  ES=1;EA=1;
  while(1) {tready=1;rready=1;}
}

void ssio(void) interrupt 4 using 1
{ void str(void);
  void sre(void);
  uchar a,i;
  RI=0;
  ES=0;
  if(SBUF!=SLAVE)  {ES=1;goto reti;}
  SM2=0;
  SBUF=SLAVE;
  while(TI!=1);TI=0;
  while(RI!=1);RI=0;
  if(RB8==1) {SM2=1;ES=1;goto reti;}
  a=SBUF;
  if (a==0x01){
    if(rready==1) SBUF=0x01;
    else SBUF=0x00;
    while(TI!=1);TI=0;
    while(RI!=1);RI=0;
    if (RB8==1) {SM2=1;ES=1;goto reti;}
    sre();
  }
  else {
    if(a==0x02){
      if(tready==1) SBUF=0x02;
      else SBUF=0x00;
      while(TI!=1);TI=0;
      while(RI!=1);RI=0;
      if (RB8==1) {SM2=1;ES=1;goto reti;}
      str();
    }
    else {
      SBUF=0x80;
      while(TI!=1); TI=0;
      SM2=1;ES=1;
    }
  }
  reti:;
}

void str(void)
{ uchar p,i;
  tready=0;
  do{ p=0;
     for(i=0;i<BN;i++) 
     {SBUF=trbuf[i];
      p+=trbuf[i];
      while(TI!=1);
      TI=0;
     }
     SBUF=p;
     while(TI==0);TI=0;
     while(RI==0);RI=0;
   } while(SBUF!=0);
  SM2=1;
  ES=1;
}
         
void sre(void)
{ uchar p,i; 
  rready=0;
  while(1)
  { p=0;
    for(i=0;i<BN;i++) 
     {while(RI!=1);RI=0;
      rebuf[i]=SBUF;
      p+=rebuf[i];
     }
    while(RI!=1);RI=0;
    if(SBUF==p) {SBUF=0x00;break;}
    else {
     SBUF=0xff;
     while(TI==0);TI=0;
    }
  }
  SM2=1;
  ES=1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -