📄 manage.lst
字号:
1001 //
1002 // TxdBuf[4]=CrC>>8;
1003 // TxdBuf[5]=CrC;
1004 // Txd_9600_19200(1,6,TxdBuf);
1005 //}
1006
1007
1008 //--------------------------------------------------------------------------
1009 // 退出请求命令
1010 //---------------------------------------------------------------------------
1011
1012 //void Exit()
1013 //{
1014 // uint CrC;
1015 // TxdBuf[0]='E';
1016 // TxdBuf[1]='X';
1017 // TxdBuf[2]=0;
1018 // TxdBuf[3]=5;
1019 //
1020 // CrC = CRC16(TxdBuf,4);
1021 //
1022 // TxdBuf[4]=CrC>>8;
1023 // TxdBuf[5]=CrC;
1024 // Txd_9600_19200(1,6,TxdBuf);
1025 //}
1026
1027 uchar LinkChuLi()
1028 {
C51 COMPILER V8.01 MANAGE 03/28/2006 09:49:23 PAGE 18
1029 1 uchar LinkFg;
1030 1
1031 1 LinkFg = Linking();
1032 1 if(LinkFg == 0) //联机失败
1033 1 {
1034 2 // ReHint("-^|^-","联机失败.");
1035 2 // NotACK(LinkER);
1036 2 return 0;
1037 2 }
1038 1 // if(LinkFg == 2)
1039 1 // {
1040 1 // ReHint("-^||^-","联机超时.");
1041 1 // NotACK(Overtime);
1042 1 // return 0;
1043 1 // }
1044 1 ACK(0,0,&LinkFg); //联机成功
1045 1 return 1;
1046 1 }
1047
1048
1049 //void InitSerial()
1050 //{
1051 // COM1CS;
1052 // UARTC;
1053 // UART1_Mod1_Timer1_9600;
1054 //}
1055 //---------------------------------------------------------------------------
1056 // 下载
1057 //---------------------------------------------------------------------------
1058 void WareDown()
1059 {
1060 1 uchar EraseFg,ReFg,i;
1061 1 uchar Len,Stype=0,Type,Bao;
1062 1 ulong addr,num;//商品信息地址:WareAdr//项目信息地址ItemAdr
1063 1
1064 1 // InitSerial();
1065 1
1066 1
1067 1 ReHint("正在联机....","请稍候/");
1068 1
1069 1
1070 1 if(!LinkChuLi())
1071 1 return;
1072 1
1073 1 ReHint("联机成功.","请下载信息/");
1074 1
1075 1 num = 0;
1076 1 EraseFg = 1;
1077 1
1078 1 while(1)
1079 1 {
1080 2
1081 2 ReFg = DownDispose(&Len,&Type,&Bao);
1082 2
1083 2 if(ReFg == 0) //命令头错误
1084 2 {
1085 3 NotACK(ComandEr);
1086 3 // return;
1087 3 }
1088 2 #if Debug
1089 2 // if(ReFg == 2)
1090 2 // NotACK(ReceiveOver); //接收超时
C51 COMPILER V8.01 MANAGE 03/28/2006 09:49:23 PAGE 19
1091 2 #endif
1092 2 if(ReFg == 3)
1093 2 NotACK(CrCEr);
1094 2
1095 2 if(ReFg == 1)
1096 2 {
1097 3 if(Stype!=Type) for(i=0;i<0xff;i++) TxdBuf[i]=RxdBuf[i];
1098 3
1099 3 switch(Type)
1100 3 {
1101 4 case SPDown: //全部商品信息下载
1102 4 case DSPDown: //单个商品信息下载
1103 4 if(Stype != Type)
1104 4 {
1105 5 ReHint(" ^_^ ","正在下载商品信息/"); //如果本次接收的命令不等于上次接收的命令则说明
1106 5 addr = WareAdr; //是下一个命令
1107 5 }
1108 4 break;
1109 4 case XMDown: //全部项目信息下载
1110 4 case DXMDown: //单个项目信息下载
1111 4 if(Stype != Type)
1112 4 {
1113 5 ReHint(" ^_^ ","正在下载项目信息/");
1114 5 addr = ItemAdr;
1115 5 }
1116 4 break;
1117 4 case ZKXW: //西方字库下载
1118 4 if(Stype != Type)
1119 4 {
1120 5 ReHint(" ^_^ ","正在下载GB18030字库/");
1121 5 // ReHint(" ^_^ ","正在下载西文字库/");
1122 5 addr = xWStartadr;
1123 5 }
1124 4 break;
1125 4 case ZKZW: //中文字库下载
1126 4 if(Stype != Type)
1127 4 {
1128 5 ReHint(" ^_^ ","正在下载中文字库/");
1129 5 addr = zWStartadr;
1130 5 }
1131 4 break;
1132 4 case BaudrateSet: //波特率设置
1133 4 ACK(Bao,0,&RxdBuf[5]);
1134 4 if(RxdBuf[5] == Bps19200)
1135 4 {
1136 5 ReHint("波特率设置成功.","现在通讯速率:19200Bps/");
1137 5 BautRateFg = Bps19200;
1138 5 }
1139 4 else
1140 4 {
1141 5 ReHint("波特率设置成功.","现在通讯速率:9600Bps/");
1142 5 BautRateFg = Bps9600;
1143 5 }
1144 4
1145 4 break;
1146 4 case DownTC:return; //退出
1147 4 default:return;
1148 4 }
1149 3
1150 3 if(Stype!=Type) for(i=0;i<0xff;i++) RxdBuf[i]=TxdBuf[i];
1151 3
1152 3 if(Type != BaudrateSet)
C51 COMPILER V8.01 MANAGE 03/28/2006 09:49:23 PAGE 20
1153 3 {
1154 4 // ACK(Bao,0,&RxdBuf[5]);
1155 4
1156 4 Stype=Type; //保存现在的命令类型
1157 4 StartDown(Type,addr,&EraseFg,Len);
1158 4 addr += Len;
1159 4 if(Bao != 0)
1160 4 {
1161 5 ApplyNexDat(Bao);
1162 5 }
1163 4 else
1164 4 ReHint(" ^_^ ","下载完成!/");
1165 4 }
1166 3 }
1167 2 }
1168 1 }
1169
1170
1171 uchar StartDown(uchar type,ulong address,uchar *EraseFlag,uchar len)
1172 {
1173 1 uchar chip;
1174 1 ulong offset;
1175 1 uchar *poin;
1176 1
1177 1 poin = &RxdBuf[5];
1178 1
1179 1 if(type == DSPDown || type == DXMDown)
1180 1 {
1181 2 chip = FlashDat;
1182 2 offset = 0;
1183 2 offset = RxdBuf[5];
1184 2 offset <<= 8;
1185 2 offset |= RxdBuf[6];
1186 2 if(type == DSPDown)
1187 2 address = WareAdr+(offset-1)*SPlen;
1188 2 if(type == DXMDown)
1189 2 address = ItemAdr+(offset-1)*XMlen;
1190 2
1191 2 poin = &RxdBuf[7];
1192 2 len -= 2;
1193 2 }
1194 1
1195 1 if(type == ZKXW || type == ZKZW)
1196 1 {
1197 2 chip = Flashziku;
1198 2 if(*EraseFlag)
1199 2 {
1200 3 *EraseFlag = 0;
1201 3 #if Erasetest //测试时使用,如果不擦除则将些标志置为 0
1202 3 SerialFlashBulkErase(chip);
1203 3 #endif
1204 3 }
1205 2 }
1206 1 if(type == SPDown || type == XMDown)
1207 1 {
1208 2 chip = FlashDat;
1209 2 }
1210 1
1211 1 #if write //如果不对Flash进行写操作则将些标志置为 0
1212 1 SerialFlashWrite(chip,address,len,poin);
1213 1 #endif
1214 1 return 1;
C51 COMPILER V8.01 MANAGE 03/28/2006 09:49:23 PAGE 21
1215 1 }
C51 COMPILER V8.01 MANAGE 03/28/2006 09:49:23 PAGE 22
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION Com0130 (BEGIN)
0000 L?0305:
0000 L?0306:
0000 FF MOV R7,A
0001 E4 CLR A
0002 3E ADDC A,R6
0003 FE MOV R6,A
0004 E4 CLR A
0005 3D ADDC A,R5
0006 FD MOV R5,A
0007 E4 CLR A
0008 3C ADDC A,R4
0009 FC MOV R4,A
000A L?0307:
000A 900000 E MOV DPTR,#?_SerialFlashRead?BYTE+01H
000D 120000 E LCALL ?C?LSTXDATA
0010 900000 E MOV DPTR,#?_SerialFlashRead?BYTE+05H
0013 E4 CLR A
0014 F0 MOVX @DPTR,A
0015 A3 INC DPTR
0016 22 RET
0017 L?0308:
0017 L?0309:
0017 900000 R MOV DPTR,#us1
001A 7A00 R MOV R2,#HIGH mydat
001C 7900 R MOV R1,#LOW mydat
001E L?0310:
001E E0 MOVX A,@DPTR
001F FE MOV R6,A
0020 A3 INC DPTR
0021 E0 MOVX A,@DPTR
0022 FF MOV R7,A
0023 7B01
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -