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

📄 comdat.c

📁 ASC 信号机控制程序,国内最先进的信号机控制程序
💻 C
字号:
#include <absacc.h>
#include <reg51.h>

extern char data_flag;
sbit   internalled=P1^2;
sbit   watch_dog=P1^3;
unsigned char pf;
unsigned char xdata pq;
unsigned int xdata temm;
unsigned int iiil;
bit comm_test_flag;
extern void reset_dog();
//extern void send_0x83();
extern void send_0x84();
extern void send_0x85();
//extern void send_0x86();
extern void message_start();
extern void send_0x87();
extern char send_0x88(unsigned int se);
char  wirte28c64(unsigned int length,unsigned intaddr_ram,unsigned intaddr_eeprom);

/*指挥中心向路口机下传数据的处理程序*/
comm_deal()
{
  char load;
  unsigned char i;
    if(data_flag<0x20){
    switch(data_flag){
        case 0x01:break;
        case 0x02:load=wirte28c64(   7,0x7000,0x8009);
                      XBYTE[0XC000]=XBYTE[0X800e];
                      XBYTE[0XC002]=XBYTE[0X800d];
                      XBYTE[0XC004]=XBYTE[0X800c];
                      XBYTE[0XC007]=XBYTE[0X800b];
                      XBYTE[0XC008]=XBYTE[0X800a];
                      XBYTE[0XC009]=XBYTE[0X8009];
                      XBYTE[0XC006]=XBYTE[0X800f];
                                                      break;
        case 0x03:load=wirte28c64(   0,0x7000,0x8000);break;
        case 0x04:load=wirte28c64(   3,0x7000,0x8010);
                  load=wirte28c64(   3,0x7000,0xa001);
                  XBYTE[0XA000]=7;                    break;
        case 0x05:load=wirte28c64(   2,0x7000,0x8014);break;
        case 0x06:load=wirte28c64(   5,0x7000,0x8016);break;
        case 0x07:load=wirte28c64(  32,0x7000,0x8020);break;
        case 0x08:load=wirte28c64(  32,0x7000,0x8040);break;
        case 0x09:load=wirte28c64(  32,0x7000,0x8060);break;
        case 0x0a:load=wirte28c64(  64,0x7000,0x8080);break;
        case 0x0b:load=wirte28c64(   8,0x7000,0x80c0);break;
        case 0x0c:load=wirte28c64(  14,0x7000,0x80c8);break;
        case 0x0d:load=wirte28c64(   1,0x7000,0x80e0);break;
        case 0x0e:load=wirte28c64(  1,0x7000,0x80ef);break;
        case 0x0f:load=wirte28c64(  48,0x7000,0x8130);break;
        case 0x10:load=wirte28c64(  48,0x7000,0x8160);break;
        case 0x11:load=wirte28c64( 100,0x7000,0x8110);break;
        case 0x12:load=wirte28c64(  18,0x7000,0x81ce);break;
        case 0x13:load=wirte28c64(1560,0x7000,0x8200);break;
        case 0x14:load=wirte28c64(1560,0x7000,0x8900);break;
        case 0x15:load=wirte28c64( 128,0x7000,0x8230);break;
        case 0x16:load=wirte28c64(  12,0x7000,0x80e1);break;
        case 0x17:load=wirte28c64(   2,0x7000,0x7e29);break;
        case 0x18:load=wirte28c64(  64,0x7000,0x8f40);break;
        case 0x19:load=wirte28c64(  20,0x7000,0x8f1e);break;
        case 0x1a:load=wirte28c64(   2,0x7000,0x8f32);break;
        case 0x1b:load=wirte28c64(   1,0x7000,0x8f34);break;
        case 0x1c:
                  i=XBYTE[0x7000];
                  load=wirte28c64(  98,0x7000,(i-1)*98+0X9200);
                                                      break;
        case 0x1d:load=wirte28c64(  72,0x7000,0x9FB0);break;
        case 0x1e:load=wirte28c64( 504,0x7000,0x9000);break;
        case 0x1f:load=wirte28c64(  72,0x7000,0x8fb0);break;

        default  :break;
                       }
                   /********************************************************/
                   /*                接收成功返回0x87                      */
                   /********************************************************/
                   /*
                   SBUF=0x66;
                   while(TI==0);TI=0;
                   SBUF=0x77;
                   while(TI==0);TI=0;
                   SBUF=0x88;
                   while(TI==0);TI=0;
                   SBUF=0x99;
                   while(TI==0);TI=0;
                   SBUF=0xaa;
                   while(TI==0);TI=0;
                   SBUF=0xbb;
                   while(TI==0);TI=0;
                   SBUF=0xcc;
                   while(TI==0);TI=0;
                   SBUF=0xdd;
                   while(TI==0);TI=0;
                   SBUF=0xee;
                   while(TI==0);TI=0;
                   SBUF=0xff;
                   while(TI==0);TI=0;       */

                   message_start();
                   SBUF=data_flag;                    /*发送数据标识*/
                   while(TI==0);TI=0;

                   if(data_flag==0x03){ /*信号机接收到指挥中心下传 55 AA之后回传 aa 55*/
                             comm_test_flag=1;           /*接受到中心测试包后对通信测试标志置位*/

                             SBUF=0x00;
                             while(TI==0);TI=0;
                             SBUF=0x02;
                             while(TI==0);TI=0;
                             SBUF=0xaa;
                             while(TI==0);TI=0;
                             SBUF=0x55;
                             while(TI==0);TI=0;
                             SBUF=0x02;
                             while(TI==0);TI=0;

                                    }else{
                                       SBUF=0x00;                    /*数据体长度*/
                                       while(TI==0);TI=0;
                                       SBUF=0x01;
                                       while(TI==0);TI=0;
                                       SBUF=0x87;                 /*写入成功返回值*/
                                       while(TI==0);TI=0;
                                       pf=data_flag+0x87;              /*校验和*/
                                       SBUF=pf;
                                       while(TI==0);TI=0;
                                                }

                    }else{
        switch (data_flag){
            case 0x26:XBYTE[0X7E06]=0X26;break;
            case 0x21:XBYTE[0X7E06]=0X21;break;
            case 0x22:XBYTE[0X7E06]=0X22;break;
            case 0x23:XBYTE[0X7E06]=0X23;break;
            case 0x24:XBYTE[0X7E06]=0X24;break;
            case 0x25:XBYTE[0X7E06]=0X25;
                      //load=wirte28c64(   2,0x7000,0x7e07);
                      break;
            default:break;
               }
            }
}
char  wirte28c64(unsigned int length,unsigned int addr_ram,unsigned int addr_eeprom)/*
unsigned int length;
unsigned int addr_ram;
unsigned int addr_eeprom; */
{

 unsigned char xdata *com_addr;
 unsigned char xdata *wr_addr;
 unsigned char it;
 com_addr=addr_ram;
 wr_addr =addr_eeprom;
 if (length<1000){
                 for(iiil=0;iiil<length;iiil++){
                      *wr_addr=*com_addr;
                      do{}while((*wr_addr)!=(*com_addr));
                      reset_dog();
                      internalled=~internalled;
                     // for(it=0;it<200;it++){}
                      wr_addr++;
                      com_addr++;
                      }
                   }
 if(length>1000){

        for(it=0;it<24;it++){
             for(iiil=0;iiil<64;iiil++){
                     reset_dog();
                     *wr_addr=*com_addr;
                     wr_addr++;
                     com_addr++;
                     }
                     wr_addr--;
                     do{}while((*wr_addr)&0x80!=1);
                     wr_addr++;
                  }
             for(iiil=0;iiil<length-1536;iiil++){
                   reset_dog();
                   *wr_addr=*com_addr;
                   do{reset_dog();}while((*wr_addr)!=(*com_addr));
                   wr_addr++;
                   com_addr++;
                  }
            }
            return 0;

 }
answer()
 {
 unsigned char xdata load;
 unsigned int  xdata che;
 pq=XBYTE[0X7E06];
 switch (pq){
       case 0x21:XBYTE[0X7E06]=0;
                 load=wirte28c64(  2,0x7000,0x7e07);
                 //send_0x83(); /*信号机状态数据包*/

                 break;
       case 0x22:XBYTE[0X7E06]=0;
                 load=wirte28c64(  2,0x7000,0x7e07);
                 //send_0x86(); /*实时流量数据包*/

                 break;
       case 0x23:XBYTE[0X7E06]=0;
                 load=wirte28c64(  2,0x7000,0x7e07);
                 send_0x84();  /*故障状态*/

                 break;
       case 0x24:XBYTE[0X7E06]=0;
                 load=wirte28c64(  2,0x7000,0x7e07);
                 //send_0x87();/*每天传送流量数据*/

                 break;
       case 0x25:XBYTE[0X7E06]=0;
                 load=wirte28c64(  2,0x7000,0x7e07);
                 send_0x85();/*设置参数查询*/
                 break;
       case 0x26:XBYTE[0X7E06]=0;
                 load=wirte28c64(  2,0x7000,0x7e07);
                 if(temm>=288)temm=0;
                 temm++;
                 che=temm*38;
                 //send_0x87();

                 send_0x88(che);
                // temm=0;

                 //do{
                 //   temm++;
                 //   che=(temm-1)*38;
                 //   send_0x88(che);
                 //   for(load=0;load<199;load++){
                 //        for(load0=0;load0<20;load0++)load=load;
                 //                         }
                 //   }while(temm<=288);

                 break;
       default:break;

    }
 }
send_fault()/*发送校验和错误返回数据包*/
{
 unsigned char i;
 unsigned char temp;
 temp=0x55;
 for(i=0;i<10;i++){
     temp=temp+0x11;
     SBUF=temp;
     while(TI==0);TI=0;
                   }
  SBUF=data_flag;
  while(TI==0);TI=0;
  SBUF=0x00;
  while(TI==0);TI=0;
  SBUF=0x01;
  while(TI==0);TI=0;
  SBUF=0x97;
  while(TI==0);TI=0;
  temp=(data_flag+0x97);
  SBUF=temp;
  while(TI==0);TI=0;
}
/*发送链路测试数据包*/
send_test()
{    /*
  unsigned char i;
  unsigned char temp;
  temp=0x55;
  for(i=0;i<10;i++){
          temp=temp+0x11;
          SBUF=temp;
          while(TI==0);TI=0;
                    }
  SBUF=0X03;while(TI==0);TI=0;
  SBUF=0X00;while(TI==0);TI=0;
  SBUF=0X02;while(TI==0);TI=0;
  SBUF=0X55;while(TI==0);TI=0;
  SBUF=0XAA;while(TI==0);TI=0;
  SBUF=0X02;while(TI==0);TI=0;
       */
}

⌨️ 快捷键说明

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