📄 lcddram.lst
字号:
C51 COMPILER V6.02 LCDDRAM 09/28/2006 21:46:50 PAGE 1
C51 COMPILER V6.02, COMPILATION OF MODULE LCDDRAM
OBJECT MODULE PLACED IN F:\LAIWORK\GB_ASC\LCDDRAM.OBJ
COMPILER INVOKED BY: c:\COMP51V6\C51.EXE F:\LAIWORK\GB_ASC\LCDDRAM.C DB SB OE LARGE
stmt level source
1 #include <absacc.h>
2 #include <reg51.h>
3 #define eeprom_addr 0x8050;
4 //sbit cs_dram=P3^2;
5 sbit busy=P1^5;
6 sbit WatchDog = P1^3; //看门狗
7 // 运行状态1,自动 2,手动3,遥控 4,软件绿冲突 5.硬件绿冲突 6.线圈故障降级使用
8 unsigned char xdata run_state=1; // 运行状态1,自动 2,手动3,遥控 4,软件绿冲突 5.硬件绿冲突
- 6.
9 extern unsigned int xdata data_address;
10 extern unsigned int xdata address;
11 extern unsigned int xdata tr_flagaddr;
12
13 extern unsigned char xdata now_day_planid;
14 extern unsigned char xdata timeid;
15 extern unsigned char xdata now_schemeid;
16 extern unsigned char xdata now_step_schid;
17 extern unsigned char xdata step_counter;
18 extern unsigned char xdata now_step_uncount;
19 extern unsigned char xdata led83[30],led82[5];
20 extern unsigned char xdata step_num;
21 unsigned char xdata tt,ttd,ch[100];
22 unsigned int xdata utemp;
23
24 unsigned char cpu_fpga_set(unsigned char flag,unsigned int ptr,unsigned int len)
25 {
26 1 unsigned int i;
27 1 data_address=XBYTE[0XA021]<<8+XBYTE[0XA022]+1;
28 1 address=data_address;
29 1 data_address=data_address+len; //应答数据长度1字节
30 1 if(data_address>0xa7f0)data_address=data_address-0xa7f0+0xa080;
31 1 while((XBYTE[0xa023]==0)&&(XBYTE[0xa024]==1)){}; //等待FGPA修改头尾
32 1 XBYTE[0xa023]=0x01; //CPU修改头尾
33 1 XBYTE[0xa024]=0X00;
34 1 data_address=(XBYTE[0XA021]<<8)+XBYTE[0XA022]+1;
35 1 data_address=(data_address&0x7ff);
36 1 address=data_address;
37 1 data_address=data_address+len; //应答数据长度1字节
38 1 if(data_address>0xa7f0)data_address=data_address-0x7f0+0x80;
39 1 data_address--;
40 1 XBYTE[0XA021]=data_address>>8; //
41 1 XBYTE[0XA022]=data_address;
42 1 XBYTE[0XA023]=0X00; //CPU修改头尾结束
43 1 XBYTE[0XA024]=0X00;
44 1 XBYTE[tr_flagaddr+1]=address>>8; //发送数据的首地址
45 1 XBYTE[tr_flagaddr+2]=address;
46 1 XBYTE[tr_flagaddr+3]=data_address>>8; //发送数据的尾地址
47 1 XBYTE[tr_flagaddr+4]=data_address;
48 1 address=address+0xa000; //发送应答数据
49 1 if(address>0xa7f0)address=0xa080;
50 1 XBYTE[address]=flag;
51 1 address++;
52 1 for(i=0;i<len;i++){
53 2 XBYTE[address+i]=XBYTE[ptr+i];
54 2 }
C51 COMPILER V6.02 LCDDRAM 09/28/2006 21:46:50 PAGE 2
55 1 XBYTE[tr_flagaddr]=0x01;
56 1 return 1;
57 1 }
58 deal_lcddram()
59 {
60 1 unsigned char flag,tq;
61 1 unsigned char id,fu;
62 1 unsigned char idcode;
63 1 unsigned int i,j,k,num,addr;
64 1
65 1 //查询
66 1 do{ }while(busy==0);
67 1 flag=XBYTE[0XC408];
68 1 do{ }while(busy==0);
69 1 id=XBYTE[0XC40A];
70 1 do{ }while(busy==0);
71 1 fu=XBYTE[0XC40b];
72 1 do{ }while(busy==0);
73 1 idcode=XBYTE[0XC40c];
74 1 if(flag==1){
75 2 // EA=0;
76 2 switch(id){
77 3 case 0x80: //do{WatchDog = !WatchDog;}while(busy==0);XBYTE[0XC410]=0XC0;
78 3 do{ }while(busy==0);XBYTE[0XC410]=XBYTE[0X8002];
79 3 do{ }while(busy==0);XBYTE[0XC411]=XBYTE[0X8003];
80 3 do{ }while(busy==0);XBYTE[0XC412]=XBYTE[0X8004];
81 3 do{ }while(busy==0);XBYTE[0XC413]=XBYTE[0X8005];
82 3 do{ }while(busy==0);XBYTE[0XC414]=XBYTE[0X8006];
83 3 do{ }while(busy==0);XBYTE[0XC415]=XBYTE[0X8007];
84 3 do{ }while(busy==0);XBYTE[0XC416]=XBYTE[0X8008];
85 3 do{ }while(busy==0);XBYTE[0XC408]=0;
86 3 break;
87 3 case 0x82: do{ }while(busy==0);XBYTE[0XC410]=0XC2;
88 3 do{ }while(busy==0);XBYTE[0XC411]=0x20; //最大输出通道数
89 3 do{ }while(busy==0);XBYTE[0XC412]=0X20; //支持阶段表数
90 3 do{}while(busy==0);XBYTE[0XC413]=0X20; //一个阶段表支持的最大阶段
-数
91 3 do{}while(busy==0);XBYTE[0XC414]=0X20; //最大控制方案数
92 3 do{}while(busy==0);XBYTE[0XC415]=0X20; //最大日计划数
93 3 do{}while(busy==0);XBYTE[0XC416]=0X18; //一个日计划支持的最大时段
94 3 do{}while(busy==0);XBYTE[0XC417]=XBYTE[0X72E2]; //开机时间小时
95 3 do{}while(busy==0);XBYTE[0XC418]=XBYTE[0X72E3]; //开机时间分钟
96 3 do{}while(busy==0);XBYTE[0XC419]=XBYTE[0X72E4]; //关机时间小时
97 3 do{}while(busy==0);XBYTE[0XC41a]=XBYTE[0X72E5]; //关机时间分钟
98 3 do{}while(busy==0);XBYTE[0XC41b]=XBYTE[0X72E6]; //关机后状态
99 3 do{}while(busy==0);XBYTE[0XC41c]=XBYTE[0X8000];
100 3 do{}while(busy==0);XBYTE[0XC41d]=XBYTE[0X8001];
101 3 do{}while(busy==0);XBYTE[0XC408]=0;
102 3 break;
103 3
104 3 case 0x83: do{}while(busy==0);XBYTE[0XC410]=0XC3;
105 3 do{}while(busy==0);XBYTE[0XC411]=XBYTE[0XC009]; //year
106 3 do{}while(busy==0);XBYTE[0XC412]=XBYTE[0XC008]; //month
107 3 do{}while(busy==0);XBYTE[0XC413]=XBYTE[0XC007]; //date
108 3 do{}while(busy==0);XBYTE[0XC414]=XBYTE[0XC004]; //hour
109 3 do{}while(busy==0);XBYTE[0XC415]=XBYTE[0XC002]; //min
110 3 do{}while(busy==0);XBYTE[0XC416]=XBYTE[0XC000]; //sec
111 3 do{}while(busy==0);XBYTE[0XC417]=XBYTE[0XC006]; //day
112 3 do{}while(busy==0);XBYTE[0XC408]=0;
113 3 break;
114 3 case 0x84: do{}while(busy==0);XBYTE[0XC410]=0XC4; //相位信息
115 3 if(idcode==0){
C51 COMPILER V6.02 LCDDRAM 09/28/2006 21:46:50 PAGE 3
116 4 tq=XBYTE[0XC40D];
117 4 j=(tq-1)*18;
118 4 for(i=0;i<18;i++){
119 5
120 5 XBYTE[0XC411+i]=XBYTE[0x5001+i+j];
121 5 }
122 4 }else{
123 4 j=XBYTE[0XC40D];
124 4 j=(j-1)*18;
125 4 for(i=0;i<18;i++){
126 5 do{}while(busy==0);XBYTE[0XC411+i]=XBYTE[0x5122+i+j];
127 5 }
128 4 }
129 3
130 3 do{}while(busy==0);XBYTE[0XC408]=0;
131 3 break;
132 3 case 0x85: XBYTE[0XC410]=0XC5; //阶段表
133 3 j=(idcode-1)*98;
134 3 for(i=0;i<98;i++){
135 4 if(i==4){
136 5 do{}while(busy==0);XBYTE[0XC411+i]=XBYTE[0x5242+i+j]+1;
137 5 }else{
138 5 do{}while(busy==0);XBYTE[0XC411+i]=XBYTE[0x5242+i+j];
139 5 }
140 4 }
141 3 do{}while(busy==0);XBYTE[0XC408]=0;
142 3 break;
143 3 case 0x86: do{}while(busy==0);XBYTE[0XC410]=0XC6; //控制方案
144 3 j=(idcode-1)*41;
145 3 for(i=0;i<41;i++){
146 4 do{}while(busy==0);XBYTE[0XC411+i]=XBYTE[0x5e82+i+j];
147 4 }
148 3 do{}while(busy==0);XBYTE[0XC408]=0;
149 3 break;
150 3 // case 0x87:break;
151 3 case 0x88: do{}while(busy==0);XBYTE[0XC410]=0XC8; //日计划
152 3 j=(idcode-1)*74;
153 3 for(i=0;i<74;i++){
154 4
155 4 do{}while(busy==0);XBYTE[0XC411+i]=XBYTE[0x63A2+i+j];
156 4
157 4 }
158 3 do{}while(busy==0);XBYTE[0XC408]=0;
159 3 break;
160 3 case 0x89: do{}while(busy==0);XBYTE[0XC410]=0XC9; //日计划
161 3 j=XBYTE[0XC40c];
162 3 j=(j-1)*6;
163 3 for(i=0;i<60;i++){
164 4 do{}while(busy==0);XBYTE[0XC411+i]=XBYTE[0x6cE2+i+j];
165 4 }
166 3 do{}while(busy==0);XBYTE[0XC408]=0;
167 3 break;
168 3 case 0x8a: ////////////////////////////////////////////
169 3 do{}while(busy==0);XBYTE[0XC410]=0XCa; //当前控制信息
170 3 do{}while(busy==0);XBYTE[0XC411]=led82[0]; //当天日计划号
171 3 do{}while(busy==0);XBYTE[0XC412]=led82[1]; //当天时段号
172 3 do{}while(busy==0);XBYTE[0XC413]=led82[2]; //当前控制方案号
173 3 j=(led82[2]-1)*41;
174 3 j=0x5e85+j;
175 3 if(XBYTE[j]==0){
176 4 do{}while(busy==0);XBYTE[0XC414]=0; //非协调方案
177 4 }else {
C51 COMPILER V6.02 LCDDRAM 09/28/2006 21:46:50 PAGE 4
178 4 do{}while(busy==0);XBYTE[0XC414]=1; //协调方案
179 4 }
180 3 do{}while(busy==0);XBYTE[0XC408]=0;
181 3 break;
182 3 case 0x8b: //阶段放行的相位
183 3 if((step_counter+1)==step_num){
184 4 led83[6]=1;
185 4 utemp=0x5244+(led83[0]-1)*98;
186 4 }else{
187 4 led83[6]=led83[1]+1;
188 4 utemp=0x5247+(led83[0]-1)*98+step_counter*3;
189 4 }
190 3 led83[9]=XBYTE[utemp];
191 3 led83[10]=XBYTE[utemp+1];
192 3 do{}while(busy==0);XBYTE[0XC410]=0XCb; //当前信号机状态
193 3 do{}while(busy==0);XBYTE[0XC411]=led83[0]; //当前控制方案附加信息 :当前
-阶段表号
194 3 do{}while(busy==0);XBYTE[0XC412]=led83[1]; //当前阶段
195 3 do{}while(busy==0);XBYTE[0XC413]=0x00;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -