📄 vfdb.lst
字号:
C51 COMPILER V8.08 VFDB 01/08/2008 15:03:27 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE VFDB
OBJECT MODULE PLACED IN vfdb.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE src\vfdb.c LARGE OPTIMIZE(0,SPEED) BROWSE INCDIR(.\include) DEBUG OBJECTEXT
-END PRINT(.\vfdb.lst) OBJECT(vfdb.obj)
line level source
1 /****************************************
2 *名称:vfdb.c
3 *功能:
4 ****************************************/
5 #include "includes.h"
6
7 /*address*/
8 # define BROADCAST 0x00
9 /*starting address*/
10 # define TEL_ADDR 0x0900 //通讯地址
11 /*function*/
12 # define READREG 0x03 //读出寄存器内容
13 # define WRITEONE 0x06 //写入一笔资料至寄存器
14 # define WRITECHECK 0x08 //回路侦测
15 # define WRITEMORE 0x10 //写入多笔资料至寄存器
16
17 # define STX 0x3A
18 # define CR 0x0D
19 # define LF 0x0A
20 /****************************************
21 *名称:Send_datatrans()
22 *功能:发送前将输入数据转换成相应HEX格式,例如将0(0x00)-->'0'(0x30),A(0x0a)-->'A'(0x41)
23 *说明:输入数据必须要在0~F(HEX)之间
24 *入口函数:
25 *出口函数:
26 ****************************************/
27 static UINT8 Send_datatrans(UINT8 t_data)
28 {
29 1 UINT8 r_data;
30 1 if(( t_data >= 0 )&&( t_data <= 9 )) r_data = t_data + 0x30;
31 1 else if(( t_data >=10 )&&( t_data <= 15 )) r_data = t_data + 0x37;
32 1 else r_data = 0;
33 1
34 1 return r_data;
35 1
36 1 }
37
38 /****************************************
39 *名称:Send_vfdbbyte()
40 *功能:
41 ****************************************/
42 static void send_vfdbbyte( UINT8 s_data)
43 {
44 1 Sendbyte(Send_datatrans(s_data>>4));
45 1 Sendbyte(Send_datatrans(s_data & 0x0f));
46 1 }
47 /****************************************
48 *名称:Send_vfdbword()
49 *功能:
50 ****************************************/
51 static void send_vfdbword( UINT16 s_data)
52 {
53 1 Sendbyte(Send_datatrans((UINT8)(s_data>>12)));
54 1 Sendbyte(Send_datatrans((UINT8)((s_data & 0x0f00)>>8)));
C51 COMPILER V8.08 VFDB 01/08/2008 15:03:27 PAGE 2
55 1 Sendbyte(Send_datatrans((UINT8)((s_data & 0x00f0)>>4)));
56 1 Sendbyte(Send_datatrans((UINT8)(s_data & 0x000f)));
57 1 }
58
59 /****************************************
60 *名称:Send_readreg()
61 *功能:完成读出寄存器数据发送指令
62 *说明:
63
64 STX---Address---Function---Starting Address---Number of data(count by word)---LRC Check---END
65
66 *入口函数:addr:通讯地址;s_addr:操作起始地址;num:操作数据笔数(word)
67 *出口函数:
68 ****************************************/
69 void Send_readreg(UINT8 addr, UINT16 s_addr,UINT16 num)
70 {
71 1 UINT8 lrc_data;
72 1 //lrc_data = 0xff - (addr + READREG + (UINT8)(s_addr>>8) + (UINT8)(s_addr&0x00ff) + (UINT8)(num>>8) + (U
-INT8)(num&0x00ff));
73 1
74 1 lrc_data = ~(addr + READREG + (UINT8)(s_addr>>8) + (UINT8)(s_addr&0x00ff) + (UINT8)(num>>8) + (UINT8)(num
-&0x00ff)) + 1;
75 1
76 1 // lrc_data =0xd7;
77 1
78 1 /*START*/
79 1 Sendbyte(STX);
80 1 /*address*/
81 1 send_vfdbbyte(addr);
82 1 /*function*/
83 1 send_vfdbbyte(READREG);
84 1 /*starting address*/
85 1 send_vfdbword(s_addr);
86 1 /*number of data (count by word)*/
87 1 send_vfdbword(num);
88 1 /*LRC check*/
89 1 send_vfdbbyte(lrc_data);
90 1 /*END*/
91 1 Sendbyte(CR);
92 1 Sendbyte(LF);
93 1 }
94 /****************************************
95 *名称:Send_writeone()
96 *功能:完成发送一笔数据到固定地址
97 *说明:
98
99 STX---Address---Function---Data Address---Data content---LRC Check---END
100
101 *入口函数:addr:通讯地址;d_addr:写入数据起始地址;w_data:写入数据
102 *出口函数:
103 ****************************************/
104 void Send_writeone(UINT8 addr,UINT16 d_addr,volatile UINT16 w_data)
105 {
106 1 UINT8 lrc_data;
107 1 lrc_data = ~(addr + WRITEONE + (UINT8)(d_addr>>8) + (UINT8)(d_addr&0x00ff) + (UINT8)(w_data>>8) + (UINT8
-)(w_data&0x00ff)) + 1;
108 1 /*START*/
109 1 Sendbyte(STX);
110 1 /*address*/
111 1 send_vfdbbyte(addr);
112 1 /*function*/
113 1 send_vfdbbyte(WRITEONE);
C51 COMPILER V8.08 VFDB 01/08/2008 15:03:27 PAGE 3
114 1 /*data address*/
115 1 send_vfdbword(d_addr);
116 1 /*data content*/
117 1 send_vfdbword(w_data);
118 1 /*LRC check*/
119 1 send_vfdbbyte(lrc_data);
120 1 /*END*/
121 1 Sendbyte(CR);
122 1 Sendbyte(LF);
123 1 }
124 /****************************************
125 *名称:Send_writecheck()
126 *功能:完成一次数据发送,回路侦测
127 *说明:
128
129 STX---Address---Function---Starting Address---Number of data(count by word)---LRC Check---END
130
131 *入口函数:addr:通讯地址;d_addr:写入数据起始地址;w_data:写入数据
132 *出口函数:
133 ****************************************/
134 void Send_writecheck(UINT8 addr,UINT16 d_addr,volatile UINT16 w_data)
135 {
136 1 UINT8 lrc_data;
137 1 lrc_data = ~(addr + WRITECHECK + (UINT8)(d_addr>>8) + (UINT8)(d_addr&0x00ff) + (UINT8)(w_data>>8) + (UIN
-T8)(w_data&0x00ff)) + 1;
138 1 /*START*/
139 1 Sendbyte(STX);
140 1 /*address*/
141 1 send_vfdbbyte(addr);
142 1 /*function*/
143 1 send_vfdbbyte(WRITECHECK);
144 1 /*data address*/
145 1 send_vfdbword(d_addr);
146 1 /*data content*/
147 1 send_vfdbword(w_data);
148 1 /*LRC check*/
149 1 send_vfdbbyte(lrc_data);
150 1 /*END*/
151 1 Sendbyte(CR);
152 1 Sendbyte(LF);
153 1 }
154 /****************************************
155 *名称:Send_writemore()
156 *功能:完成发送一笔数据到固定地址
157 *说明:
158
159 STX---Address---Function---Data Address---Data content---LRC Check---END
160
161 *入口函数:addr:通讯地址;d_addr:写入数据起始地址;w_data:写入数据地址
162 *出口函数:
163 ****************************************/
164 void Send_writemore(UINT8 addr,UINT16 d_addr, UINT16 num,volatile UINT16 *w_data)
165 {
166 1 UINT8 lrc_data;
167 1 UINT8 num_byte;
168 1 volatile UINT16 i,w_datareg;
169 1
170 1 num_byte = (UINT8)num*2;
171 1
172 1 lrc_data = addr + WRITEMORE + (UINT8)(d_addr>>8) + (UINT8)(d_addr&0x00ff) + (UINT8)(num>>8) + (UINT8)(nu
-m&0x00ff);
173 1 /*START*/
C51 COMPILER V8.08 VFDB 01/08/2008 15:03:27 PAGE 4
174 1 Sendbyte(STX);
175 1 /*address*/
176 1 send_vfdbbyte(addr);
177 1 /*function*/
178 1 send_vfdbbyte(WRITEMORE);
179 1 /*data address*/
180 1 send_vfdbword(d_addr);
181 1 /*number of data(word)*/
182 1 send_vfdbword(num);
183 1 /*number of data(byte)*/
184 1 send_vfdbbyte(num_byte);
185 1 for(i=0;i<num;i++)
186 1 {
187 2 w_datareg = *w_data;
188 2 lrc_data += ((UINT8)(w_datareg>>8) + (UINT8)(w_datareg&0x00ff));
189 2 w_data++;
190 2 /*data content*/
191 2 send_vfdbword(w_datareg);
192 2 }
193 1 /*LRC check*/
194 1 lrc_data = ~lrc_data + 1;
195 1 send_vfdbbyte(lrc_data);
196 1 /*END*/
197 1 Sendbyte(CR);
198 1 Sendbyte(LF);
199 1 }
200
201
202
203
204 /****************************************
205 *名称:Send_testbyte()
206 *功能:测试函数,测试接收后的函数发送出去,数据以字节格式提供
207 ****************************************/
208 void Send_testbyte(UINT8 *p_data,UINT8 num)
209 {
210 1 UINT8 i;
211 1 UINT8 test_data;
212 1 UINT8 *p_datareg;
213 1
214 1 p_datareg = p_data;
215 1
216 1 for(i=0;i<num;i++)
217 1 {
218 2 test_data = *p_datareg;
219 2 send_vfdbbyte(test_data);
220 2 p_datareg++;
221 2 }
222 1
223 1 Sendbyte(CR);
224 1 Sendbyte(LF);
225 1
226 1 }
227 /****************************************
228 *名称:Send_testword()
229 *功能:测试函数,测试接收后的函数发送出去,数据以字节格式提供
230 ****************************************/
231 void Send_testword(UINT16 *p_data,UINT8 num)
232 {
233 1 UINT8 i;
234 1 UINT16 test_data;
235 1 UINT16 *p_datareg;
C51 COMPILER V8.08 VFDB 01/08/2008 15:03:27 PAGE 5
236 1
237 1 p_datareg = p_data;
238 1
239 1 for(i=0;i<num;i++)
240 1 {
241 2 test_data = *p_datareg;
242 2 send_vfdbbyte((UINT8)(test_data>>8));
243 2 send_vfdbbyte((UINT8)test_data);
244 2 p_datareg++;
245 2 }
246 1
247 1 Sendbyte(CR);
248 1 Sendbyte(LF);
249 1
250 1 }
251
252 /****************************************
253 *
254 *Broadcast all and get the Address
255 *****************************************/
256 void Broadcast (void)
257 {
258 1 Send_readreg(BROADCAST,TEL_ADDR,1);
259 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1321 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 56 ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -