📄 xmodem.lst
字号:
C51 COMPILER V8.05a XMODEM 03/08/2007 09:20:44 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE XMODEM
OBJECT MODULE PLACED IN .\object\Xmodem.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Xmodem.C ROM(SMALL) OPTIMIZE(9,SIZE) BROWSE DEBUG OBJECTEXTEND OBJECT(.\obj
-ect\Xmodem.obj)
line level source
1 #include <absacc.h>
2 #include "xmodem.h"
3 #include "reg9e5.h"
4 #include "PubFunc.h"
5 #include "timer0.h"
6 #include "serial.h"
7 #include "25lc320.h"
8
9
10 /******************************************************************************
11 51系列中,对于int型的双字节数,在内存中的存放顺序为前高后低
12 如int 0x1234,在内存中实际的存放位置为0x12,0x34
13 ******************************************************************************/
14 WORD calCRC(BYTE idata *ptr, BYTE data count)
15 {
16 1 WORD_UN data crc;
17 1 BYTE data i;
18 1
19 1 crc.bytArray[0] = 0;
20 1 crc.bytArray[1] = 0;
21 1 //while (count-- > 0) {
22 1 while(count>0){
23 2 count--;
24 2 crc.bytArray[0] ^= *ptr;
25 2 crc.bytArray[1] ^= 0;
26 2 ptr++;
27 2
28 2 for (i = 0; i < 8; ++i) {
29 3 if (crc.bytArray[0] & 0x80) {
30 4 //crc.wValue = crc.wValue << 1 ^ 0x1021;
31 4 crc.wValue = crc.wValue << 1;
32 4 crc.bytArray[0] ^= 0x10;
33 4 crc.bytArray[1] ^= 0x21;
34 4 } else {
35 4 crc.wValue = crc.wValue << 1;
36 4 }
37 3 }
38 2 }
39 1 return crc.wValue;
40 1 }
41
42 void SaveCode(void)
43 {
44 1 WORD data addr;
45 1
46 1 addr = (((WORD)XmodemRecvBuf[2])<<7)+896;//写到1024(128*x+896)位置处 //*128 - 96; //0
47 1 _25LC320_WriteByteInPage(addr, XmodemRecvBuf+4); //2
48 1 // _25LC320_WriteByteInPage(addr+32, XmodemRecvBuf+36); //34
49 1 _25LC320_WriteByteInPage(addr+64, XmodemRecvBuf+68); //66
50 1 // _25LC320_WriteByteInPage(addr+96, XmodemRecvBuf+100); //98
51 1 }
52
53 bit XmodemCheck(void)
54 {
C51 COMPILER V8.05a XMODEM 03/08/2007 09:20:44 PAGE 2
55 1 WORD_UN data rtn;
56 1 if (XmodemRecvBuf[2] + XmodemRecvBuf[3] - 0xFF== 0) { //0 1
57 2 rtn.wValue = calCRC(XmodemRecvBuf + 4, 128); //2
58 2 return ( rtn.bytArray[0] == XmodemRecvBuf[132] && rtn.bytArray[1] == XmodemRecvBuf[133]); //130 131
59 2 }
60 1 return 0;
61 1 }
62
63 void xmodem(void)
64 {
65 1 BYTE data i;
66 1 CUSTOM_TIMER tmrWaiting;
67 1
68 1 for (i = 0; i < 20; i++) {
69 2 SetCustomTimer(&tmrWaiting, SECONDS(1));
70 2 SBUF = XMODEM_C;
71 2 serial_recv_num=1;
72 2 while (!IsTimeOut(&tmrWaiting)) {
73 3 if(XmodemRecvBuf[1]==XMODEM_SOH){
74 4 if(serial_recv_num>=134){ //0:u 1:soh 2-133 total 132 134end
75 5 if (XmodemCheck()) {
76 6 if(XmodemRecvBuf[2]>32) //24
77 6 ;
78 6 // SIOSendData("\r\nFile>3K:", sizeof("\r\nFile>3K:"));
79 6 else { SaveCode(); }
80 6 SBUF = XMODEM_ACK;
81 6 }
82 5 else{
83 6 SBUF = XMODEM_NAK;
84 6 }
85 5 SetCustomTimer(&tmrWaiting, SECONDS(1));
86 5 serial_recv_num=1;
87 5 }
88 4 }
89 3 else if(XmodemRecvBuf[1]==XMODEM_EOT){
90 4 SBUF = XMODEM_ACK;
91 4 return;
92 4 }
93 3 // else
94 3 // serial_recv_num=1;
95 3 }
96 2 }
97 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 230 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 12
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 + -