📄 kjj19-mn.lst
字号:
C51 COMPILER V8.02 KJJ19_MN 10/10/2006 14:47:30 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE KJJ19_MN
OBJECT MODULE PLACED IN KJJ19-mn.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE KJJ19-mn.c DEBUG OBJECTEXTEND
line level source
1 /************************************************************************************
2 * NOTICE:
3 * NAME: KJF19-MN
4 * USE: 模拟监控仪(无线)
5 * VERSION: V6.8
6 * START DATE: 28/8/2006
7 * END DATE: 31/10/2006
8 * MCU: STC89C52RD
9 * CRYSTAL: 11.0592MHz
10 * COMPANY: 镇江中煤电子有限公司
11 * WRITER: 胡峰平
12 * FUNCTION DESCRIPTION:
13 ************************************************************************************/
14 #include <At89x52.h>
15 #include<absacc.h> //引用外部数据存储器XBYTE
16 #include<intrins.h> //_nop_()引用
17 //AT89S52 pins define
18 #define uchar unsigned char
19 #define uint unsigned int
20
21 #define SIOAB P2_0 //Z85C30 A/B 路选择
22 #define SIODC P2_1 //Z85C30 D/C 数据/控制选择
23 #define SIOCS P2_4 //Z85C30片选
24 #define SIOWR P2_2 //Z85C30写信号
25 #define SIORD P2_3 //Z85C30读信号
26
27
28 #define l_red P1_6 //红发光管
29 #define l_green P1_7 //绿发光管
30 #define l_x P1_0 //实验灯
31
32 sfr ISP_DATA=0xe2; //内部EEPROM寄存器定义
33 sfr ISP_ADDRH=0xe3;
34 sfr ISP_ADDRL=0xe4;
35 sfr ISP_CMD=0xe5;
36 sfr ISP_TRIG=0xe6;
37 sfr ISP_CONTR=0xe7;
38 sfr WDT_CONTR=0xe1; //看门狗
39
40 uchar r_count; //红灯计数器
41
42 uchar data RIbuf[12]; //串口接收缓存
43 uchar rsum; //已接收数
44 uchar rljh; //接收累加和
45
46 uchar data TIbuf[10]; //串口发送缓存
47 uchar tsum; //已发送数
48
49 uchar siobuf[15]; //SIO接收数据缓存
50 uchar siojsgs; //SIO数据个数
51 uchar data siofs[8]; //sio发送数据缓存
52 uchar siofsgs; //SIO发送数据个数
53
54 uchar data wxfzh[8]; //设定无线挂接分站最大八个
55 uchar idata wxfzcs[32]; //无线分站的参数
C51 COMPILER V8.02 KJJ19_MN 10/10/2006 14:47:30 PAGE 2
56 uchar idata fzsj[64]; //8个分站的数据
57 uchar wxh; //下发分站数组序号,对无线
58 uchar ddfz; //断电分站
59 uchar ddcs; //断电参数
60 uchar data dzzs; //巡检地址总数,对SDLC总线
61 uchar xjxh; //当前巡检序号 ,对SDLC
62
63 uchar RIYC; //接收延迟
64 uchar xjfzh; //巡检分站号
65 uchar mm5s; //5秒延迟
66 uchar mm3s; //3秒延迟
67 uchar mm20ms; //20-30毫秒延迟
68 uchar bmoks; //用于Z85C30发送计数
69 uchar bms; //发送延迟数
70 uchar qtzlh; //其他指令号
71
72 bit bmok; //用于Z85C30发送标记
73 bit fsok; //发送OK
74 bit Z85C30zdok; //Z85C30接收中断OK
75 bit RIBJ; //串口接收标记
76 bit TIBJ; //串口发送标记
77 bit RIOK; //接收完成了
78 bit fzhybj; //分站询问回答标记
79 bit qtzlbj; //地面下发的其他指令标记
80 bit CKZY; //串口占用标志
81 bit qtzlbj; //其他指令标记
82
83 void Z85C30_KZJCQ(uchar KZJCQH,uchar KZSJ); //控制寄存器设置
84 void Z85C30_WR0(uchar KSJ); //WR0设置
85 uchar Z85C30_JCQRD(uchar JCQH); //寄存器读取
86 void system_init(void); //系统初始化
87 void Z85C30_init(void); //Z85C30设置
88 void Z85C30_init_A(void); //Z85C30设置快速
89 void delay_ms(unsigned int delay_counter); //毫秒延迟
90 void sytx(void); //SIO回答
91 void HY232(uchar ml); //串口输出
92 void cl232(void); //串口数据处理
93 void eeprom_w(uchar addrh,uchar addrl,uchar sj);//EEPROM写操作
94 uchar eeprom_r(uchar addrh,uchar addrl); //EEPROM读操作
95 void eeprom_clr(uchar addrh,uchar addrl); //EEPROM清空
96
97 void main(void); //主程序
98 void szzd(void); //TO中断
99 void int0_51(void); //外中断0,Z85C30中断
100 void int_232(void); //串口中断
101
102
103 /***********************************************************************************
104 * function: main()
105 * use:
106 * input parameter: none
107 * output parameter: none
108 ***********************************************************************************/
109 void main(void)
110 {
111 1 uchar m;
112 1 P1=0XFF;
113 1 P0=0XFF;
114 1 P2=0XFF;
115 1 P3=0XFF;
116 1 SP=0Xf0; //225字节开始
117 1 l_red=0;
C51 COMPILER V8.02 KJJ19_MN 10/10/2006 14:47:30 PAGE 3
118 1 delay_ms(100);
119 1 wxh=0;
120 1 xjxh=0;
121 1 CKZY=0;
122 1 qtzlbj=0;
123 1 WDT_CONTR=0x37; //看门狗设置9秒一次的溢出
124 1
125 1 for(m=0;m<32;m++) //读取8个分站的参数
126 1 {
127 2 wxfzcs[m]=eeprom_r(0x20,m);
128 2 }
129 1 for(m=32;m<40;m++) //读8个分站的地址
130 1 {
131 2 wxfzh[m-32]=eeprom_r(0x20,m);
132 2 }
133 1 dzzs=eeprom_r(0x20,40); //读取设置分站数
134 1 m=eeprom_r(0x20,41); //读取设置分站数反码
135 1 if(m+dzzs!=0xFF)
136 1 dzzs=0;
137 1 Z85C30_init(); //Z85C30初始化
138 1 system_init(); //系统初始化
139 1
140 1 RIOK=0;
141 1 rsum=0;
142 1 RIbuf[0]=0;
143 1 Z85C30zdok=0;
144 1 fzhybj=0;
145 1 siojsgs=0;
146 1
147 1
148 1 while(1)
149 1 {
150 2
151 2
152 2 if(RIOK==1) //**********如果有串口数据包进来***********
153 2 {
154 3
155 3 cl232(); //串口数据处理
156 3 RIOK=0;
157 3 rsum=0;
158 3
159 3
160 3 } // if(RIOK==1)
161 2
162 2
163 2 if(Z85C30zdok==1) //***********如果有Z85C30数据包接收到,需要回答数据*********
164 2 {
165 3 for(m=0;m<dzzs;m++)
166 3 {
167 4 if(wxfzh[m]==siobuf[0]) //如果有设置相同的点号
168 4 {
169 5 xjxh=m; //确定SDLC巡检的序号
170 5 if(siojsgs==15) //给计算机回应监控仪数据
171 5 sytx();
172 5 break;
173 5 }
174 4 if(siojsgs==4) //控制命令
175 4 {
176 5 qtzlh=5;
177 5 qtzlbj=1;
178 5 break;
179 5 }
C51 COMPILER V8.02 KJJ19_MN 10/10/2006 14:47:30 PAGE 4
180 4 if(siojsgs==7) //总清命令
181 4 {
182 5 qtzlh=6;
183 5 qtzlbj=1;
184 5 break;
185 5 }
186 4 }
187 3
188 3 Z85C30zdok=0;
189 3 Z85C30_init_A();
190 3 }
191 2 if(qtzlbj==1) //*******************其他指令标记*****************
192 2 {
193 3 if(CKZY==0) //检查是否串口空闲60ms了
194 3 {
195 4 delay_ms(100);
196 4 if(CKZY==0)
197 4 {
198 5 qtzlbj=0;
199 5 HY232(qtzlh);
200 5 }
201 4 }
202 3 }
203 2 } //while(1)
204 1
205 1 } //main
206 /*********************************************************************************
207 * function: system_init()
208 * use: 系统初始化
209 * input parameter: none
210 * output parameter: none
211 *********************************************************************************/
212 void system_init(void)
213 {
214 1 delay_ms(10);
215 1
216 1 TMOD=0x21; //T0方式1,T1方式2
217 1 PCON=0x80;
218 1 SCON=0x50; /* 串口方式1, 8-bit UART,接收允许 */
219 1 TH0=0xdc;
220 1 TL0=0x00;
221 1 TH1=0xfd; /* TH1: 19.2k bps @ 11.0592MHz */
222 1 TL1=0xfd;
223 1 IT0=1; //外中断0下降沿触发
224 1 IP=0x02; //T0高优先级
225 1 IE=0x93; //允许外部中断0,T0中断,串口中断
226 1 TR0=1; //记数T0
227 1 TR1=1;
228 1 }
229
230 /***************************************************************************
231 实验通信-模拟分站与主接口的通信,回答接口的询问
232 ******************************************/
233 void sytx(void)
234 {
235 1 uchar data i,b;
236 1 WDT_CONTR=0x37; //看门狗设置9秒一次的溢出
237 1 SIOAB=1; //设置控制字A路接收
238 1 Z85C30_KZJCQ(0x03,0xCC); //WR3 RX不允许接收
239 1 SIOAB=0; //B路设置
240 1 Z85C30_KZJCQ(0x05,0x69); //WR5 发送8位字符,发送器开放,发送CRC开放
241 1 Z85C30_WR0(0x80); //WR0 TX_CRC复位
C51 COMPILER V8.02 KJJ19_MN 10/10/2006 14:47:30 PAGE 5
242 1 Z85C30_KZJCQ(0x0A,0x80); //WR10 TX_CRC预置为FF
243 1
244 1 SIODC=1; //发送上位机地址
245 1 P0=0x00; //接口地址
246 1 SIOCS=0;SIOWR=0;
247 1 _nop_();
248 1 SIOWR=1; SIOCS=1;SIODC=0;
249 1 Z85C30_WR0(0xC0); //发送欠载/信息结束位复位
250 1
251 1 i=xjxh*8;
252 1 for (b=0;b<8;b++)//把要回答给接口的数据提取
253 1 {
254 2 siofs[b]=fzsj[i];
255 2 i=i+1;
256 2 }
257 1
258 1 for (b=1;b<9;b++) //上传接口8个字节,
259 1 {
260 2 i=0;
261 2 bmoks=0;
262 2 bms=3;
263 2 bmok=0; //用于SIO发送成功标记
264 2 while(i!=0x04)
265 2 {
266 3 if (bmok==1)
267 3 goto willx1;
268 3 i=Z85C30_JCQRD(0X00); //读取寄存器中的数据
269 3 i=i&0x04;
270 3 }
271 2 goto pp1;
272 2 willx1: break;
273 2 pp1:
274 2
275 2 P0=siofs[b]; //参数数据
276 2 SIODC=1; //发送数据
277 2 SIOCS=1;SIOWR=1;
278 2 SIOCS=0;SIOWR=0;
279 2 _nop_();
280 2 SIOWR=1; SIOCS=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -