📄 fpgadram.lst
字号:
C51 COMPILER V6.02 FPGADRAM 08/02/2006 14:44:15 PAGE 1
C51 COMPILER V6.02, COMPILATION OF MODULE FPGADRAM
OBJECT MODULE PLACED IN D:\GB_ASC\FPGADRAM.OBJ
COMPILER INVOKED BY: e:\comp51\COMP51V6\C51.EXE D:\GB_ASC\FPGADRAM.C DB SB OE LARGE
stmt level source
1 #include <absacc.h>
2 #include <reg51.h>
3 unsigned int xdata start_addr;
4 unsigned int xdata end_addr;
5 unsigned int xdata address;
6 unsigned int xdata data_address=0xa080; //双口RAM数据存放地址计数器
7 unsigned char xdata iiiii,flagi;
8
9 unsigned int re_flagaddr;
10 unsigned int tr_flagaddr=0xa030;
11 unsigned int tr_startaddr; //发送数据开始地址
12 unsigned int tr_endaddr; //
13
14
15
16 unsigned int detail_answer(/*unsigned char *ptr,*/unsigned int len,unsigned char detail)
17 {
18 1 unsigned char i;
19 1 data_address=XBYTE[0XA021]<<8+XBYTE[0XA022]+1; //当前数据区的尾地址,可以使用的首地址,偏移量
20 1 address=data_address;
21 1 data_address=data_address+len; //应答数据长度1字节
22 1 if(data_address>0x7f0)data_address=data_address-0x7F0+0x80; //偏移地址
23 1
24 1 while((XBYTE[0xa023]==0)&&(XBYTE[0xa024]==1)){}; //等待FGPA修改头尾
25 1 XBYTE[0xa023]=0x01; //CPU修改头尾
26 1 XBYTE[0xa024]=0X00;
27 1 data_address=(XBYTE[0XA021]<<8)+XBYTE[0XA022]+1; //CPU程序可以应用的首地址,偏移地址
28 1
29 1
30 1 address=data_address; //首地址偏移量
31 1 data_address=data_address+len; //应答数据长度1字节
32 1 if(data_address>0x7f0)data_address=data_address-0x7f0+0x80;
33 1 data_address--;
34 1 XBYTE[0XA021]=data_address>>8; //尾地址偏移量
35 1 XBYTE[0XA022]=data_address;
36 1 XBYTE[0XA023]=0X00; //CPU修改头尾结束
37 1 XBYTE[0XA024]=0X00;
38 1 tr_flagaddr=0xa030;
39 1 for(i=0;i<6;i++){
40 2 tr_flagaddr=tr_flagaddr+i*5;
41 2 if(XBYTE[tr_flagaddr]==0x87)break;
42 2 }
43 1 if(i==6)return 1 ;
44 1 XBYTE[tr_flagaddr+1]=address>>8; //发送数据的首地址
45 1 XBYTE[tr_flagaddr+2]=address;
46 1
47 1 XBYTE[tr_flagaddr+3]=data_address>>8; //发送数据的尾地址
48 1 XBYTE[tr_flagaddr+4]=data_address;
49 1 address=address+0xa000; //发送应答数据 绝对地址
50 1 XBYTE[address]=detail;
51 1 XBYTE[tr_flagaddr]=0x01;
52 1 return 1;
53 1 }
54
55 unsigned char answer_fpga(unsigned char flag)
C51 COMPILER V6.02 FPGADRAM 08/02/2006 14:44:15 PAGE 2
56 {
57 1 unsigned char i;
58 1
59 1 //相应的接收标志写成0x87
60 1 XBYTE[re_flagaddr]=0x87;
61 1
62 1 for(i=0;i<6;i++){
63 2 tr_flagaddr=0XA030+5*i;
64 2 if(XBYTE[tr_flagaddr]==0x87)break;
65 2 }
66 1 if(i==6)return 1;
67 1 switch(flag){ //FPG对CPU进行设置
68 2 case 0x92:break;
69 2 case 0x93:detail_answer(1,0xd3);break;
70 2 case 0x94:detail_answer(1,0xd4);break;
71 2 case 0x95:detail_answer(1,0xd5);break;
72 2 case 0x96:detail_answer(1,0xd6);break;
73 2 case 0x97:detail_answer(1,0xd7);break;
74 2 case 0x98:detail_answer(1,0xd8);break;
75 2 case 0x99:detail_answer(1,0xd9);break;
76 2 case 0x9a:detail_answer(1,0xda);break;
77 2 case 0x9c:detail_answer(1,0xdc);break;
78 2 case 0x9d:break;
79 2 case 0x9e:break;
80 2 case 0x9f:break;
81 2 default:break;
82 2 }
83 1
84 1 return 1;
85 1 }
86
87 unsigned char fpga_dram_data(unsigned char flag)
88 {
89 1
90 1 unsigned int i,j;
91 1 unsigned char a;
92 1 switch(flag){
93 2 case 0x92:break;
94 2 case 0x93://设置时间 数据由双口RAM读到VNRAM中
95 2 address++;
96 2 if(address>0xa7f0)address=0xa080;
97 2 a=XBYTE[address];
98 2 XBYTE[0XC009]=a; //year
99 2
100 2 address++;
101 2 if(address>0xa7f0)address=0xa080;
102 2 XBYTE[0XC008]=XBYTE[address]; //month
103 2 address++;
104 2 if(address>0xa7f0)address=0xa080;
105 2 a=XBYTE[address];
106 2 XBYTE[0XC007]=a; //date
107 2
108 2 address++;
109 2 if(address>0xa7f0)address=0xa080;
110 2 a=XBYTE[address];
111 2 XBYTE[0XC004]=a; //hour
112 2 address++;
113 2 if(address>0xa7f0)address=0xa080;
114 2 a=XBYTE[address];
115 2 XBYTE[0XC002]=a; //min
116 2 address++;
117 2 if(address>0xa7f0)address=0xa080;
C51 COMPILER V6.02 FPGADRAM 08/02/2006 14:44:15 PAGE 3
118 2 a=XBYTE[address];
119 2 XBYTE[0XC000]=a; //sec
120 2
121 2 address++;
122 2 if(address>0xa7f0)address=0xa080;
123 2 a=XBYTE[address];
124 2 XBYTE[0XC006]=XBYTE[address]; //day
125 2 data_address=address; //实际地址
126 2 //应答
127 2 answer_fpga(0x93);
128 2 break;
129 2 case 0x94:address++;
130 2 if(address>0xa7f0)address=0xa080;
131 2 if(XBYTE[address]==0){
132 3 for(i=0;i<289;i++){
133 4 XBYTE[0X5000+i]=XBYTE[address];
134 4 address++;
135 4 if(address>0xa7f0)address=0xa080;
136 4 }
137 3 }else{
138 3 for(i=0;i<289;i++){
139 4 XBYTE[0X5121+i]=XBYTE[address];
140 4 address++;
141 4 if(address>0xa7f0)address=0xa080;
142 4 }
143 3 }
144 2 answer_fpga(0x94);
145 2 break;
146 2 case 0x95:address++;
147 2 if(address>0xa7f0)address=0xa080;
148 2 j=(XBYTE[address]-1)*98; //阶段表
149 2 for(i=0;i<98;i++){
150 3 XBYTE[0X5242+i+j]=XBYTE[address];
151 3 address++;
152 3 if(address>0xa7f0)address=0xa080;
153 3 }
154 2 answer_fpga(0x95);
155 2 break;
156 2 case 0x96:address++;
157 2 if(address>0xa7f0)address=0xa080;
158 2 j=(XBYTE[address]-1)*41; //方案
159 2 for(i=0;i<41;i++){
160 3 XBYTE[0X5e82+i+j]=XBYTE[address];
161 3 address++;
162 3 if(address>0xa7f0)address=0xa080;
163 3 }
164 2 answer_fpga(0x96);
165 2 break;
166 2 case 0x97:
167 2 break;
168 2 case 0x98:address++;
169 2 if(address>0xa7f0)address=0xa080;
170 2 j=(XBYTE[address]-1)*74; // 计划
171 2 for(i=0;i<74;i++){
172 3 XBYTE[0X63a2+i+j]=XBYTE[address];
173 3 address++;
174 3 if(address>0xa7f0)address=0xa080;
175 3 }
176 2 answer_fpga(0x98);
177 2 break;
178 2 case 0x99:address++;
179 2 if(address>0xa7f0)address=0xa080;
C51 COMPILER V6.02 FPGADRAM 08/02/2006 14:44:15 PAGE 4
180 2 for(i=0;i<60;i++){
181 3 XBYTE[0X6ce2+i]=XBYTE[address];
182 3 address++;
183 3 if(address>0xa7f0)address=0xa080;
184 3 }
185 2 answer_fpga(0x99);
186 2 break;
187 2 case 0x9a:break;
188 2 case 0x9b:break;
189 2 case 0x9c:break;
190 2 case 0x9d:break;
191 2 case 0xc6:j=/*(XBYTE[address+1]-1)*/31*41; //方案 接受降级方案 写到方案32指定的空间
192 2
193 2 for(i=0;i<40;i++){
194 3 address++;
195 3 if(address>0xa7f0)address=0xa080;
196 3 XBYTE[0X5e82+i+j]=XBYTE[address];
197 3 }
198 2 answer_fpga(0x96);
199 2 break;
200 2 case 0x82:XBYTE[re_flagaddr]=0x87;
201 2 data_address=XBYTE[0XA021]<<8+XBYTE[0XA022]+1; //首地址偏移量
202 2 address=data_address; //首地址偏移量
203 2 data_address=data_address+14; //应答数据长度14字节
204 2 if(data_address>0x7f0)data_address=data_address-0x7f0+0x80;
205 2 while((XBYTE[0xa023]==0)&&(XBYTE[0xa024]==1)){}; //等待FGPA修改头尾
206 2 XBYTE[0xa023]=0x01; //CPU修改头尾
207 2 XBYTE[0xa024]=0X00;
208 2 data_address=(XBYTE[0XA021]<<8)+XBYTE[0XA022]+1; //首地址偏移量
209 2 address=data_address; //首地址偏移量
210 2 data_address=data_address+14; //应答数据长度14字节
211 2 if(data_address>0x7f0)data_address=data_address-0x7f0+0x80;
212 2 data_address--;
213 2 XBYTE[0XA021]=data_address>>8; //尾地址偏移量
214 2 XBYTE[0XA022]=data_address;
215 2 XBYTE[0XA023]=0X00; //CPU修改头尾结束
216 2 XBYTE[0XA024]=0X00;
217 2 tr_flagaddr=0xa030;
218 2 for(i=0;i<6;i++){
219 3 tr_flagaddr=tr_flagaddr+i*5;
220 3 if(XBYTE[tr_flagaddr]==0x87)break;
221 3 }
222 2 if(i==6)return 1 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -