📄 io.lst
字号:
C51 COMPILER V8.01 IO 12/04/2006 10:50:22 PAGE 1
C51 COMPILER V8.01, COMPILATION OF MODULE IO
OBJECT MODULE PLACED IN io.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE io.c LARGE OPTIMIZE(7,SPEED) BROWSE ORDER MODDP2 DEBUG OBJECTEXTEND
line level source
1
2 #include <stdarg.h>
3 #include <string.h>
4
5 #include "compiler.h"
6 #include "config.h"
7 #include "isp.h"
8 #include "system.h"
9 #include "hex.h"
10
11 extern void uart_tx(unsigned char tx_data);
12
13 char ptxt[40];
14 unsigned char SreialStr;
15
16 void uart0(void) interrupt 4 using 0
17 {
18 1 if (RI == 1)
19 1 {
20 2 RI = 0;
21 2 SreialStr = 0;
22 2 hex_decoder(SBUF0);
23 2 }
24 1 }
25
26
27 void uart1(void) interrupt 7 using 0
28 {
29 1 if (RI1 == 1)
30 1 {
31 2 RI1 = 0;
32 2 SreialStr = 1;
33 2 hex_decoder(SBUF1);
34 2 }
35 1 }
36
37 void uart_tx(Uchar tx_data)
38 {
39 1 if(SreialStr == 0)
40 1 {
41 2 SBUF0 = tx_data;
42 2 while (TI==0);
43 2 TI=0;
44 2 }
45 1 else if(SreialStr == 1)
46 1 {
47 2 SBUF1 = tx_data;
48 2 while (TI1==0);
49 2 TI1=0;
50 2 }
51 1 else
52 1 {
53 2 SBUF0 = tx_data;
54 2 while (TI==0);
55 2 TI=0;
C51 COMPILER V8.01 IO 12/04/2006 10:50:22 PAGE 2
56 2 }
57 1 }
58
59 void vInitUart(void)
60 {
61 1 #if Sp756P==1
62 1 /*
63 1 CKCON |= 0x31; //T1、T2时钟Clk/4
64 1 //串口1的设置
65 1 TMOD |= 0x20; //定时器1工作在模式1,8位重载
66 1 SCON1 |= 0x50; //模式1: 异步10位波特率可变,允许接收
67 1 //串口0的设置
68 1 SCON |= 0x50; //模式1: 异步10位波特率可变,允许接收
69 1 T2CON |= 0x30; //用定时器2做串口0的波特率发生器
70 1
71 1 PCON |= 0x80; //串口0波特率加倍
72 1 WDCON |= 0x80; //串口1波特率加倍
73 1
74 1 TL1 = 0xFD; //波特率=57600
75 1 TH1 = 0xFD;
76 1 RCAP2H = 0xFF;
77 1 RCAP2L = 0xFD; //波特率=115200
78 1
79 1 EA = 1; //EA=1;ES1=1;ES0=1
80 1 ES0 = 1; //串口0中断允许
81 1 ES1 = 1; //串口1中断允许
82 1
83 1 TR2 = 1;
84 1 TR1 = 1;
85 1 */
86 1 //0xFD(57600) 0xFA(28800) 0xF7(19200) 0xEE(9600)
87 1 CKCON |= 0x31; //T1时钟Clk1/4
88 1 TMOD |= 0x20; //定时器1:模式2,8位重载
89 1 SCON |= 0x50; //模式1: 异步10位波特率可变,允许接收
90 1 SCON1 |= 0x50; //模式1: 异步10位波特率可变,允许接收
91 1
92 1 PCON |= 0x80; //串口0波特率加倍
93 1 WDCON |= 0x80; //串口1波特率加倍
94 1
95 1 TL1 = 0xFD;
96 1 TH1 = 0xFD;
97 1 IE |= 0xD0; //EA=1;ES1=1;ES0=1
98 1 TR1 = 1;
99 1 #else
//0xFD(57600) 0xFA(28800) 0xF7(19200) 0xEE(9600)
CKCON |= 0x31; //T1时钟Clk1/4
TMOD |= 0x20; //定时器1:模式2,8位重载
SCON |= 0x50; //模式1: 异步10位波特率可变,允许接收
SCON1 |= 0x50; //模式1: 异步10位波特率可变,允许接收
PCON |= 0x80; //串口0波特率加倍
WDCON |= 0x80; //串口1波特率加倍
TL1 = 0xFD;
TH1 = 0xFD;
IE |= 0xD0; //EA=1;ES1=1;ES0=1
TR1 = 1;
#endif
114 1 }
115
116 void vSendBuff(unsigned int sDdress,unsigned int mISector,unsigned char sBackBank)
117 {
C51 COMPILER V8.01 IO 12/04/2006 10:50:22 PAGE 3
118 1 unsigned char data sxBchar;
119 1 unsigned int sxnum;
120 1 unsigned char CheckSum;
121 1 unsigned int snum;
122 1
123 1 sxnum = sDdress;
124 1 CheckSum = 0;
125 1 uart_tx(':'); //包头
126 1
127 1 if(mISector==256)sxBchar=0xFF; //数据长度
128 1 if(mISector==128)sxBchar=0x80;
129 1 CheckSum += sxBchar;
130 1 SendBinToChar(sxBchar);
131 1
132 1 sxBchar = (unsigned char)(sDdress/256); //扇区地址
133 1 CheckSum += sxBchar;
134 1 SendBinToChar(sxBchar);
135 1
136 1 sxBchar = (unsigned char)(sDdress%256); //扇区地址
137 1 CheckSum += sxBchar;
138 1 SendBinToChar(sxBchar);
139 1
140 1 uart_tx('0'); //数据类型
141 1 uart_tx('0');
142 1 CheckSum += 0x00;
143 1
144 1 vBankSet(sBackBank);
145 1
146 1 for(snum=0;snum <mISector;snum++)
147 1 {
148 2 sxBchar = vReadFlash(sxnum++);
149 2 CheckSum += sxBchar;
150 2 SendBinToChar(sxBchar);
151 2 }
152 1
153 1 CheckSum = ~CheckSum;
154 1 CheckSum +=1;
155 1 sxBchar = CheckSum; //和校验
156 1 SendBinToChar(sxBchar);
157 1 }
158
159 void vCOmSend(unsigned char m_ComLength, unsigned char m_ComType, unsigned short int m_AdderData)
160 {
161 1 //数据包格式: :ll kk aaaa tt [dd...] cc
162 1 //: 包头
163 1 //ll 数据长度
164 1 //kk 程序分区数
165 1 //aaaa 扇区地址
166 1 //dd... 数据域
167 1 //cc 和校验 cc = 0x01H + NOT(ll + kk + aa +aa +tt + dd...)
168 1 unsigned char Txchar;
169 1 unsigned char CheckSum;
170 1
171 1 CheckSum = 0;
172 1 uart_tx(':'); //包头
173 1
174 1 Txchar = m_ComLength; //数据长度
175 1 CheckSum += Txchar;
176 1
177 1 SendBinToChar(Txchar);
178 1
179 1 Txchar = 0x00; //地址
C51 COMPILER V8.01 IO 12/04/2006 10:50:22 PAGE 4
180 1 CheckSum += Txchar;
181 1 SendBinToChar(Txchar);
182 1 Txchar = 0x00;
183 1 CheckSum += Txchar;
184 1 SendBinToChar(Txchar);
185 1
186 1 Txchar = m_ComType; //数据类型
187 1 CheckSum += Txchar;
188 1 SendBinToChar(Txchar);
189 1
190 1 if(m_ComLength !=0)
191 1 {
192 2 Txchar = (unsigned char)(m_AdderData/256);
193 2 CheckSum += Txchar;
194 2 SendBinToChar(Txchar);
195 2 Txchar = (unsigned char)(m_AdderData%256);
196 2 CheckSum += Txchar;
197 2 SendBinToChar(Txchar);
198 2 }
199 1 CheckSum = ~CheckSum;
200 1 CheckSum +=1;
201 1 Txchar = (unsigned char)CheckSum; //和校验
202 1 SendBinToChar(Txchar);
203 1 }
204
205 void SendBinToChar(unsigned char BinChar)
206 {
207 1 unsigned char byte;
208 1 unsigned char SendHexChar;
209 1
210 1 byte = BinChar;
211 1 byte >>= 4;
212 1
213 1 if(0<= byte && byte <=9)
214 1 {
215 2 byte += '0';
216 2 SendHexChar = byte;
217 2 }
218 1 else
219 1 {
220 2 byte += 'A' - 10;
221 2 SendHexChar = byte;
222 2 }
223 1
224 1 uart_tx(SendHexChar);
225 1
226 1 byte = BinChar;
227 1 byte &= 0x0F;
228 1 if(0<= byte && byte <=9)
229 1 {
230 2 byte += '0';
231 2 SendHexChar = byte;
232 2 }
233 1 else
234 1 {
235 2 byte += 'A' - 10;
236 2 SendHexChar = byte;
237 2 }
238 1
239 1 uart_tx(SendHexChar);
240 1 }
241
C51 COMPILER V8.01 IO 12/04/2006 10:50:22 PAGE 5
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 601 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 41 16
PDATA SIZE = ---- ----
DATA SIZE = ---- 1
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 + -