📄 zhu19200.lst
字号:
C51 COMPILER V6.02 ZHU19200 07/05/2004 14:20:33 PAGE 1
C51 COMPILER V6.02, COMPILATION OF MODULE ZHU19200
OBJECT MODULE PLACED IN J:\MAIN00\ZHU19200_A\ZHU19200.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE J:\MAIN00\ZHU19200_A\ZHU19200.C DB SB OE LA
stmt level source
1 //修改为各自的函数
2 //2003.7.24,9:56
3 //模拟数据上传,上层通信良好;下层通信没做
4 //修改串口波特率容错没做,(办法为5分钟没收到数据就重新设置波特率),
5 //修改波特率等待数据发完才开锁,才进行修改
6 //完成与AIDI模块的通信,能实时上AIDI模块的数据2003.7.31;10:59
7 #include"zhu_ini.h"
8 #include"zhu1126.h"
9
10
11 void Feed_watchdog() //喂狗
12 {
13 1 FeedDogFlag=0;
14 1 _nop_();
15 1 FeedDogFlag=1;
16 1 }
17
18 void Delay_nop0(uchar n)//n个nop延时
19 {
20 1 uchar data i;
21 1 for(i=0;i<n;i++)
22 1 {
23 2 _nop_();
24 2 }
25 1 }
26
27 uchar Read_ID() //读ID号
28 {
29 1 return(XBYTE[0x2000]);
30 1 }
31
32 void baud_select(uchar channel_s,uchar baud_s)//波特率选择
33 {
34 1 uchar data baud00,setmodem;
35 1 uint data dptr00;
36 1 switch(channel_s)
37 1 {
38 2 case 1:
39 2 dptr00=0xA000;
40 2 setmodem=0x36;
41 2 break;
42 2 case 2:
43 2 dptr00=0xA001;
44 2 setmodem=0x76;
45 2 break;
46 2 case 3:
47 2 dptr00=0xA002;
48 2 setmodem=0xB6;
49 2 break;
50 2 default:return;
51 2 }
52 1 switch(baud_s)
53 1 {
54 2 case 1:
55 2 baud00=96;
C51 COMPILER V6.02 ZHU19200 07/05/2004 14:20:33 PAGE 2
56 2 break; //1200
57 2 case 2:
58 2 baud00=48;
59 2 break; //2400
60 2 case 3:
61 2 baud00=24;
62 2 break; //4800
63 2 case 4:
64 2 baud00=12;
65 2 break; //9600
66 2 case 5:
67 2 baud00=6;
68 2 break; //19200
69 2 case 6:
70 2 baud00=3;
71 2 break; //38400
72 2 default:return;
73 2 }
74 1 XBYTE[0xA003]=setmodem; //计数器方式设置
75 1 XBYTE[dptr00]=baud00; //设置波特率
76 1 XBYTE[dptr00]=0; //高八位
77 1 }
78 void hex2asc0(uchar * asc2char,uchar chChar)
79 {
80 1 uchar data hByte,lByte;
81 1 hByte=( chChar & 0xF0 )>>4;
82 1 lByte=( chChar & 0x0F );
83 1 if(hByte>=0 && hByte<10)
84 1 {
85 2 *asc2char++ = hByte + 48;
86 2 }
87 1 else if (hByte>9 && hByte<16)
88 1 {
89 2 *asc2char++ = hByte + 55;
90 2 }
91 1
92 1 if(lByte>=0 && lByte<10)
93 1 {
94 2 *asc2char++ = lByte + 48;
95 2 }
96 1 else if (lByte>9 && lByte<16)
97 1 {
98 2 *asc2char++ = lByte + 55;
99 2 }
100 1 }
101
102 void hex2asc1(uchar * asc2char,uint chInt)
103 {
104 1 uchar data hhByte,hlByte,lhByte,llByte;
105 1 hhByte=( chInt & 0xF000 )>>12;
106 1 hlByte=( chInt & 0x0F00 )>>8;
107 1 lhByte=( chInt & 0x00F0 )>>4;
108 1 llByte=( chInt & 0x000F );
109 1 if(hhByte>=0 && hhByte<10)
110 1 {
111 2 *asc2char++ = hhByte + 48;
112 2 }
113 1 else if (hhByte>9 && hhByte<16)
114 1 {
115 2 *asc2char++ = hhByte + 55;
116 2 }
117 1
C51 COMPILER V6.02 ZHU19200 07/05/2004 14:20:33 PAGE 3
118 1 if(hlByte>=0 && hlByte<10)
119 1 {
120 2 *asc2char++ = hlByte + 48;
121 2 }
122 1 else if (hlByte>9 && hlByte<16)
123 1 {
124 2 *asc2char++ = hlByte + 55;
125 2 }
126 1
127 1 if(lhByte>=0 && lhByte<10)
128 1 {
129 2 *asc2char++ = lhByte + 48;
130 2 }
131 1 else if (lhByte>9 && lhByte<16)
132 1 {
133 2 *asc2char++ = lhByte + 55;
134 2 }
135 1
136 1 if(llByte>=0 && llByte<10)
137 1 {
138 2 *asc2char++ = llByte + 48;
139 2 }
140 1 else if (llByte>9 && llByte<16)
141 1 {
142 2 *asc2char++ = llByte + 55;
143 2 }
144 1 }
145
146 void InterruptInt0() interrupt 0 using 1 //外部中断0
147 {
148 1 uchar data state,ReceByte;
149 1 bit tempFlag0,tempFlag1;
150 1 tempFlag1 = RamRom_Convert;
151 1 tempFlag0 = RamIO_Convert; //保护地址状态
152 1 RamRom_Convert=1; //128RAM
153 1 RamIO_Convert=1; //切换RAM与端口
154 1 state=XBYTE[0x4001]; //port1c;
155 1 if( state & 2 ) //接收状态
156 1 {
157 2 ReceByte = XBYTE[0x4000];
158 2 if( ReceCount1 >= MaxRece1-1 )
159 2 {
160 3 ReceCount1 = 0; //接收计数器循环
161 3 }
162 2 else if( ReceByte != 13 ) //'\r'=13
163 2 {
164 3 ReceSbuf1[ReceCount1++]=ReceByte;
165 3 led2Flag=0; //正在接收点亮通信灯
166 3 }
167 2 else
168 2 {
169 3 ReceSbuf1[ReceCount1++]=ReceByte;
170 3 ReceEndFlag1=1; //收到一包数据
171 3 }
172 2 }
173 1 //数据接收
174 1 else if( (state & 1) && SendingFlag1 ) //发送状态
175 1 {
176 2 NoReceFlag = 0; //没有发送标准位置一(有发送)
177 2 bNeedSend1 = 0; //启动发送标志位清零
178 2 if ( SendCount1 >= MaxSend1-1 ) //关闭发送,越界不发送
179 2 {
C51 COMPILER V6.02 ZHU19200 07/05/2004 14:20:33 PAGE 4
180 3 SendingFlag1 = 0; //发完一包数据
181 3 #ifdef OpenEn
182 3 SendEn&=0xFD; //模拟开关不切换
183 3 #else
for(state=0;state<100;state++)
{
_nop_();
} //关闭发送中断使能,关闭模拟开关
SendEn&=0xF9; //D5:继电器控制位,D3:发送进外部中断,D2:模拟开关,D1:发送进外部中断0
#endif
190 3 XBYTE[0xE000]=SendEn;
191 3 }
192 2 else if( SendSbuf1[SendCount1] != 10 ) //'\n'=10
193 2 {
194 3 XBYTE[0x4000]=SendSbuf1[SendCount1++];
195 3 SendingFlag1=1; //正在发送数据
196 3 led2Flag=0; //正在发送点亮通信灯
197 3 }
198 2 else //
199 2 {
200 3 SendingFlag1 = 0; //发完一包数据
201 3 #ifdef OpenEn
202 3 SendEn&=0xFD; //模拟开关不切换
203 3 #else
for(state=0;state<100;state++)
{
_nop_();
} //关闭发送中断使能,关闭模拟开关
SendEn&=0xF9; //D5:继电器控制位,D3:发送进外部中断,D2:模拟开关,D1:发送进外部中断0
#endif
210 3 XBYTE[0xE000]=SendEn;
211 3 }
212 2 }
213 1 ledled=AddLed; //更换指示灯
214 1 RamRom_Convert= tempFlag1;
215 1 RamIO_Convert = tempFlag0; //恢复地址状态
216 1 }
217
218 void InterruptInt1() interrupt 2 using 1 //外部中断1
219 {
220 1 uchar data state,ReceByte;
221 1 bit tempFlag0,tempFlag1;
222 1 tempFlag1 = RamRom_Convert;
223 1 tempFlag0 = RamIO_Convert; //保护地址状态
224 1 RamRom_Convert=1; //128RAM
225 1 RamIO_Convert=1; //切换RAM与端口
226 1 state=XBYTE[0x6001]; //port1c;
227 1 if(state&2) //接收状态
228 1 {
229 2 ReceByte=XBYTE[0x6000];
230 2 if( ReceCount2 >= MaxRece2-1 )
231 2 {
232 3 ReceCount2 = 0; //接收计数器循环
233 3 }
234 2 else if( ReceByte != 13 ) //'\r'=13
235 2 {
236 3 ReceSbuf2[ReceCount2++] = ReceByte;
237 3 led2Flag = 0; //正在接收点亮通信灯
238 3 }
239 2 else
240 2 {
241 3 ReceSbuf2[ReceCount2++]=ReceByte;
C51 COMPILER V6.02 ZHU19200 07/05/2004 14:20:33 PAGE 5
242 3 ReceEndFlag2=1; //收到一包数据
243 3 }
244 2 }
245 1 else if( state & 1 &&SendingFlag2 ) //发送状态
246 1 {
247 2 NoReceFlag = 0; //没有发送标志位置一(有发送)
248 2 bNeedSend2 = 0; //启动发送标志位清零
249 2 if ( SendCount2 >= MaxSend2-1 )
250 2 {
251 3 SendCount2 = 0;
252 3 SendingFlag2=0; //发完一包数据
253 3 #ifdef OpenEn
254 3 SendEn&=0xDF; //继电器不切换
255 3 #else
for(state=0;state<100;state++)
{
_nop_();
_nop_();
} //关闭发送中断使能,关闭模拟开关
SendEn&=0xD7; //D5:继电器控制位,D3:发送进外部中断,D2:模拟开关,D1:发送进外部中断0
#endif
263 3 XBYTE[0xE000]=SendEn;
264 3 }
265 2 else if( SendSbuf2[SendCount2] != 10 ) //'\n'=10
266 2 {
267 3 XBYTE[0x6000]=SendSbuf2[SendCount2++];
268 3 SendingFlag2=1; //正在发送数据
269 3 led2Flag=0; //正在发送点亮通信灯
270 3 }
271 2 else //
272 2 {
273 3 SendingFlag2=0; //发完一包数据
274 3 #ifdef OpenEn
275 3 SendEn&=0xDF; //继电器不切换
276 3 #else
for(state=0;state<100;state++)
{
_nop_();
_nop_();
} //关闭发送中断使能,关闭模拟开关
SendEn&=0xD7; //D5:继电器控制位,D3:发送进外部中断,D2:模拟开关,D1:发送进外部中断0
#endif
284 3 XBYTE[0xE000]=SendEn;
285 3 }
286 2 }
287 1 ledled=AddLed; //更换指示灯
288 1 RamRom_Convert= tempFlag1;
289 1 RamIO_Convert = tempFlag0; //恢复地址状态
290 1 }
291
292 void InterruptT1() interrupt 3 using 2 //50ms定时1中断
293 {
294 1 static uchar xdata ledcount0;
295 1 static uchar xdata ledcount1;
296 1 static uchar xdata ledcount2;
297 1 static uchar xdata ledcount3;
298 1 bit tempFlag0,tempFlag1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -