📄 txd.lst
字号:
C51 COMPILER V6.23a TXD 07/07/2006 15:31:21 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE TXD
OBJECT MODULE PLACED IN TXD.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE TXD.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //******************************显示一个字*********************************//
2 #include<math.h>
3 #include<reg51.h>
4 #include<intrins.h>
5 #include<absacc.h>
6 #define uchar unsigned char
7 #define DISP_C P1_7
8 #define DISP_D P1_6
9 #define Rt_de P2_0
10 #define me_address 0x30
11 #define SAVE_D P1_5
12 #define SAVE_T P2_1
13 uchar stp_data[9];
14 uchar s_err_times;
15 uchar t_err_times;
16 void delay(unsigned int n)
17 {
18 1 unsigned int i;
19 1 for(i=n*200;i>0;i--)
20 1 ;
21 1 }
22
23 void disp_one(unsigned char XSH_data)
24 {
25 1 char i;
26 1 bit F_temp;
27 1 for(i=0;i<8;i++)
28 1 {
29 2 F_temp=XSH_data&0x01;
30 2 XSH_data=XSH_data>>1;
31 2 if(F_temp)
32 2 {
33 3 DISP_C=0;
34 3 DISP_D=1;
35 3 _nop_();
36 3 _nop_();
37 3 DISP_C=1;
38 3 _nop_();
39 3 _nop_();
40 3 _nop_();
41 3 DISP_C=0;
42 3 _nop_();
43 3 }
44 2 else
45 2 {
46 3 DISP_C=0;
47 3 DISP_D=0;
48 3 _nop_();
49 3 _nop_();
50 3 DISP_C=1;
51 3 _nop_();
52 3 _nop_();
53 3 _nop_();
54 3 DISP_C=0;
55 3 _nop_();
C51 COMPILER V6.23a TXD 07/07/2006 15:31:21 PAGE 2
56 3 }
57 2 }
58 1 }
59 void error(uchar error_type)
60 {
61 1 char i;
62 1 for(i=0;i<3;i++)
63 1 {
64 2 disp_one(error_type);
65 2 disp_one(0x40);
66 2 disp_one(0x50);
67 2 disp_one(0x50);
68 2 disp_one(0x79);
69 2 }
70 1 while(1);
71 1 }
72
73
74 //停止
75 void stop(void)
76 {
77 1 SAVE_D=0;
78 1 SAVE_T=1;
79 1 _nop_();
80 1 _nop_();
81 1 _nop_();
82 1 SAVE_D=1;
83 1 _nop_();
84 1 _nop_();
85 1 _nop_();
86 1 SAVE_T=0;
87 1 SAVE_D=0;
88 1 }
89
90
91 //发非应答信号
92 void n_ack(void)
93 {
94 1 SAVE_D=1;
95 1 SAVE_T=1;
96 1 _nop_();
97 1 _nop_();
98 1 _nop_();
99 1 SAVE_T=0;
100 1 SAVE_D=0;
101 1 }
102 //读八位
103 uchar rd_8byt(void)
104 {
105 1 uchar receive=0;
106 1 char i;
107 1 for(i=0;i<8;i++)
108 1 {
109 2 receive=receive<<1;
110 2 SAVE_D=1;
111 2 SAVE_T=1;
112 2 _nop_();
113 2 if(SAVE_D)
114 2 receive++;
115 2 SAVE_T=0;
116 2 }
117 1 return(receive);
C51 COMPILER V6.23a TXD 07/07/2006 15:31:21 PAGE 3
118 1 }
119 //查应答
120 bit check(void)
121 {
122 1 bit aswer;
123 1 SAVE_D=1;
124 1 SAVE_T=1;
125 1 _nop_();
126 1 _nop_();
127 1 aswer=SAVE_D;
128 1 SAVE_T=0;
129 1 return(aswer);
130 1 }
131 //起始
132 void start(void)
133 {
134 1 SAVE_D=1;
135 1 SAVE_T=1;
136 1 _nop_();
137 1 _nop_();
138 1 _nop_();
139 1 SAVE_D=0;
140 1 _nop_();
141 1 _nop_();
142 1 _nop_();
143 1 SAVE_T=0;
144 1 }
145 void write_byt(uchar I_data)
146 {
147 1 char i;
148 1 for(i=0;i<8;i++)
149 1 {
150 2 SAVE_D=(bit)(I_data&0x80);
151 2 I_data=I_data<<1;
152 2 SAVE_T=1;
153 2 _nop_();
154 2 _nop_();
155 2 _nop_();
156 2 SAVE_T=0;
157 2 }
158 1 }
159 uchar readone(uchar edd)
160 {
161 1 char i;
162 1 uchar recivechar;
163 1 edd=edd<<1;
164 1 edd++;
165 1 for(i=0;i<20;i++)
166 1 {
167 2 start();
168 2 write_byt(edd);
169 2 if(!check())
170 2 goto bbb;
171 2 }
172 1 error(0x06);
173 1 bbb: recivechar=rd_8byt();
174 1 n_ack();
175 1 stop();
176 1 return(recivechar);
177 1 }
178 void Rs485_server(void)interrupt 4
179 {
C51 COMPILER V6.23a TXD 07/07/2006 15:31:21 PAGE 4
180 1 uchar now_rec_dat;
181 1 uchar i;
182 1 int j;
183 1 EA=0;
184 1 if(~RI) //检测是否有接收中断
185 1 goto Rs485_err;
186 1 now_rec_dat=SBUF;
187 1 if(now_rec_dat!=me_address)
188 1 goto Rs485_err;
189 1 SM2=0; //不允许多机通讯
190 1 RI=0;
191 1 TI=0;
192 1 REN=0; //发送数据时禁止接收
193 1 Rt_de=1; //483发送方式
194 1 SBUF=me_address; //发送本机地址
195 1 while(~TI); //等待
196 1 TI=0; //清除标志
197 1 Rt_de=0; //483接收方式
198 1 REN=1; //接收允许
199 1 j=0;
200 1 while((~RI)&&(j<2000))//等待接收数据,如果时间过长退出
201 1 j++;
202 1 if(j>=2000)
203 1 goto Rs485_err;
204 1 now_rec_dat=SBUF; //读接收数据
205 1 RI=0;
206 1 TI=0;
207 1 Rt_de=1; //483发送方式
208 1 REN=0; //发送数据时禁止接收
209 1 switch(now_rec_dat)
210 1 {
211 2 case 0x00://收到数据=0发送36组存储数据
212 2 SBUF=0x00; //返回命令字
213 2 while(~TI);
214 2 TI=0;
215 2 for(i=0;i<108;i++)
216 2 {
217 3 SBUF=readone(i);
218 3 while(~TI);
219 3 TI=0;
220 3 }
221 2 break;
222 2 case 0x01://收到数据=1发送超量程记录
223 2 SBUF=0x01;//返回命令字
224 2 while(~TI);
225 2 TI=0;
226 2 SBUF=t_err_times;//chao liang cheng
227 2 while(~TI);
228 2 TI=0;
229 2 SBUF=s_err_times;//chao liang cheng
230 2 while(~TI);
231 2 TI=0;
232 2 SBUF=0;//chao liang cheng
233 2 while(~TI);
234 2 TI=0;
235 2 break;
236 2 case 0x02://收到数据=2发送3组表读数
237 2 SBUF=0x02;//返回命令字
238 2 while(~TI);
239 2 TI=0;
240 2
241 2
C51 COMPILER V6.23a TXD 07/07/2006 15:31:21 PAGE 5
242 2 SBUF=0x88;//dang qian du shu
243 2 while(~TI);
244 2 TI=0;
245 2
246 2 /*
247 2 for(i=0;i<9;i++)
248 2 {
249 2 SBUF=stp_data[i];//dang qian du shu
250 2 while(~TI);
251 2 TI=0;
252 2 }
253 2 */
254 2 break;
255 2 default:
256 2 SBUF=0xff;
257 2 while(~TI);
258 2 break;
259 2 }
260 1 Rs485_err: RI=0;
261 1 TI=0;
262 1 SM2=1;
263 1 Rt_de=0;
264 1 REN=1;
265 1 EA=1;
266 1 }
267 void main(void)
268 {
269 1 TL1=0xfd;/////通信初始化///////////
270 1 TH1=0xfd;//////////////
271 1 SCON=0xf0;/////////////;SM0=1,SM1=1,SM2=1,REN=1,工作方式3(9位UART,波特率可变),串行接收允许,
272 1 TMOD=0x21;//////////////
273 1 PCON=0x80;//////////////
274 1 TR1=1;/////////////////
275 1 Rt_de=0;
276 1 IT0=1;
277 1 PX0=1;
278 1 IP=0xff;
279 1 IE=0x97;////////通信初始化结束//////////////////////////////////////
280 1 EA=0;
281 1 EA=1;
282 1 P2_4=1;
283 1 P2_5=1;
284 1 P2_6=1;
285 1 P2_7=1;
286 1 Loop:
287 1 disp_one(0x3f);
288 1 disp_one(0x06);
289 1 disp_one(0x5b);
290 1 disp_one(0x4f);
291 1 disp_one(0x66);
292 1 //disp_one(0x6D);
293 1 // disp_one(0x7D);
294 1 // disp_one(0x07);
295 1 delay(100);
296 1 goto Loop;
297 1 }
298
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 570 ----
CONSTANT SIZE = ---- ----
C51 COMPILER V6.23a TXD 07/07/2006 15:31:21 PAGE 6
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -