?? transflow.lst
字號:
C51 COMPILER V6.02 TRANSFLOW 09/28/2006 21:46:49 PAGE 1
C51 COMPILER V6.02, COMPILATION OF MODULE TRANSFLOW
OBJECT MODULE PLACED IN F:\LAIWORK\GB_ASC\TRANSFLOW.OBJ
COMPILER INVOKED BY: c:\COMP51V6\C51.EXE F:\LAIWORK\GB_ASC\TRANSFLOW.C DB SB OE LARGE
stmt level source
1 #include <reg51.h>
2 #include <absacc.h>
3 sbit WatchDog = P1^3; //看門狗
4 extern unsigned char xdata send_liul[32],send_occ[32];
5 extern unsigned int xdata loop_ratio[32];
6 unsigned char xdata T;
7 unsigned char xdata fl,fh;
8 unsigned char xdata last_recetimeid,record_day;
9 unsigned char xdata steptime[16];
10 extern unsigned int xdata data_address;
11 extern unsigned int xdata address;
12 extern unsigned int xdata tr_flagaddr;
13 extern unsigned char xdata now_day_planid;
14 extern unsigned char xdata period_sch[41];
15 extern unsigned char xdata now_step_schid;
16 extern unsigned char xdata timeid;
17 extern unsigned int xdata savecount;
18 extern unsigned char xdata sch_step[16];
19 extern unsigned char xdata selcal_flag;
20 unsigned char xdata per[24][70];
21 extern unsigned char xdata per_count;
22 trans_volum() //流量和占有率發送程序,在周期結束時,發送到FPGA板
23 {
24 1 unsigned char i;
25 1 savecount++;
26 1 while((XBYTE[0xa023]==0)&&(XBYTE[0xa024]==1)){}; //等待FGPA修改頭尾
27 1 XBYTE[0xa023]=0x01; //CPU修改頭尾
28 1 XBYTE[0xa024]=0X00;
29 1
30 1 data_address=(XBYTE[0XA021]<<8)+XBYTE[0XA022]+1;
31 1 data_address=(data_address&0x7ff);
32 1
33 1 address=data_address;
34 1 data_address=data_address+70; //應答數據長度70字節
35 1 if(data_address>0x7f0)data_address=data_address-0x7f0+0x80;
36 1 data_address--;
37 1 XBYTE[0XA021]=data_address>>8; //
38 1 XBYTE[0XA022]=data_address;
39 1 XBYTE[0XA023]=0X00; //CPU修改頭尾結束
40 1 XBYTE[0XA024]=0X00;
41 1 for(i=0;i<6;i++){
42 2 tr_flagaddr=0XA030+5*i;
43 2 if(XBYTE[tr_flagaddr]==0x87)break;
44 2 }
45 1 if(i==6)return 1;
46 1
47 1 XBYTE[tr_flagaddr+1]=address>>8; //發送數據的首地址
48 1 XBYTE[tr_flagaddr+2]=address;
49 1 XBYTE[tr_flagaddr+3]=data_address>>8; //發送數據的尾地址
50 1 XBYTE[tr_flagaddr+4]=data_address;
51 1
52 1 address=address+0xa000; //發送應答數據
53 1 if(address>0xa7f0)address=0xa080;
54 1 XBYTE[address]=0XFD; //發送標識
55 1 // SBUF=XBYTE[address];while(!TI);TI=0; /////////////////////////////////////////
C51 COMPILER V6.02 TRANSFLOW 09/28/2006 21:46:49 PAGE 2
56 1 address++;
57 1 if(address>0xa7f0)address=0xa080;
58 1 XBYTE[address]=XBYTE[0XC008]; //發送月
59 1 // SBUF=XBYTE[address];while(!TI);TI=0; /////////////////////////////////////////
60 1 address++;
61 1 if(address>0xa7f0)address=0xa080;
62 1 XBYTE[address]=XBYTE[0XC007]; //日
63 1 // SBUF=XBYTE[address];while(!TI);TI=0; /////////////////////////////////////////
64 1 address++;
65 1 if(address>0xa7f0)address=0xa080;
66 1 XBYTE[address]=XBYTE[0XC004]; //時
67 1 // SBUF=XBYTE[address];while(!TI);TI=0; /////////////////////////////////////////
68 1 address++;
69 1 if(address>0xa7f0)address=0xa080;
70 1 XBYTE[address]=XBYTE[0XC002]; //分
71 1 // SBUF=XBYTE[address];while(!TI);TI=0; /////////////////////////////////////////
72 1 address++;
73 1 if(address>0xa7f0)address=0xa080;
74 1 XBYTE[address]=XBYTE[0XC000]; //秒
75 1 // SBUF=XBYTE[address];while(!TI);TI=0; /////////////////////////////////////////
76 1 address++;
77 1 if(address>0xa7f0)address=0xa080;
78 1 for(i=0;i<32;i++){
79 2 XBYTE[address]=send_liul[i]; //發送流量
80 2 // SBUF=XBYTE[address];while(!TI);TI=0; /////////////////////////////////////////
81 2 address++;
82 2 if(address>0xa7f0)address=0xa080;
83 2 send_occ[i]=(loop_ratio[i]*10/1000)/T;
84 2 XBYTE[address]=send_occ[i]; //發送占有率
85 2 // SBUF=XBYTE[address];while(!TI);TI=0; /////////////////////////////////////////
86 2 address++;
87 2 if(address>0xa7f0)address=0xa080;
88 2 }
89 1 XBYTE[tr_flagaddr]=0x01;
90 1 for(i=0;i<32;i++){
91 2 send_liul[i]=0;
92 2 send_occ[i]=0;
93 2 loop_ratio[i]=0;
94 2 }
95 1 // SBUF=0XFF;
96 1 // while(!TI);TI=0;
97 1 for(i=0;i<32;i++){
98 2 send_liul[i]=0;
99 2 send_occ[i]=0;
100 2 loop_ratio[i]=0;
101 2 }
102 1 }
103
104 void self_learn() using 1
105 {
106 1 unsigned char i,j,k;
107 1 unsigned char good;
108 1 unsigned int addr;
109 1
110 1 for(i=0;i<16;i++){ //本周期結束的時候
111 2 good=period_sch[9+i];
112 2 for(j=0;j<70;j++){
113 3 if((j==good)&&(j!=0))per[i][j]++;
114 3 }
115 2 }
116 1
117 1 //時段切換后計算學習結果
C51 COMPILER V6.02 TRANSFLOW 09/28/2006 21:46:49 PAGE 3
118 1
119 1 if(last_recetimeid!=timeid){
120 2 for(i=0;i<16;i++){ //對上次能學習結果清0
121 3 steptime[i]=0;
122 3 }
123 2 for(i=0;i<16;i++){
124 3 good=0;
125 3 for(j=0;j<70;j++){
126 4 if(good<=per[i][j])good=per[i][j];
127 4 }
128 3 k=0;
129 3 do{
130 4 k++;
131 4 }while(per[i][k-1]!=good);
132 3 k--;
133 3 steptime[i]=k;
134 3 }
135 2 addr=(last_recetimeid-1)*16;
136 2 record_day=XBYTE[0XC006];
137 2 if(record_day>7)record_day=3;
138 2 addr=addr+(record_day-1)*384;
139 2 addr=addr+0x3f00;
140 2 for(i=0;i<16;i++){//寫到0X3F00開始的地址
141 3 XBYTE[addr+i]=steptime[i];
142 3 }
143 2 for(i=0;i<41;i++){// 清空自學習緩沖區
144 3 period_sch[i]=0;
145 3 }
146 2 for(i=0;i<32;i++){ //mei
147 3 for(j=0;j<70;j++){
148 4 per[i][j]=0;
149 4 }
150 3 }
151 2 }
152 1 last_recetimeid=period_sch[3];
153 1
154 1
155 1
156 1
157 1 }
158 void tran_psh() //每周期發送一次方案
159 {
160 1 selcal_flag=0;
161 1 // unsigned char i;
162 1 // period_sch[0]=0x20; //當前方案號 方案32作為備用降級方案
163 1 period_sch[0]=now_day_planid; //當前日計劃號
164 1 period_sch[1]=now_step_schid; //當前的階段表號
165 1 period_sch[3]=timeid; //當前的時段號
166 1 period_sch[6]=XBYTE[0XC006]; //當前星期號
167 1 self_learn();
168 1
169 1 /*
170 1
171 1 while((XBYTE[0xa023]==0)&&(XBYTE[0xa024]==1)){}; //等待FGPA修改頭尾
172 1 XBYTE[0xa023]=0x01; //CPU修改頭尾
173 1 XBYTE[0xa024]=0X00;
174 1 data_address=(XBYTE[0XA021]<<8)+XBYTE[0XA022]+1;
175 1 address=data_address;
176 1 data_address=data_address+43; //應答數據長度+1字節
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -