slave.c

来自「PC机与单片机通过串口进行」· C语言 代码 · 共 109 行

C
109
字号
#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 + =
减小字号Ctrl + -
显示快捷键?