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

📄 sfbr.c

📁 规约转换 黄花河站四方博瑞小电流接地选线
💻 C
📖 第 1 页 / 共 2 页
字号:
===============================================*/
void enter_uart_int(void) interrupt 4 using 1
{
	if(TI)
	{
		TI=0;
		if(send_length!=0)
		{
			if((COMM_BPS&0xf0)==0x10)
			{
				SCON=0xc0;
				ACC=uart_out[send_point++];
				TB8=!P;
				SBUF=ACC;
				--send_length;
				SCON=0xd0;
				return;
			}
			else if((COMM_BPS&0xf0)==0x20)
			{
				SCON=0xc0;
				ACC=uart_out[send_point++];
				TB8=P;
				SBUF=ACC;
				--send_length;
				SCON=0xd0;
				return;
			}

			SCON=0x40;                  /* 无校验 */
			ACC=uart_out[send_point++]; /* 取出欲发送数据 */
			SBUF=ACC;
			--send_length;
			SCON=0x50;
			return;
		}
		else
		{
			
			send_point=0;
			ctrl_485_direct=0;
			return;
		}
	}
	else if(RI)        /* 接收中断 */
	{
		pofc=(struct PIO_OUT xdata *)buf_send_pio;
		RI=0;
		ACC=SBUF;
			
		if(rec_state==0)        /*还没正确接收到报文前三个字节*/
		{
			uart_in[1]=SBUF;
			
			if(uart_in[1]==0x06)
			{
				rec_point=2;            
				data_len=5;
				rec_state=1;
			}                       
			if(uart_in[1]==0x12)
			{
				rec_point=2;            
				data_len=17;
				rec_state=1;
			}                       
			if(uart_in[1]==0x20)
				uart_in[0]=uart_in[1];
				
		 return;	
		 }
		else if((rec_state==1)&&(--data_len!=0))        /*开始接收数据报文*/
		{
			uart_in[rec_point++]=SBUF;
			return;
		}
		
	if((rec_state==1)&&(data_len==0))
	 {      
	 	rec_state=0;
		                                                 
			
		if(uart_in[1]==0x06)    /*遥信报文,  无故障送状态字*/ 
		     {               
			pofc.cmd_xfer=CMD_XFER;                 /* 收到的数据送入网络发送缓冲区 */
			pofc.LENGTH=15;                         /* LENGTH=length+2 */
			pofc.nv_mode=NV_B;
			pofc.length=13;                          /* Report length */
			pofc.DATA[0]=0x0F;
			pofc.DATA[1]=node_id;
			pofc.DATA[2]=0x30;
			pofc.DATA[3]=0x07;
			pofc.DATA[4]=0x01;                                              
			pofc.DATA[5]=0x00;
			pofc.DATA[6]=uart_in[4];
                        pofc.DATA[7]=0x00;
                        pofc.DATA[8]=0x00;
                        pofc.DATA[9]=0x00;
                        pofc.DATA[10]=0x00;
                        pofc.DATA[11]=0x00;
			pofc.DATA[12]=pofc.length;
			for(i=0;i<12;i++)
				pofc.DATA[12]+=pofc.DATA[i];     /* CS */
			
			rec_yx=1;
                       
		       }
	        if(uart_in[1]==0x12)    
		   {               
			pofc.cmd_xfer=CMD_XFER;                 /* 收到的数据送入网络发送缓冲区 */
			pofc.LENGTH=15;                         /* LENGTH=length+2 */
			pofc.nv_mode=NV_B;
			pofc.length=13;                          /* Report length */
			pofc.DATA[0]=0x0F;
			pofc.DATA[1]=node_id;
			pofc.DATA[2]=0x30;
			pofc.DATA[3]=0x07;
			pofc.DATA[4]=0x01;                                              
			pofc.DATA[5]=0x00;
			pofc.DATA[6]=uart_in[4];
                        pofc.DATA[7]=0x00;
                        pofc.DATA[8]=0x00;
                        pofc.DATA[9]=0x00;
                        pofc.DATA[10]=0x00;
                        pofc.DATA[11]=0x00;
                        pofc.DATA[12]=pofc.length;
                      
                    if(uart_in[7]==0xee)        
                         { 
                           switch(uart_in[8])
                             {
                                case 0xf1:pofc.DATA[7]+=0x01;break;           
			                             
			        case 0xf2:pofc.DATA[7]+=0x02;break;
			                          
                                case 0xf3:pofc.DATA[7]+=0x04;break;
			         
                                case 0xf4:pofc.DATA[7]+=0x08;break;
                                default:    break; 
		              }
                                          
                         }
                    if(uart_in[8]==0xff)
                         {   switch(uart_in[7])
                              {
                                case 0x1f: pofc.DATA[8]+=0x01;break; 
                                case 0x2f: pofc.DATA[8]+=0x02;break;
                                case 0x3f: pofc.DATA[8]+=0x04;break;
                              case 0x4f: pofc.DATA[8]+=0x08;break;
                              case 0x5f: pofc.DATA[8]+=0x10;break;
                              case 0x6f: pofc.DATA[8]+=0x20;break;
                              case 0x7f: pofc.DATA[8]+=0x40;break;
                              case 0x8f: pofc.DATA[8]+=0x80;break;
                              case 0x9f: pofc.DATA[9]+=0x01;break;
                              case 0x10: pofc.DATA[9]+=0x02;break;
                              case 0x11: pofc.DATA[9]+=0x04;break;
                              case 0x12: pofc.DATA[9]+=0x08;break;
                              case 0x13: pofc.DATA[9]+=0x10;break;
                              case 0x14: pofc.DATA[9]+=0x20;break;
                              case 0x15: pofc.DATA[9]+=0x40;break;
                              case 0x16: pofc.DATA[9]+=0x80;break;
                              case 0x17: pofc.DATA[10]+=0x01;break;
                              case 0x18: pofc.DATA[10]+=0x02;break;
                              case 0x19: pofc.DATA[10]+=0x04;break;
                              case 0x20: pofc.DATA[10]+=0x08;break;
                              case 0x21: pofc.DATA[10]+=0x10;break;
                              case 0x22: pofc.DATA[10]+=0x20;break;
                              case 0x23: pofc.DATA[10]+=0x40;break;
                              case 0x24: pofc.DATA[10]+=0x80;break;
                              case 0x25: pofc.DATA[11]+=0x01;break;
                                case 0x26: pofc.DATA[11]+=0x02;break;
                                case 0x27: pofc.DATA[11]+=0x04;break;
                                case 0x28: pofc.DATA[11]+=0x08;break;
                                default: break;
                                }
                     
                           }
		
		 for(i=0;i<12;i++)
			pofc.DATA[12]+=pofc.DATA[i];     /* CS */
	        
		 rec_yx=1;
                 return;
	         }
	     }	
	return;
	}    
}    

void init_comm_baud(uchar bps)
{
    TMOD=0x21;
    TCON=0x50;
    SCON=0xd0;
    switch (bps)
    {
	case 0x11: TH1=0xa0; break;   /* 300 bps */
	case 0x12: TH1=0xd0; break;   /* 600 bps */
	case 0x13: TH1=0xe8; break;   /* 1200 bps */
	case 0x14: TH1=0xf4; break;   /* 2400 bps */
	case 0x15: TH1=0xfa; break;   /* 4800 bps */
	case 0x16: TH1=0xfd; break;   /* 9600 bps */

	case 0x21: TH1=0xa0; break;   /* 300 bps */
	case 0x22: TH1=0xd0; break;   /* 600 bps */
	case 0x23: TH1=0xe8; break;   /* 1200 bps */
	case 0x24: TH1=0xf4; break;   /* 2400 bps */
	case 0x25: TH1=0xfa; break;   /* 4800 bps */
	case 0x26: TH1=0xfd; break;   /* 9600 bps */

	case 0x31:
	    SCON=0x50;
	    TH1=0xa0;
	    break;   /* 300 bps */
	case 0x32:
	    SCON=0x50;
	    TH1=0xd0;
	    break;   /* 600 bps */
	case 0x33:
	    SCON=0x50;
	    TH1=0xe8;
	    break;   /* 1200 bps */
	case 0x34:
	    SCON=0x50;
	    TH1=0xf4;
	    break;   /* 2400 bps */
	case 0x35:
	    SCON=0x50;
	    TH1=0xfa;
	    break;   /* 4800 bps */
	case 0x36:
	    SCON=0x50;
	    TH1=0xfd;
	    break;   /* 9600 bps */
	default:
	    SCON=0x50;
	    TH1=0xe8;
	    break;
    }
}

void write_node_id(void)
{
    para_write_byte(CMD_XFER);
    para_write_byte(5);
    para_write_byte(0x42);
    para_write_byte(3);
    para_write_byte(node_id);
    para_write_byte(node_id);
    para_write_byte(node_id);
    para_write_byte(EOM);
    token=SLAVE;
}

void parallel_init()
{
    uchar data c=0;
    wait_0_hs();
    do{
       para_write_byte(CMD_RESYNC);
       para_write_byte(EOM);
       c=para_read_byte();
    } while(c!=CMD_ACKSYNC);
    wait_0_hs();
    token=MASTER;
}

void wait_0_hs(void)
{
    n3120_r_w_ctrl=1;
    while(XBYTE[N3120_CTRL_PORT]&0x01);
}

void para_write_byte(uchar c)
{
    wait_0_hs();
    n3120_r_w_ctrl=0;
    XBYTE[N3120_DATA_PORT]=c;
}

uchar para_read_byte(void)
{
    wait_0_hs();
    return(XBYTE[N3120_DATA_PORT]);
}

void watch_dog()
{
    watchdog_clr=!watchdog_clr;
}

void delay_40ms()
{
    uint data i=0x1000;
    while(i--);
}

⌨️ 快捷键说明

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