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

📄 slave.c

📁 PC机与单片机通过串口进行
💻 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;
  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 + -