?? fpgadram.lst
字號:
C51 COMPILER V6.02 FPGADRAM 09/28/2006 21:46:50 PAGE 1
C51 COMPILER V6.02, COMPILATION OF MODULE FPGADRAM
OBJECT MODULE PLACED IN F:\LAIWORK\GB_ASC\FPGADRAM.OBJ
COMPILER INVOKED BY: c:\COMP51V6\C51.EXE F:\LAIWORK\GB_ASC\FPGADRAM.C DB SB OE LARGE
stmt level source
1 #include <absacc.h>
2 #include <reg51.h>
3 extern bit re_control;
4 unsigned int xdata start_addr;
5 unsigned int xdata end_addr;
6 unsigned int xdata address;
7 unsigned int xdata data_address=0xa080; //雙口RAM數據存放地址計數器
8 unsigned char xdata iiiii,flagi;
9 unsigned char xdata KB=0;
10 unsigned char xdata sch_step[16];
11 unsigned int re_flagaddr;
12 unsigned int xdata tr_flagaddr=0xa030;
13 unsigned int tr_startaddr; //發送數據開始地址
14 unsigned int tr_endaddr; //
15 unsigned char c080=0x81;
16 sbit FarContrlLed=P1^1;
17 extern unsigned char xdata machine_flag; //主機或從機標志 1:主機 0:從機
18 extern unsigned char step_time;
19 extern unsigned char now_step_key;
20 extern unsigned char step_counter; //階段號
21 extern unsigned char xdata force_flag;
22
23 unsigned int detail_answer(/*unsigned char *ptr,*/unsigned int len,unsigned char detail)
24 {
25 1 unsigned char i;
26 1
27 1 while((XBYTE[0xa023]==0)&&(XBYTE[0xa024]==1)){}; //等待FGPA修改頭尾
28 1 XBYTE[0xa023]=0x01; //CPU修改頭尾
29 1 XBYTE[0xa024]=0X00;
30 1 data_address=(XBYTE[0XA021]<<8)+XBYTE[0XA022]+1; //CPU程序可以應用的首地址,偏移地址
31 1 data_address=(data_address&0x7ff);
32 1
33 1
34 1 address=data_address; //首地址偏移量
35 1 data_address=data_address+len; //應答數據長度1字節
36 1 if(data_address>0x7f0)data_address=data_address-0x7f0+0x80;
37 1 data_address--;
38 1 XBYTE[0XA021]=data_address>>8; //尾地址偏移量
39 1 XBYTE[0XA022]=data_address;
40 1 XBYTE[0XA023]=0X00; //CPU修改頭尾結束
41 1 XBYTE[0XA024]=0X00;
42 1 tr_flagaddr=0xa030;
43 1 for(i=0;i<6;i++){
44 2 tr_flagaddr=tr_flagaddr+i*5;
45 2 if(XBYTE[tr_flagaddr]==0x87)break;
46 2 }
47 1 if(i==6)return 1 ;
48 1 XBYTE[tr_flagaddr+1]=address>>8; //發送數據的首地址
49 1 XBYTE[tr_flagaddr+2]=address;
50 1
51 1 XBYTE[tr_flagaddr+3]=data_address>>8; //發送數據的尾地址
52 1 XBYTE[tr_flagaddr+4]=data_address;
53 1 address=address+0xa000; //發送應答數據 絕對地址
54 1 if(address>0xa7f0)address=0xa080;
55 1 XBYTE[address]=detail;
C51 COMPILER V6.02 FPGADRAM 09/28/2006 21:46:50 PAGE 2
56 1 XBYTE[tr_flagaddr]=0x01;
57 1 return 1;
58 1 }
59
60 unsigned char answer_fpga(unsigned char flag) using 1
61 {
62 1 unsigned char i,a;
63 1
64 1
65 1 //相應的接收標志寫成0x87
66 1 XBYTE[re_flagaddr]=0x87;
67 1
68 1 for(i=0;i<6;i++){
69 2 tr_flagaddr=0XA030+5*i;
70 2 if(XBYTE[tr_flagaddr]==0x87)break;
71 2 }
72 1 if(i==6)return 1;
73 1 switch(flag){ //FPG對CPU進行設置
74 2 case 0x92:break;
75 2 case 0x93:a=detail_answer(1,0xd3);break;
76 2 case 0x94:a=detail_answer(1,0xd4);break;
77 2 case 0x95:a=detail_answer(1,0xd5);break;
78 2 case 0x96:a=detail_answer(1,0xd6);break;
79 2 case 0x97:a=detail_answer(1,0xd7);break;
80 2 case 0x98:a=detail_answer(1,0xd8);break;
81 2 case 0x99:a=detail_answer(1,0xd9);break;
82 2 case 0x9a:a=detail_answer(1,0xda);break;
83 2 case 0x9c:a=detail_answer(1,0xdc);break;
84 2 case 0x9d:break;
85 2 case 0x9e:break;
86 2 case 0x9f:a=detail_answer(1,0xDF);
87 2 break;
88 2 default:break;
89 2 }
90 1
91 1 return 1;
92 1 }
93
94 unsigned char fpga_dram_data(unsigned char flag) using 1
95 {
96 1
97 1 unsigned int i,j;
98 1 unsigned char a;
99 1 switch(flag){
100 2 case 0x92:break;
101 2 case 0x93://設置時間 數據由雙口RAM讀到VNRAM中
102 2 address++;
103 2 if(address>0xa7f0)address=0xa080;
104 2 a=XBYTE[address];
105 2 XBYTE[0XC009]=a; //year
106 2
107 2 address++;
108 2 if(address>0xa7f0)address=0xa080;
109 2 XBYTE[0XC008]=XBYTE[address]; //month
110 2 address++;
111 2 if(address>0xa7f0)address=0xa080;
112 2 a=XBYTE[address];
113 2 XBYTE[0XC007]=a; //date
114 2
115 2 address++;
116 2 if(address>0xa7f0)address=0xa080;
117 2 a=XBYTE[address];
C51 COMPILER V6.02 FPGADRAM 09/28/2006 21:46:50 PAGE 3
118 2 XBYTE[0XC004]=a; //hour
119 2 address++;
120 2 if(address>0xa7f0)address=0xa080;
121 2 a=XBYTE[address];
122 2 XBYTE[0XC002]=a; //min
123 2 address++;
124 2 if(address>0xa7f0)address=0xa080;
125 2 a=XBYTE[address];
126 2 XBYTE[0XC000]=a; //sec
127 2
128 2 address++;
129 2 if(address>0xa7f0)address=0xa080;
130 2 a=XBYTE[address];
131 2 XBYTE[0XC006]=XBYTE[address]; //day
132 2 data_address=address; //實際地址
133 2 XBYTE[re_flagaddr]=0x87; //讀取操作完成
134 2 //應答
135 2 a=answer_fpga(0x93);
136 2 break;
137 2 case 0x94:KB++;
138 2 address++;
139 2 if(address>0xa7f0)address=0xa080;
140 2 if(XBYTE[address]==0){
141 3 for(i=0;i<289;i++){
142 4 XBYTE[0X5000+i]=XBYTE[address];
143 4 address++;
144 4 if(address>0xa7f0)address=0xa080;
145 4 }
146 3 }else{
147 3 for(i=0;i<289;i++){
148 4 XBYTE[0X5121+i]=XBYTE[address];
149 4 address++;
150 4 if(address>0xa7f0)address=0xa080;
151 4 }
152 3 }
153 2 XBYTE[re_flagaddr]=0x87; //讀取操作完成
154 2 a=answer_fpga(0x94);
155 2 break;
156 2 case 0x95:address++;
157 2 if(address>0xa7f0)address=0xa080;
158 2 j=(XBYTE[address]-1)*98; //階段表
159 2 for(i=0;i<98;i++){
160 3 XBYTE[0X5242+i+j]=XBYTE[address];
161 3 address++;
162 3 if(address>0xa7f0)address=0xa080;
163 3 }
164 2 XBYTE[re_flagaddr]=0x87; //讀取操作完成
165 2 a=answer_fpga(0x95);
166 2 break;
167 2 case 0x96:address++;
168 2 if(address>0xa7f0)address=0xa080;
169 2 j=(XBYTE[address]-1)*41; //方案
170 2 for(i=0;i<41;i++){
171 3 XBYTE[0X5e82+i+j]=XBYTE[address];
172 3 address++;
173 3 if(address>0xa7f0)address=0xa080;
174 3 }
175 2 XBYTE[re_flagaddr]=0x87; //讀取操作完成
176 2 a=answer_fpga(0x96);
177 2 break;
178 2 case 0x97:
179 2 break;
C51 COMPILER V6.02 FPGADRAM 09/28/2006 21:46:50 PAGE 4
180 2 case 0x98:address++;
181 2 if(address>0xa7f0)address=0xa080;
182 2 j=(XBYTE[address]-1)*74; // 計劃
183 2 for(i=0;i<74;i++){
184 3 XBYTE[0X63a2+i+j]=XBYTE[address];
185 3 address++;
186 3 if(address>0xa7f0)address=0xa080;
187 3 }
188 2 XBYTE[re_flagaddr]=0x87; //讀取操作完成
189 2 a=answer_fpga(0x98);
190 2 break;
191 2 case 0x99:address++;
192 2 if(address>0xa7f0)address=0xa080;
193 2 for(i=0;i<60;i++){
194 3 XBYTE[0X6ce2+i]=XBYTE[address];
195 3 address++;
196 3 if(address>0xa7f0)address=0xa080;
197 3 }
198 2 XBYTE[re_flagaddr]=0x87; //讀取操作完成
199 2 a=answer_fpga(0x99);
200 2 break;
201 2 case 0x9a:break;
202 2 case 0x9b:break;
203 2 case 0x9c:break;
204 2 case 0x9d:break;
205 2 case 0x9f:XBYTE[re_flagaddr]=0x87; //讀取操作完成
206 2 //如果是從機,則改變階段歷時,階段號,階段時間
207 2 //非強制,非遙控狀況下
208 2 if((re_control==0x00)&&((force_flag==0x00)||(force_flag==4))){
209 3
210 3 if((machine_flag==0x00)&&(XBYTE[start_addr+0xa002]==XBYTE[0x8009])&&(XBYTE[start_addr+0xa00
-3]==XBYTE[0x800a])){
211 4 FarContrlLed= !FarContrlLed;
212 4 step_time=XBYTE[start_addr+0xa004];
213 4 now_step_key=XBYTE[start_addr+0xa005];
214 4 step_counter=XBYTE[start_addr+0xa006];
215 4 }
216 3 }
217 2 break;
218 2 case 0xc6://j=/*(XBYTE[address+1]-1)*/31*41; //方案 接受降級方案 寫到方案32指定的空間
219 2 for(i=0;i<9;i++){
220 3 address++;
221 3 if(address>0xa7f0)address=0xa080;
222 3 } //提取有效數據
223 2 for(i=0;i<32;i++){
224 3 address++;
225 3 if(address>0xa7f0)address=0xa080;
226 3 // sch_step[i]=XBYTE[address];
227 3 }
228 2 XBYTE[re_flagaddr]=0x87; //讀取操作完成
229 2 a=answer_fpga(0x96);
230 2 break;
231 2 case 0x82:XBYTE[re_flagaddr]=0x87;
232 2 while((XBYTE[0xa023]==0)&&(XBYTE[0xa024]==1)){}; //等待FGPA修改頭尾
233 2 XBYTE[0xa023]=0x01; //CPU修改頭尾
234 2 XBYTE[0xa024]=0X00;
235 2 data_address=(XBYTE[0XA021]<<8)+XBYTE[0XA022]+1; //首地址偏移量
236 2 data_address=(data_address&0x7ff);
237 2 address=data_address; //首地址偏移量
238 2 data_address=data_address+17; //應答數據長度14字節
239 2 if(data_address>0x7f0)data_address=data_address-0x7f0+0x80;
240 2 data_address--;
C51 COMPILER V6.02 FPGADRAM 09/28/2006 21:46:50 PAGE 5
241 2 XBYTE[0XA021]=data_address>>8; //尾地址偏移量
242 2 XBYTE[0XA022]=data_address;
243 2 XBYTE[0XA023]=0X00; //CPU修改頭尾結束
244 2 XBYTE[0XA024]=0X00;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -