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

📄 setbid.bak

📁 最先进的信号机程序,经过很多重要场合测试通过
💻 BAK
📖 第 1 页 / 共 2 页
字号:
#include <absacc.h>
#include <reg51.h>
extern unsigned char receive_flag;
extern unsigned char xdata checkdata[512];
extern unsigned int check_temp;
unsigned char lin;
unsigned char add_transparence=0;

unsigned int add_transparence_valid=0;
unsigned int add_final_number;

unsigned char xdata data_final_number;
unsigned int xdata datanumber=0;
unsigned char xdata tempdata;
unsigned char xdata add_bit;
unsigned char xdata answer_data[310];
unsigned char xdata data_final[310];

extern unsigned char xdata  RX_BUF[512];
extern unsigned int xdata  head;
extern unsigned int xdata  tail;
extern unsigned int re_flagaddr;
extern unsigned int xdata data_address;
extern unsigned char xdata checkdata[512];
extern unsigned short cal_crc(unsigned char *ptr,unsigned int len) ;
//发送数据到fpga
unsigned char tran_fpag(unsigned char flag)
{
  unsigned int i;
  unsigned char j;

  for(i=0;i<6;i++){
      re_flagaddr=0XA030+5*i;
      flag=XBYTE[re_flagaddr];
      if(flag==0x87){
                    XBYTE[re_flagaddr]=0x01;
                    XBYTE[0XA01F]=data_address>>8;
                    XBYTE[0XA020]=data_address;
                    break;
                    }
                   }
   switch(flag){
     case 0x94:if(checkdata[5]==0){
                    XBYTE[data_address]=0x94;       //  标识
                    data_address++;if(data_address>0xa7f0)data_address=0xa080;
                    for(i=0;i<289;i++)XBYTE[data_address]=XBYTE[0X5000+i];
                             data_address++;if(data_address>0xa7f0)data_address=0xa080;
                                   }else{
                    XBYTE[data_address]=0x94;
                    data_address++;if(data_address>0xa7f0)data_address=0xa080;
                       for(i=0;i<289;i++)XBYTE[data_address]=XBYTE[0X5121+i];
                             data_address++;if(data_address>0xa7f0)data_address=0xa080;
                                         }
                data_address--;
                if(data_address<0xa080)data_address=0xa7f0;
                XBYTE[0XA01F]=data_address>>8;
                XBYTE[0XA020]=data_address;
                break;
     case 0x95: j=checkdata[5];
                j=(j-1)*98;
                XBYTE[data_address]=0x95;       //  标识
                data_address++;if(data_address>0xa7f0)data_address=0xa080;
                for(i=0;i<98;i++){
                             XBYTE[data_address]=XBYTE[0X5242+i+j];
                             data_address++;if(data_address>0xa7f0)data_address=0xa080;
                                   }
                data_address--;
                if(data_address<0xa080)data_address=0xa7f0;
                XBYTE[0XA01F]=data_address>>8;
                XBYTE[0XA020]=data_address;
                break;
     case 0x96: j=checkdata[5];
                j=(j-1)*41;
                XBYTE[data_address]=0x96;       //  标识
                data_address++;if(data_address>0xa7f0)data_address=0xa080;
                for(i=0;i<41;i++){
                             XBYTE[data_address]=XBYTE[0X5e82+i+j];
                             data_address++;if(data_address>0xa7f0)data_address=0xa080;
                                   }
                data_address--;
                if(data_address<0xa080)data_address=0xa7f0;
                XBYTE[0XA01F]=data_address>>8;
                XBYTE[0XA020]=data_address;
                break;
     case 0x97: break;
     case 0x98:j=checkdata[5];
                j=(j-1)*74;
                XBYTE[data_address]=0x96;       //  标识
                data_address++;if(data_address>0xa7f0)data_address=0xa080;
                for(i=0;i<41;i++){
                             XBYTE[data_address]=XBYTE[0X63a2+i+j];
                             data_address++;if(data_address>0xa7f0)data_address=0xa080;
                                   }
                data_address--;
                if(data_address<0xa080)data_address=0xa7f0;
                XBYTE[0XA01F]=data_address>>8;
                XBYTE[0XA020]=data_address;
                break;
     case 0x99: XBYTE[data_address]=0x99;       //  标识
                data_address++;if(data_address>0xa7f0)data_address=0xa080;
                for(i=0;i<60;i++){
                             XBYTE[data_address]=XBYTE[0X6ce2+i];
                             data_address++;if(data_address>0xa7f0)data_address=0xa080;
                                   }
                data_address--;
                if(data_address<0xa080)data_address=0xa7f0;
                XBYTE[0XA01F]=data_address>>8;
                XBYTE[0XA020]=data_address;
                break;
     case 0x9a: break;
     case 0x9b: break;
     case 0x9c:break;
     default:break;
            }
     return 0;

}
//透明性检验
void add_transparences()
{
       switch(add_transparence){
		case 0 :if(add_bit==1){
		          add_transparence=1;
                          add_transparence_valid=0;
				}else{
				add_transparence=0;
                                add_transparence_valid=0;
				}break;
		case 1 :if(add_bit==1){
			 add_transparence=2;
                         add_transparence_valid=0;
				}else{
				add_transparence=0;
                                add_transparence_valid=0;
				}break;
		case 2:if(add_bit==1){
		        add_transparence=3;
                        add_transparence_valid=0;
				}else{
				add_transparence=0;
                                add_transparence_valid=0;
				}break;
		case 3:if(add_bit==1){
			add_transparence=4;
                        add_transparence_valid=0;
				}else{
				add_transparence=0;
                                add_transparence_valid=0;
				}break;
                case 4:if(add_bit==1){
			add_transparence=5;
                        add_transparence_valid=0;
				}else{
				add_transparence=0;
                                add_transparence_valid=0;
				}break;
                case 5:if(add_bit==1){
			add_transparence=0;
                        add_transparence_valid=1;
				}else{
				add_transparence=0;
                                add_transparence_valid=0;
				}break;
//		case 6:if(add_bit==1){
//			add_transparence=0;
//                        add_transparence_valid=1;
//				}else{
//			        add_transparence=0;
//                                add_transparence_valid=0;
//				}break;
                default:break;
			}

}

//设置时间
set_time()
{
  unsigned char *p;
  unsigned short check_temp;
  unsigned char i,j;

  //设置时间后用
  datanumber=0;
  data_final_number=0;
  tempdata=0;
  XBYTE[0XC009]=checkdata[5];  //year
  XBYTE[0XC008]=checkdata[6];  //month
  XBYTE[0XC007]=checkdata[7];  //date
  XBYTE[0XC004]=checkdata[8];  //hour
  XBYTE[0XC002]=checkdata[9];  //min
  XBYTE[0XC000]=checkdata[10];  //sec
  XBYTE[0XC006]=checkdata[11];  //day
  //应答
  answer_data[0]=0x00;
  answer_data[1]=0x43;
  answer_data[2]=0x00;
  answer_data[3]=0xc1;
  answer_data[4]=0xd3;
  answer_data[5]=0x00;
  p=&answer_data[0];
  check_temp=cal_crc(p,6);
  answer_data[6]=(check_temp>>8);    //crc
  answer_data[7]=check_temp;         //crc
  for(i=0;i<8;i++){
        for(j=0;j<8;j++){
           add_bit=(answer_data[i]>>(7-j))%2;
           add_transparences();
           tempdata=tempdata+(add_bit<<(7-data_final_number++));
           if((add_transparence_valid==1) && (i!=7))data_final_number++;
           if(data_final_number==8){
                 data_final[datanumber++]=tempdata;
		 data_final_number=0;
		 tempdata=0;
                                    }
                         }
                    }
        if( data_final_number!=0)data_final[datanumber++]=tempdata;
        SBUF=0X7E;
        while(TI==0);TI=0;
	for(i=0;i<datanumber;i++)
	{
	    SBUF=data_final[i];
            while(TI==0);TI=0;

	}
        head=0;tail=0;



}
//设置相位
set_phase()
{
  unsigned char *p;
  unsigned short check_temp;
  unsigned int i;
  unsigned int j;

  datanumber=0;
  data_final_number=0;
  //设置相位  0X5000
  if(checkdata[5]==0){
     for(i=0;i<289;i++)XBYTE[0X5000+i]=checkdata[5+i];
                  }else{
          for(i=0;i<289;i++)XBYTE[0X5121+i]=checkdata[5+i];
                        }
  //应答
  answer_data[0]=0x00;
  answer_data[1]=0x43;
  answer_data[2]=0xcc;
  answer_data[3]=0xc1;
  answer_data[4]=0xd4;

  p=&answer_data[0];
  check_temp=cal_crc(p,5);
  answer_data[5]=(check_temp>>8);    //crc
  answer_data[6]=check_temp;         //crc
  answer_data[7]=0x7e;

  for(i=0;i<8;i++){
        for(j=0;j<8;j++){
           add_bit=(answer_data[i]>>(7-j))%2;
           add_transparences();
           tempdata=tempdata+(add_bit<<(7-data_final_number++));
           if((add_transparence_valid==1) && (i!=7))data_final_number++;
           if(data_final_number==8){
                 data_final[datanumber++]=tempdata;
		 data_final_number=0;
		 tempdata=0;
                                    }
                         }
                    }
        if(data_final_number!=0)data_final[datanumber++]=tempdata;
        SBUF=0X7E;
        while(!TI);TI=0;
	for(i=0;i<datanumber;i++)
	{
	    SBUF=data_final[i];
            while(!TI);TI=0;
	}EA=0;
        head=0;tail=0;
        EA=1;
   //更改FPGA数据内容
      tran_fpag(0x94);
}
//设置阶段表
set_stage()
{
  unsigned char *p;
  unsigned short check_temp;

  unsigned int i;
  unsigned int j;

  datanumber=0;
  data_final_number=0;
  //设置阶段表
  j=(checkdata[5]-1)*98;
  for(i=0;i<98;i++)XBYTE[0X5242+i+j]=checkdata[5+i];  //一个阶段表写入

  //应答
  answer_data[0]=0X00;
  answer_data[1]=0X43;
  answer_data[2]=0XCC;
  answer_data[3]=0XC1;
  answer_data[4]=0XD5;
  p=&answer_data[0];
  check_temp=cal_crc(p,5);
  answer_data[5]=(check_temp>>8);    //crc
  answer_data[6]=check_temp;         //crc
  answer_data[7]=0x7e;

  for(i=0;i<8;i++){
        for(j=0;j<8;j++){
           add_bit=(answer_data[i]>>(7-j))%2;
           add_transparences();
          // if((add_transparence_valid==1) && (i!=17))data_final_number++;
           tempdata=tempdata+(add_bit<<(7-data_final_number++));
           if((add_transparence_valid==1) && (i!=7))data_final_number++;  ///////////
           if(data_final_number==8){
                 data_final[datanumber++]=tempdata;
		 data_final_number=0;
		 tempdata=0;
                                    }
           //data_final_number++;    /////////////////////////////////////
                         }
                    }
        ////////////////////////////////////////////////////////////
        if(/*data_final_number!=8 &&*/data_final_number!=0)data_final[datanumber++]=tempdata;
        SBUF=0X7E;
        while(!TI);TI=0;
	for(i=0;i<datanumber;i++)
	{
	    SBUF=data_final[i];
            while(!TI);TI=0;
	}EA=0;
        head=0;tail=0;
        EA=1;
        tran_fpag(0x95);
}
//设置当前方案
set_project()
{
  unsigned char *p;
  unsigned short check_temp;

  unsigned int i;
  unsigned int j;

  data_final_number=0;
  datanumber=0;
  //设置当前方案
  j=(checkdata[5]-1)*41;
  for(i=0;i<41;i++)XBYTE[0X5e82+i+j]=checkdata[5+i];  //一个方案表写入

  //应答
  answer_data[0]=0x00;
  answer_data[1]=0x43;
  answer_data[2]=0xcc;
  answer_data[3]=0xc1;
  answer_data[4]=0xd6;
  p=&answer_data[0];
  check_temp=cal_crc(p,5);
  answer_data[5]=(check_temp>>8);    //crc
  answer_data[6]=check_temp;         //crc
  answer_data[7]=0x7e;
  for(i=0;i<8;i++){
        for(j=0;j<8;j++){
           add_bit=(answer_data[i]>>(7-j))%2;
           add_transparences();
           tempdata=tempdata+(add_bit<<(7-data_final_number++));
           if((add_transparence_valid==1) && (i!=7))data_final_number++;
           if(data_final_number==8){
                 data_final[datanumber++]=tempdata;
		 data_final_number=0;
		 tempdata=0;
                                    }
                         }
                    }
        if(data_final_number!=0)data_final[datanumber++]=tempdata;
        SBUF=0X7E;
        while(!TI);TI=0;
	for(i=0;i<datanumber;i++)
	{
	    SBUF=data_final[i];
            while(!TI);TI=0;
	}EA=0;
        head=0;tail=0;
        EA=1;
        tran_fpag(0x96);
}
//上位机直接控制
set_uppc()
{
}
//设置日计划
set_datesch()
{
  unsigned char *p;
  unsigned short check_temp;
  unsigned int i;
  unsigned int j;

  data_final_number=0;
  datanumber=0;
  //设置
  j=(checkdata[5]-1)*74;
  for(i=0;i<74;i++)XBYTE[0X63a2+i+j]=checkdata[5+i];  //一个方案表写入

  //应答
  answer_data[0]=0x00;
  answer_data[1]=0x43;
  answer_data[2]=0xcc;
  answer_data[3]=0xc1;
  answer_data[4]=0xd8;
  p=&answer_data[0];
  check_temp=cal_crc(p,5);
  answer_data[5]=(check_temp>>8);    //crc
  answer_data[6]=check_temp;         //crc
  answer_data[7]=0x7e;

  for(i=0;i<8;i++){
        for(j=0;j<8;j++){
           add_bit=(answer_data[i]>>(7-j))%2;
           add_transparences();
           tempdata=tempdata+(add_bit<<(7-data_final_number++));
           if((add_transparence_valid==1) && (i!=7))data_final_number++;
           if(data_final_number==8){
                 data_final[datanumber++]=tempdata;
		 data_final_number=0;
		 tempdata=0;
                                    }


                         }
                    }
        if( data_final_number!=0)data_final[datanumber++]=tempdata;
        SBUF=0X7E;
        while(!TI);TI=0;
	for(i=0;i<datanumber;i++)
	{
	    SBUF=data_final[i];
            while(!TI);TI=0;
	}EA=0;

⌨️ 快捷键说明

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