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

📄 eye5.c

📁 c语言和汇编语言混合编程实例详解.rar
💻 C
字号:
/*====================================================================
*这是在DS87C520/W77E58单片机上运行的程序,文件名为eye5.c
*功能:DS87C520/W77E58作为中转站一方面与上位机(PC机或工控机)通讯,
*      另一方面与下位机(AT89C52单片机作为分站)通讯。与上位机通讯,
*      使用RS232接口,以DS87C520/W77E58的SCON1通讯口通讯,T1作波特
*      率发生器, 波特率为9600;与下位机通讯-本例备有两台下位机,使
*      用RS485接口。以DS87C520/W77E58的SCON0通讯口通讯,T2作波特率
*      发生器, 波特率为9600。配套上位机程序为xsa3.c。配套下位机程序
*      为eye121.c。
======================================================================*/
#include <w77e58.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
void timedelay(uint timess);

uchar n,kc1,kc2,aa,coni;
uint r;
uchar xdata rbut[12],rbut2[12];
uchar xdata tbut[12];
uchar xdata rbut3[16];
uchar xdata tbut3[42];

sbit p13=P1^3;
sbit p14=P1^4;
void timedelay(uint timess)
{
 uint tj;
 for (tj=timess;tj>0;tj--){;}
}

sio0() interrupt 4  using 1
{
    if (aa!=0x1) goto two;
one:if (SM2==0) goto noar;
    if (SBUF!=0x01) goto noads;
    SM2=0;
noads:RI=0;
    TI=0;
    return;
noar:;
    rbut[kc2]=SBUF;
    kc2++;
    if (kc2!=10) goto noads;
    ES=0;
    SM2=1;
    EA=0;
    goto noads;
two:if (aa!=0x2) goto noads2;
    if (SM2==0) goto noar2;
    if (SBUF!=0x02) goto noads2;
    SM2=0;
noads2:RI=0;
    TI=0;
    return;
noar2:;
    rbut2[kc2]=SBUF;
    kc2++;
    if (kc2!=10) goto noads2;
    ES=0;
    SM2=1;
    EA=0;
    goto noads2;
}
sio1() interrupt 7  using 2
{
  if (RI_1==0) {
      if  (TI_1==0) {RI_1=0;TI_1=0;return;}
      SBUF1=tbut3[kc1];
      kc1++;
      if (kc1!=42) {RI_1=0;TI_1=0;return;}
      kc1=0;
      SCON1=0xf0;
      loo1:if (TI_1==0) goto loo1;
      RI_1=0;
      TI_1=0;
  }
  if (SM2_1==0) {
    rbut3[kc2]=SBUF1;
    kc2++;
    if (kc2!=15) {RI_1=0;TI_1=0;return;}
    kc2=0;
    SCON1=0xe8;
    SBUF1=0xff;
    TB8_1=0;
    SM2_1=0;
    RI_1=0;
    TI_1=0;
  }
  if (SBUF1!=1) {RI_1=0; return;}
  SM2_1=0;
  RI_1=0;
}

void main()
{
  SP=0xdf;
  timedelay(10000);
  kc1=0;
  kc2=0;
  aa=0;
  PMR=0x01;
  for (coni=0;coni<10;coni++)
  {
    tbut[coni]=0x00;
    rbut[coni]=coni*3;
    rbut2[coni]=coni*2;
  }
  T2CON=0;  //11.0592mhz,9600=ffdch;1200=fee0h
  RCLK  =1;
  TCLK  =1;
  RCAP2H=0xff;
  RCAP2L=0xdc;
  TR2=1;
  PS=1;
  timedelay(10000);
loop4: p14=1;   //准备发送
  timedelay(20000);
  SCON=0xe8;
  ES=0;
  EA=0;
  SBUF=01;
loo1:if (TI==0) goto loo1;
   TI=0;
   SM2=0;
   SBUF=tbut[kc1];
   kc1++;
   if (kc1!=11) goto loo1;
   p14=0;       //准备接收
   SCON=0xf0;
   ES=1;
   EA=1;
   aa=1;
   r=0;
loo:;
  if (kc2!=10) {r++; if(r>65530) {goto sss;} else {goto loo;}}
sss:kc1=0;
  kc2=0;
  p14=1;        //准备发送
  timedelay(10000);
  SCON=0xe8;
  ES=0;
  EA=0;
  SBUF=02;
loo2:if (TI==0) goto loo2;
   TI=0;
   SM2=0;
   SBUF=tbut[kc1];
   kc1++;
   if (kc1!=11) goto loo2;
   p14=0;       //准备接收
   SCON=0xf0;
   ES=1;
   EA=1;
   aa=2;
   r=0;
loo3:;
   if (kc2!=10) {r++; if(r>65530) {goto loop;} else {goto loo3;}}
loop:;
  for (coni=0;coni<10;coni++)
  {
    tbut3[coni]=rbut[coni];
  }
  for (coni=10;coni<20;coni++)
  {
    tbut3[coni]=rbut2[coni-10];
  }
   for (coni=20;coni<42;coni++)
  {
    tbut3[coni]=coni-20;
  }
  kc1=0;
  kc2=0;
  TMOD=0x20;
  PCON=0x0;
  TL1=0xfd;   //6mhz, smod=0,600== e6;1200==0xf3
  TH1=0xfd;   //11.0592mhz,smod=0,1200==0xe8;9600==0xfd
  TR1=1;      //12mhz,smod=0,1200== e6;9600==0xfd
  CKCON=0x00;
  SADDR1=01;
  SADEN1=0;
  SCON1=0xf0;
  PS1=1;
  ES1=1;
  EA=1;
  while(1);
}

⌨️ 快捷键说明

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