📄 transflow.c
字号:
#include <reg51.h>
#include <absacc.h>
extern unsigned char xdata send_liul[32],send_occ[32];
extern unsigned int xdata loop_ratio[32];
unsigned char xdata T;
unsigned char xdata fl,fh;
extern unsigned int xdata data_address;
extern unsigned int xdata address;
extern unsigned int xdata tr_flagaddr;
extern unsigned char xdata period_sch[40];
extern unsigned char xdata now_step_schid;
extern unsigned char xdata timeid;
extern unsigned int xdata savecount;
trans_volum() //流量和占有率发送程序,在周期结束时,发送到FPGA板
{
unsigned char i;
savecount++;
data_address=XBYTE[0XA021]<<8+XBYTE[0XA022]+1; //首地址 偏移量
address=data_address; //首地址 偏移量
data_address=data_address+70; //应答数据长度70字节
if(data_address>0x7f0)data_address=data_address-0x7f0+0x80;
while((XBYTE[0xa023]==0)&&(XBYTE[0xa024]==1)){}; //等待FGPA修改头尾
XBYTE[0xa023]=0x01; //CPU修改头尾
XBYTE[0xa024]=0X00;
data_address=(XBYTE[0XA021]<<8)+XBYTE[0XA022]+1;
address=data_address;
data_address=data_address+70; //应答数据长度70字节
if(data_address>0x7f0)data_address=data_address-0x7f0+0x80;
data_address--;
XBYTE[0XA021]=data_address>>8; //
XBYTE[0XA022]=data_address;
XBYTE[0XA023]=0X00; //CPU修改头尾结束
XBYTE[0XA024]=0X00;
for(i=0;i<6;i++){
tr_flagaddr=0XA030+5*i;
if(XBYTE[tr_flagaddr]==0x87)break;
}
if(i==6)return 1;
// SBUF=0XFF;while(!TI);TI=0; /////////////////////////////////////////
// SBUF=0XFF;while(!TI);TI=0; /////////////////////////////////////////
// SBUF=(savecount>>8);while(!TI);TI=0; /////////////////////////////////////////
// SBUF=savecount;while(!TI);TI=0; /////////////////////////////////////////
XBYTE[tr_flagaddr+1]=address>>8; //发送数据的首地址
// SBUF=XBYTE[tr_flagaddr+1];while(!TI);TI=0; /////////////////////////////////////////
XBYTE[tr_flagaddr+2]=address;
// SBUF=XBYTE[tr_flagaddr+2];while(!TI);TI=0; /////////////////////////////////////////
XBYTE[tr_flagaddr+3]=data_address>>8; //发送数据的尾地址
// SBUF=XBYTE[tr_flagaddr+3];while(!TI);TI=0; /////////////////////////////////////////
XBYTE[tr_flagaddr+4]=data_address;
// SBUF=XBYTE[tr_flagaddr+4];while(!TI);TI=0; /////////////////////////////////////////
address=address+0xa000; //发送应答数据
XBYTE[address]=0XFD; //发送标识
// SBUF=XBYTE[address];while(!TI);TI=0; /////////////////////////////////////////
address++;
if(address>0xa7f0)address=0xa080;
XBYTE[address]=XBYTE[0XC008]; //发送月
// SBUF=XBYTE[address];while(!TI);TI=0; /////////////////////////////////////////
address++;
if(address>0xa7f0)address=0xa080;
XBYTE[address]=XBYTE[0XC007]; //日
// SBUF=XBYTE[address];while(!TI);TI=0; /////////////////////////////////////////
address++;
if(address>0xa7f0)address=0xa080;
XBYTE[address]=XBYTE[0XC004]; //时
// SBUF=XBYTE[address];while(!TI);TI=0; /////////////////////////////////////////
address++;
if(address>0xa7f0)address=0xa080;
XBYTE[address]=XBYTE[0XC002]; //分
// SBUF=XBYTE[address];while(!TI);TI=0; /////////////////////////////////////////
address++;
if(address>0xa7f0)address=0xa080;
XBYTE[address]=XBYTE[0XC000]; //秒
// SBUF=XBYTE[address];while(!TI);TI=0; /////////////////////////////////////////
address++;
if(address>0xa7f0)address=0xa080;
for(i=0;i<32;i++){
XBYTE[address]=send_liul[i]; //发送流量
// SBUF=XBYTE[address];while(!TI);TI=0; /////////////////////////////////////////
address++;
if(address>0xa7f0)address=0xa080;
send_occ[i]=(loop_ratio[i]*10/1000)/T;
XBYTE[address]=send_occ[i]; //发送占有率
// SBUF=XBYTE[address];while(!TI);TI=0; /////////////////////////////////////////
address++;
if(address>0xa7f0)address=0xa080;
}
XBYTE[tr_flagaddr]=0x01;
for(i=0;i<32;i++){
send_liul[i]=0;
send_occ[i]=0;
loop_ratio[i]=0;
}
// SBUF=0XFF;
// while(!TI);TI=0;
for(i=0;i<32;i++){
send_liul[i]=0;
send_occ[i]=0;
loop_ratio[i]=0;
}
}
void tran_psh() //每周期发送一次方案
{
unsigned char i;
// period_sch[0]=0x20; //当前方案号 方案32作为备用降级方案
period_sch[0]=now_step_schid; //当前的阶段表号
period_sch[2]=timeid; //当前的时段号
period_sch[5]=XBYTE[0XC006]; //当前星期号
data_address=XBYTE[0XA021]<<8+XBYTE[0XA022]+1; //当前开始地址偏移量
address=data_address;
data_address=data_address+41; //应答数据长度+1字节
if(data_address>0x7f0)data_address=data_address-0x7f0+0x80;
while((XBYTE[0xa023]==0)&&(XBYTE[0xa024]==1)){}; //等待FGPA修改头尾
XBYTE[0xa023]=0x01; //CPU修改头尾
XBYTE[0xa024]=0X00;
data_address=(XBYTE[0XA021]<<8)+XBYTE[0XA022]+1;
address=data_address;
data_address=data_address+41; //应答数据长度+1字节
if(data_address>0x7f0)data_address=data_address-0x7f0+0x80;
data_address--;
XBYTE[0XA021]=data_address>>8; //
XBYTE[0XA022]=data_address;
XBYTE[0XA023]=0X00; //CPU修改头尾结束
XBYTE[0XA024]=0X00;
for(i=0;i<6;i++){
tr_flagaddr=0XA030+5*i;
if(XBYTE[tr_flagaddr]==0x87)break;
}
//if(i==6)return 1;
XBYTE[tr_flagaddr+1]=address>>8; //发送数据的首地址
XBYTE[tr_flagaddr+2]=address;
XBYTE[tr_flagaddr+3]=data_address>>8; //发送数据的尾地址
XBYTE[tr_flagaddr+4]=data_address;
address=address+0xa000; //发送应答数据
XBYTE[address]=0Xc6; //采用应答方式发送当前方案给FPGA
address++;
if(address>0xa7f0)address=0xa080;
for(i=0;i<40;i++){
XBYTE[address]=period_sch[i];
address++;
if(address>0xa7f0)address=0xa080;
}
XBYTE[tr_flagaddr]=0x01;
}
void ask_sch()
{
unsigned char i;
unsigned char te;
data_address=XBYTE[0XA021]<<8+XBYTE[0XA022]+1;
address=data_address;
data_address=data_address+3; //应答数据长度+1字节
if(data_address>0x7f0)data_address=data_address-0x7f0+0x80;
fl=XBYTE[0xa023];
fh=XBYTE[0xa024];
while((fl==0)&&(fh==1)){}; //等待FGPA修改头尾
XBYTE[0xa023]=0x01; //CPU修改头尾
XBYTE[0xa024]=0X00;
data_address=(XBYTE[0XA021]<<8)+XBYTE[0XA022]+1;
address=data_address;
data_address=data_address+3; //应答数据长度+1字节
if(data_address>0x7f0)data_address=data_address-0x7f0+0x80;
data_address--;
XBYTE[0XA021]=data_address>>8; //
XBYTE[0XA022]=data_address;
XBYTE[0XA023]=0X00; //CPU修改头尾结束
XBYTE[0XA024]=0X00;
for(i=0;i<6;i++){
tr_flagaddr=0XA030+5*i;
if(XBYTE[tr_flagaddr]==0x87)break;
}
//if(i==6)return 1;
XBYTE[tr_flagaddr+1]=address>>8; //发送数据的首地址
XBYTE[tr_flagaddr+2]=address;
XBYTE[tr_flagaddr+3]=data_address>>8; //发送数据的尾地址
XBYTE[tr_flagaddr+4]=data_address;
address=address+0xa000; //发送应答数据
XBYTE[address]=0X86; //发送查询标识条件
address++;
if(address>0xa7f0)address=0xa080;
te=timeid;
if(te==0)te=1;
XBYTE[address]=te; //查询的时段
address++;
if(address>0xa7f0)address=0xa080;
XBYTE[address]=XBYTE[0XC006]; //查询的周日类型
address++;
if(address>0xa7f0)address=0xa080;
XBYTE[tr_flagaddr]=0x01;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -