📄 hex.lst
字号:
C51 COMPILER V8.01 HEX 12/04/2006 10:50:21 PAGE 1
C51 COMPILER V8.01, COMPILATION OF MODULE HEX
OBJECT MODULE PLACED IN HEX.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE HEX.C LARGE OPTIMIZE(7,SPEED) BROWSE ORDER MODDP2 DEBUG OBJECTEXTEND
line level source
1
2 #include <ctype.h>
3 #include <stdio.h>
4
5 #include "config.h"
6 #include "isp.h"
7 #include "lcd.h"
8 #include "hex.h"
9
10 unsigned char mBuffer[256];
11 unsigned int offset;
12 unsigned char Msg;
13 unsigned char m_BankSector;
14 unsigned char type, data_value, sum, sum_1, sum_2;
15 unsigned int mlength;
16 unsigned int mbyte;
17
18 void hex_decoder(unsigned char mRxData)
19 {
20 1 static state = REC_MARK;
21 1 switch(state)
22 1 {
23 2 case REC_MARK:
24 2 if (mRxData == ':')
25 2 {
26 3 state = REC_LEN_1;
27 3 mbyte=0;
28 3 }
29 2 else
30 2 state = REC_MARK;
31 2 break;
32 2
33 2 case REC_LEN_1:
34 2 mlength = toint(mRxData) * 16;
35 2 state = REC_LEN_2;
36 2 break;
37 2
38 2 case REC_LEN_2:
39 2 mlength = mlength + toint(mRxData);
40 2 state = OFFSET_1;
41 2 break;
42 2
43 2 case OFFSET_1:
44 2 offset = toint(mRxData) * 4096;
45 2 state = OFFSET_2;
46 2 break;
47 2
48 2 case OFFSET_2:
49 2 offset = offset + toint(mRxData) * 256;
50 2 sum_1= offset / 256;
51 2 state = OFFSET_3;
52 2 break;
53 2
54 2 case OFFSET_3:
55 2 offset = offset + toint(mRxData) * 16;
C51 COMPILER V8.01 HEX 12/04/2006 10:50:21 PAGE 2
56 2 state = OFFSET_4;
57 2 break;
58 2
59 2 case OFFSET_4:
60 2 offset = offset + toint(mRxData);
61 2 sum_2 = offset - sum_1 * 256;
62 2 state = REC_TYP_1;
63 2 break;
64 2
65 2 case REC_TYP_1:
66 2 type = toint(mRxData) * 16;
67 2 state =REC_TYP_2;
68 2 break;
69 2
70 2 case REC_TYP_2:
71 2 type = type + toint(mRxData);
72 2 sum = (unsigned char)mlength + sum_1 + sum_2 + type;
73 2 if(mlength==0x00)state=CHEKSUM_1;
74 2 else state = DATA_1;
75 2 break;
76 2
77 2 case DATA_1:
78 2 data_value = toint(mRxData) * 16 ;
79 2 state = DATA_2;
80 2 break;
81 2
82 2 case DATA_2:
83 2 data_value = data_value + toint(mRxData);
84 2 sum = sum + data_value;
85 2 mBuffer[mbyte] = data_value;
86 2 mbyte++;
87 2 if(mlength<0xFF)
88 2 {
89 3 if(mbyte == mlength)state = CHEKSUM_1;
90 3 else state = DATA_1;
91 3 }
92 2 else
93 2 {
94 3 if(mbyte == (mlength+1))state = CHEKSUM_1;
95 3 else state = DATA_1;
96 3 }
97 2 break;
98 2
99 2 case CHEKSUM_1:
100 2 sum_1 = toint(mRxData) * 16;
101 2 sum = (~sum) + 1;
102 2 state = CHEKSUM_2;
103 2 break;
104 2
105 2 case CHEKSUM_2:
106 2 sum_1 = sum_1 + toint(mRxData);
107 2 state = REC_MARK;
108 2 if(sum_1 != sum)
109 2 {
110 3 if(type==0x00)Msg = HEX_DEC_FRAME_ERR; //帧错误
111 3 else if(type==0x02)Msg = HEX_DEC_SEG_ERR; //段错误
112 3 else if(type==0x12)Msg = HEX_DEC_SEG_VERIFY_ERR; //段地址错误
113 3
114 3 }
115 2 else
116 2 {
117 3 if(type==0x00)Msg = HEX_DEC_FRAME_DATA; //帧数据
C51 COMPILER V8.01 HEX 12/04/2006 10:50:21 PAGE 3
118 3 else if(type==0x01)Msg = HEX_DEC_END; //结束
119 3 else if(type==0x02) //段地址
120 3 {
121 4 Msg = HEX_DEC_SEG_DATA; //段数据地址
122 4 m_BankSector = mBuffer[1];
123 4 }
124 3 else if(type==0x03)Msg = HEX_DEC_START; //开始下载
125 3 else if(type==0x0A)Msg = HEX_DEC_SEG_IRQ; //段请求
126 3 else if(type==0x0D)Msg = HEX_DEC_FRAME_IRQ; //帧请求
127 3 else if(type==0x10)Msg = HEX_DEC_VERIFY_START; //帧比较开始
128 3 else if(type==0x12)
129 3 {
130 4 Msg = HEX_DEC_SEG_VERIFY_DATA; //段比较数据
131 4 m_BankSector = mBuffer[1];
132 4 }
133 3 else if(type==0x15) //帧比较地址
134 3 {
135 4 Msg = HEX_DEC_FRAME_VERIFY_DATA; //比较帧地址
136 4 offset = mBuffer[0]*256+mBuffer[1];
137 4 }
138 3 else if(type==0x16)Msg = HEX_DEC_VERIFY_FRAME_IRQ; //比较帧请求
139 3 else if(type==0x19)Msg = HEX_DEC_VERIFY_FRAME_END; //比较结束
140 3 else if(type==0x1B)Msg = HEX_DEC_PROGRAM_ERR; //错误结束
141 3 else if(type==0x1C)Msg = HEX_DEC_SECTOR_IRQ; //扇区设置命令
142 3 else if(type==0x1D)
143 3 {
144 4 Msg = HEX_DEC_SECTOR_BANK; //扇区设置命令
145 4 offset = mBuffer[0]*256+mBuffer[1];
146 4 }
147 3 }
148 2 break;
149 2 default :
150 2 state = REC_MARK;
151 2 break;
152 2 }
153 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 915 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 271 1
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 + -