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

📄 hjcomm.c

📁 ASC 信号机控制程序,国内最先进的信号机控制程序
💻 C
📖 第 1 页 / 共 5 页
字号:

                    /*200-1交通信号控制机通信板程序*/

#include <reg51.h>
#include <absacc.h>

#define uint  unsigned  int
#define uchar unsigned  char

sbit P1_0 = P1^0;
sbit P1_1 = P1^1;
sbit P1_2 = P1^2;
sbit P1_3 = P1^3;
sbit P1_4 = P1^4;
sbit P1_5 = P1^5;
sbit P1_6 = P1^6;
sbit P1_7 = P1^7;

/*-------------------------------------------------------*/
void   wdi_reset()     {               /*触发MAX-705*/

       uchar data i;

       P1_0=~P1_0;
       i=0;
       i=0;
       P1_0=~P1_0;
}
/*-------------------------------------------------------*/
void   delay(uchar  x)     {           /*延时X毫秒--函数*/

       uchar  data j;

       while((x--)!=0){
            for(j=0;j<113;j++)
               {;}
       }
       wdi_reset();
}
/*-------------------------------------------------------*/
void   sparkler(uchar x)     {         /*闪烁--函数*/

       uchar  i;

       for(i=1;i<=x;i++){
          P1_3=0;
          P1_4=0;
          P1_5=0;

          delay(100);
          P1_3=1;
          P1_4=1;
          P1_5=1;
          delay(100);
       }
}
/*-------------------------------------------------------*/
void   sparkler0(uchar  x){            /*闪烁--函数*/

       uchar   i;

       for(i=1;i<=x;i++){
          P1_5=0;
          delay(100);
          P1_5=1;
          delay(100);
       }

}
/*-------------------------------------------------------*/
void   sparkler1(uchar  x){            /*闪烁--函数*/

       uchar   i;

       for(i=1;i<=x;i++){
          P1_3=0;
          delay(100);
          P1_3=1;
          delay(100);
       }
}
/*-------------------------------------------------------*/
void   sparkler2(uchar  x){            /*闪烁--函数*/

       uchar   i;

       for(i=1;i<=x;i++){
          P1_4=0;
          delay(100);
          P1_4=1;
          delay(100);
       }
}
/*-------------------------------------------------------*/
void  sparkler_main(uchar   x){        /*闪烁--函数*/

       uchar   i;

       for(i=1;i<=x;i++){
          P1_6=1;
          delay(100);
          P1_6=0;
          delay(100);
       }
}
/*-------------------------------------------------------*/
void   set_comm1(uchar baud){          /*初始化8250_1--函数*/

       uchar data  inter_var;

       wdi_reset();
       switch(baud){
         case  5:                      /*19200*/
      	   inter_var=0x06;break;
         case  4:                      /*9600*/
	   inter_var=0x0c;break;
         case  3:                      /*4800*/
	   inter_var=0x18;break;
         case  2:                      /*2400*/
    	   inter_var=0x30;break;
	 case  1:                      /*1200*/
	   inter_var=0x60;break;
	 default:                      /*4800*/
	   inter_var=0x0c;break;
       }
       XBYTE[0xeffb]=0x83;
       XBYTE[0xeff8]=inter_var;
       XBYTE[0xeff9]=0;
       XBYTE[0xeffb]=3;
       XBYTE[0xeff1]=1;
       sparkler1(2);
}
/*-------------------------------------------------------*/
void   set_comm2(uchar baud){          /*初始化8250_1--函数*/

       uchar  data inter_var;

       wdi_reset();
       switch(baud){
         case  5:                      /*19200*/
      	   inter_var=0x06;break;
         case  4:                      /*9600*/
	   inter_var=0x0c;break;
         case  3:                      /*4800*/
	   inter_var=0x18;break;
         case  2:                      /*2400*/
    	   inter_var=0x30;break;
	 case  1:                      /*1200*/
	   inter_var=0x60;break;
	 default:                      /*4800*/
	   inter_var=0x0c;break;
       }
       XBYTE[0xdffb]=0x83;
       XBYTE[0xdff8]=inter_var;
       XBYTE[0xdff9]=0;
       XBYTE[0xdffb]=3;
       XBYTE[0xdff1]=1;
       sparkler2(2);
}
/*-------------------------------------------------------*/
void   set_comm3(uchar  baud){         /*初始化RS--485--函数*/

       uchar  data inter_var;

       wdi_reset();
       switch (baud){
         case  5:                      /*19200*/
  	   inter_var=0xfd;break;
         case  4:                      /*9600*/
	   inter_var=0xfd;break;
	 case  3:                      /*4800*/
	   inter_var=0xfa;break;
	 case  2:                      /*2400*/
	   inter_var=0xf4 ;break;
         case  1:                      /*1200*/
   	   inter_var=0xe8;break;
         default:                      /*4800*/
  	   inter_var=0xfd;break;
       }
       if(baud==5){
         PCON=0x80;
       }
       else{
         PCON=0x00;
       }
       TMOD=0x20;
       TL1=inter_var;TH1=inter_var;
       SCON=0xd8;
       TR1=1;
       P1_2=0;
       sparkler0(2);
}
/*-------------------------------------------------------*/
void   set_dou_ram()     {             /*初始化双口RAM收发存储器函数*/

       uchar  data  i;

       wdi_reset();
       i=0;
       while(i<0x80){
         XBYTE[0xf000+i]=0;
         i=i+1;
       }
       XBYTE[0xf01b]=1;
       XBYTE[0xf01c]=1;
       XBYTE[0xf01d]=1;
       XBYTE[0xf01f]=0xf0;
       XBYTE[0xf020]=0x80;
       XBYTE[0xf021]=0xf0;
       XBYTE[0xf022]=0x80;
}
/*-------------------------------------------------------*/
void   send_485(uchar no){             /*RS485--口发送数据函数*/

       P1_5=~P1_5;
       XBYTE[0xf030+5*no]=0;
}
/*-------------------------------------------------------*/
void   send_8250(uchar no,uchar ko_no){/*RS232--口发送数据函数*/

       uchar  data sum;
       uint   data i,data j,data star_add,data end_add,data send_add;
       uint   data ko_add;

       XBYTE[0xf01a]=1;
       wdi_reset();
       ko_add=0;
       if(ko_no==2){      //串口2
                   ko_add=0x1000;
                   }
       if(ko_no==1){     //串口1
                   P1_3=~P1_3;
                   }
       else       {
                  P1_4=~P1_4;     //串口2
                  }
       sum=0;
       while(sum<10){
                 XBYTE[0xeff0-ko_add]=0x66+sum*0x11;/*发送起始位*/
                 j=0;
                 while((XBYTE[0xeffd-ko_add]<0x60)&(j<7000)){
                                                            wdi_reset();
                                                            j=j+1;
                                                            }
                sum=sum+1;
                }
       star_add=XBYTE[0xf031+5*no]*256+XBYTE[0xf032+5*no];
       end_add=XBYTE[0xf033+5*no]*256+XBYTE[0xf034+5*no];
       send_add=star_add;
       XBYTE[0xeff0-ko_add]=XBYTE[send_add];/*发送数据标识*/
       j=0;
       while((XBYTE[0xeffd-ko_add]<0x60)&(j<7000)){
                                                   wdi_reset();
                                                   j=j+1;
                                                  }
       sum=XBYTE[send_add];
       if(send_add==0xf7ff){
                           send_add=0xf080;
                           }
       else{
            send_add=send_add+1;          /*发送数据长度*/
            }
       XBYTE[0xeff0-ko_add]=XBYTE[send_add];
       j=0;
       while((XBYTE[0xeffd-ko_add]<0x60)&(j<7000)){
                                                  wdi_reset();
                                                  j=j+1;
                                                  }
       if(send_add==0xf7ff){           //双口ram的边界
                           send_add=0xf080;
                           }
       else{
            send_add=send_add+1;          /*发送数据长度*/
           }
       XBYTE[0xeff0-ko_add]=XBYTE[send_add];
       j=0;
       while((XBYTE[0xeffd-ko_add]<0x60)&(j<7000)){
                                                   wdi_reset();
                                                   j=j+1;
                                                   }
       /*i=XBYTE[star_add+1]*256+XBYTE[star_add+2]+3;*/
       if(star_add<end_add){
                           i=end_add-star_add-2;             //发送字节数
                           }
       else{
           i=0xf7ff-star_add+end_add-0xf080-1;
           }
       if(i>1900){
                  i=10;
                   }
       while(i>0){                     /*发送数据*/
                  if(send_add==0xf7ff){
                                      send_add=0xf080;
                                      }
                  else{
                      send_add=send_add+1;
                       }
                   sum=sum+XBYTE[send_add];
                   XBYTE[0xeff0-ko_add]=XBYTE[send_add];
                   j=0;
                   while((XBYTE[0xeffd-ko_add]<0x60)&(j<7000)){
                                                               wdi_reset();
                                                               j=j+1;
                                                               }
                  i=i-1;
               }
       i=0;
       j=0;
       XBYTE[0xeff0-ko_add]=sum;            //发送校验和
       j=0;
       while((XBYTE[0xeffd-ko_add]<0x60)&(j<7000)){
                                                   wdi_reset();
                                                    j=j+1;
                                                   }
       while(i<20){
                   XBYTE[0xf024]=1;
                   if((XBYTE[0xf023]==0)&(XBYTE[0xf024]==1)){
                                                            i=20;
                                                            }
                   i=i+1;
                   }
       if((XBYTE[0xf023]==0)&(XBYTE[0xf024]==1))
                  {/*判CPU是否修改头尾*/
                  if((XBYTE[0xf021]==XBYTE[0xf033+5*no])&(XBYTE[0xf022]==XBYTE[0xf034+5*no]))   //结束地址为f080
                                      {
                                       XBYTE[0xf021]=XBYTE[0xf031+5*no];/*修改尾标志*/
                                       XBYTE[0xf022]=XBYTE[0xf032+5*no];
                                       if((XBYTE[0xf022]==0)&(XBYTE[0xf021]>0xf0))
                                                 {
                                                  XBYTE[0xf022]=0xff;
                                                  XBYTE[0xf021]=XBYTE[0xf021]-1;
                                                 }
                                       }
                  else{
                      if((XBYTE[0xf01f]==XBYTE[0xf031+5*no])&(XBYTE[0xf020]==XBYTE[0xf032+5*no])) //开始地址为f080
                            {
                             XBYTE[0xf01f]=XBYTE[0xf033+5*no];/*修改头标志*/
                             XBYTE[0xf020]=XBYTE[0xf034+5*no];
                             }
                       }
                 XBYTE[0xf030+5*no]=0;
                 if(ko_no==1){
                             XBYTE[0xf04F]=XBYTE[0xf04F]+1;/*通信口1发送成功记数*/
                             if(XBYTE[0xf04F]==0xff)
                                    {
                                     XBYTE[0xf04E]=XBYTE[0xf04E]+1;
                                    }
                             }
                i=0;
                }
       else{
            i=10;
            }
       while((i<10)&(XBYTE[0xf030+5*no]>0)){
                                            XBYTE[0xf030+5*no]=0;
                                            i=i+1;
                                           }
       XBYTE[0xf024]==0;
       i=0;
       while((i<20)&(XBYTE[0xf024]==1)){
                                        XBYTE[0xf024]==0;
                                        i=i+1;
                                        }

       XBYTE[0xf01a]=0;
       wdi_reset();
}
/*-------------------------------------------------------*/
void   comm_dete(uchar ko_no,uchar obj){/*RS232--链路连通回馈函数*/

       uchar  data i;
       uint   data j,data ko_add;

       wdi_reset();
       ko_add=0;
       if(ko_no==2){    //串口2
         ko_add=0x1000;
       }
       i=0;
       while(i<10){
         XBYTE[0xeff0-ko_add]=0x66+i*0x11;/*发送起始位*/
         j=0;
         while((XBYTE[0xeffd-ko_add]<0x60)&(j<7000)){
           wdi_reset();
           j=j+1;
         }
         i=i+1;
       }
       XBYTE[0xeff0-ko_add]=0x03;/*发送数据标识:通信测试*/
       i=0x03;
       j=0;
       while((XBYTE[0xeffd-ko_add]<0x60)&(j<7000)){
         wdi_reset();
         j=j+1;
       }
       XBYTE[0xeff0-ko_add]=0;/*发送数据体长度*/
       j=0;
       while((XBYTE[0xeffd-ko_add]<0x60)&(j<7000)){
         wdi_reset();
         j=j+1;
       }
       XBYTE[0xeff0-ko_add]=2;/*发送数据体长度*/
       j=0;
       while((XBYTE[0xeffd-ko_add]<0x60)&(j<7000)){
         wdi_reset();
         j=j+1;

⌨️ 快捷键说明

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