📄 m500auc.lst
字号:
978 3 if(kk == 1) TC1 = temp;//TC1
979 3 if(kk == 2) wi0 = temp;//TC2
980 3 toPpc(Len,temp);/*TCi*/
981 3 Bcc^=temp;
982 3 Len++;}
983 2 if((TD&0x80)==0x80)
984 2 {
C51 COMPILER V6.02 M500AUC 11/20/2007 16:53:51 PAGE 17
985 3 TD=RECVbyte0();
986 3 if(STATE_FLAG)
987 3 return(TD);
988 3 Bcc^=TD;
989 3 toPpc(Len,TD);
990 3
991 3 if((TD&0x0f)==0x00) T0_T1_FLAG=0;
992 3 if((TD&0x0f)==0x01) T0_T1_FLAG=1;
993 3
994 3 Len++;
995 3 if((TD&0xf0)==0x00) break;
996 3 }
997 2 else break;
998 2 }
999 1
1000 1 /*recv TK */
1001 1 for(i=Len;i<(Len+length);i++)
1002 1 {
1003 2 temp=RECVbyte0();
1004 2 if(STATE_FLAG)
1005 2 return(temp);
1006 2 Bcc^=temp;
1007 2 toPpc(i,temp);
1008 2 }
1009 1
1010 1 CPU_block_num=0;//can't delete--2000.10.15
1011 1 if(ID==CPUtype)//cpu card
1012 1 {
1013 2 IC_REST_FLAG=1;
1014 2 CPU_T0_T1=T0_T1_FLAG;
1015 2 CPU_block=0;
1016 2 }
1017 1 else if(ID==SAM1type) //sam card
1018 1 {
1019 2 SAM_REST_FLAG=1;
1020 2 SAM_T0_T1=T0_T1_FLAG;
1021 2 SAM_block=0;
1022 2 }
1023 1
1024 1 Len+=length;
1025 1 DD = dd0;WI = wi0;
1026 1 delay_1ms(10);
1027 1 return 0;
1028 1 }
1029 //======================================================================================
1030 uchar trans_t0(void)//CPU_ICC:T=0
1031 {
1032 1 uchar i,tempch;
1033 1 uchar casef;//Rlen;
1034 1
1035 1
1036 1 //ET0 = 0;
1037 1 led = 0;
1038 1 LcLe=fromPpc(4);
1039 1
1040 1 if((Len==4)|(Len==5)) {casef=0x12;}
1041 1 else casef=0x34;
1042 1
1043 1 if(Len==4) toPpc(4,0);
1044 1
1045 1 for (i=0;i<5;i++)
1046 1 {
C51 COMPILER V6.02 M500AUC 11/20/2007 16:53:51 PAGE 18
1047 2 tempch = fromPpc(i);
1048 2 status=SENDbyte0(tempch);
1049 2 if (STATE_FLAG) return status;
1050 2 }
1051 1
1052 1 if(!TR2)
1053 1 if(forPowerdown)
1054 1 TR2 = 1;
1055 1 while(1)
1056 1 {
1057 2 sw1=RECVbyte0();
1058 2 if(STATE_FLAG)
1059 2 {
1060 3 sw1=RECVbyte0();
1061 3 if(STATE_FLAG) return(sw1);
1062 3 }
1063 2 if(sw1!=0x60) break;
1064 2 }
1065 1
1066 1 Rlen=0;
1067 1 ins=fromPpc(1);
1068 1
1069 1 if(sw1==ins)
1070 1 {
1071 2 if(casef==0x34)
1072 2 {
1073 3 for (i=5;i<5+LcLe;i++)
1074 3 {
1075 4 tempch = fromPpc(i);
1076 4 status=SENDbyte0(tempch);
1077 4 if (STATE_FLAG)
1078 4 return(status);
1079 4 }
1080 3 // sw1=RECVbyte0();
1081 3 // if(STATE_FLAG)
1082 3 // return(sw1);
1083 3 }
1084 2 else if(casef==0x12)
1085 2 {
1086 3 for(i=0;i<LcLe;i++)
1087 3 {
1088 4 tempch=RECVbyte0();
1089 4 if(STATE_FLAG)
1090 4 return(tempch);
1091 4 toPpc(Rlen,tempch);
1092 4 Rlen++;
1093 4 }
1094 3 // sw1=RECVbyte0();
1095 3 // if(STATE_FLAG)
1096 3 // return(sw1);
1097 3 }
1098 2 sw1=RECVbyte0();
1099 2 if(STATE_FLAG)
1100 2 return(sw1);
1101 2 }
1102 1
1103 1 while(1)
1104 1 {
1105 2 while(sw1 == 0x60)
1106 2 sw1=RECVbyte0();
1107 2 ins=fromPpc(1);
1108 2 if(sw1==ins)
C51 COMPILER V6.02 M500AUC 11/20/2007 16:53:51 PAGE 19
1109 2 {
1110 3 for(i=0;i<LcLe;i++)
1111 3 {
1112 4 tempch=RECVbyte0();
1113 4 if(STATE_FLAG)
1114 4 return(tempch);
1115 4 toPpc(Rlen,tempch);
1116 4 Rlen++;
1117 4 }
1118 3 sw1=RECVbyte0();
1119 3 if(STATE_FLAG)
1120 3 return(sw1);
1121 3 continue;
1122 3 }
1123 2 sw2=RECVbyte0();
1124 2 if(STATE_FLAG)
1125 2 return(sw2);
1126 2
1127 2 ////
1128 2 /*
1129 2 if((sw1==0x61)||(sw1==0x6c))
1130 2 {
1131 2 if(sw1==0x61)
1132 2 {
1133 2 toPpc(0,0);
1134 2 toPpc(1,0xc0);
1135 2 toPpc(2,0);
1136 2 toPpc(3,0);
1137 2 }
1138 2 toPpc(4,sw2);
1139 2 LcLe=sw2;
1140 2 tt0 = timer0 = 0;
1141 2 for(i=0;i<5;i++)
1142 2 {
1143 2 status=SENDbyte0(fromPpc(i));
1144 2 if(STATE_FLAG) return(status);
1145 2 }
1146 2 sw1=RECVbyte0();
1147 2 if(STATE_FLAG) return(sw1);
1148 2 continue;
1149 2 }
1150 2 */
1151 2 ////
1152 2 // if(((sw1&0xf0)!=0x90)&&((sw1&0xf0)!=0x60))
1153 2 // {STATE_FLAG=1;return(0x88);}/*sw1!=9x.6x---error*/
1154 2 // else
1155 2 // {
1156 2 toPpc(Rlen,sw1);Rlen++;toPpc(Rlen,sw2);Rlen++;
1157 2 break;
1158 2 // }/*sw1=9x.6x but !=61.6c*/
1159 2 }
1160 1 ET0 = 0;
1161 1 Len=Rlen;return 0;
1162 1 }
1163
1164
1165
1166 //==================================================================================
1167 /*T=1通信协议*/
1168 uchar trans_t1(void)
1169 {
1170 1 uchar Bcc,temp,i;
C51 COMPILER V6.02 M500AUC 11/20/2007 16:53:51 PAGE 20
1171 1 led = 0;
1172 1 Bcc=NAD;/*BCC*/
1173 1 status=SENDbyte0(NAD);/*send NAD*/
1174 1 if(STATE_FLAG==0)
1175 1 {
1176 2 if((pcb&0x80)==0)//I_block
1177 2 {
1178 3 if(CPU_block_num) {pcb|=0x40;}
1179 3 else pcb&=0xbf;
1180 3 }
1181 2 Bcc^=pcb;
1182 2 //CPU_block_num^=1;
1183 2 CPU_block_num = ~CPU_block_num;
1184 2
1185 2 status=SENDbyte0(pcb);/*send PCB*/
1186 2 }
1187 1
1188 1 if(!STATE_FLAG)
1189 1 {
1190 2 Bcc^=Len;
1191 2 status=SENDbyte0(Len);/*send Len*/
1192 2 }
1193 1
1194 1 if(STATE_FLAG) return(status);
1195 1
1196 1 for(i=0;i<Len;i++)
1197 1 {
1198 2 temp=fromPpc(i);
1199 2 status=SENDbyte0(temp);/*send INF*/
1200 2 if(STATE_FLAG==1) return(status);
1201 2 Bcc^=temp;
1202 2 }
1203 1
1204 1 status=SENDbyte0(Bcc);/*send BCC*/
1205 1 if(STATE_FLAG==1) return(status);
1206 1
1207 1
1208 1
1209 1 /*接收响应*/
1210 1 NAD=RECVbyte0();/*recv NAD*/
1211 1 if(STATE_FLAG==1) return(NAD);
1212 1 //if(status!=(swapchar(ct1))) {STATE_FLAG=1;return(0x88);}/*NAD error*/
1213 1
1214 1 Bcc=NAD;/*BCC*/
1215 1
1216 1 pcb=RECVbyte0();/*recv PCB*/
1217 1 if(STATE_FLAG==1) return(pcb);
1218 1 Bcc^=pcb;
1219 1
1220 1 Len=RECVbyte0();/*recv Len*/
1221 1 if(STATE_FLAG==1) return(Len);
1222 1 Bcc^=Len;
1223 1
1224 1 temp=0;
1225 1 if(pcb&0x80!=0)//is R_block or S_block(not I_block) -- save NAD.PCB.Len
1226 1 {
1227 2 toPpc(0,NAD);//save 0
1228 2 toPpc(1,pcb);//save PCB
1229 2 toPpc(2,Len);//save Len
1230 2 temp=3;
1231 2 command=SNotIblock;//retrun not I_block
1232 2 }
C51 COMPILER V6.02 M500AUC 11/20/2007 16:53:51 PAGE 21
1233 1
1234 1 Len+=temp;//adjust
1235 1
1236 1 for(i=0;i<Len-temp;i++)//RECV INF
1237 1 {
1238 2 status=RECVbyte0();
1239 2 if(STATE_FLAG==1) return(status);
1240 2 Bcc^=status;
1241 2 toPpc(temp+i,status);//save INF
1242 2 }
1243 1
1244 1 status=RECVbyte0();//recv Bcc
1245 1 if(STATE_FLAG==1) return(status);
1246 1
1247 1 toPpc(Len,status);//save Bcc
1248 1
1249 1 //if(status!=Bcc) {STATE_FLAG=1;return(status);}
1250 1
1251 1 ET0 = 0;
1252 1 return 0;
1253 1
1254 1 }
1255 //==================================================================================
1256
1257 #pragma noaregs
1258
1259
1260
1261 void delay_50us(unsigned char _50us)
1262 {
1263 1 while(_50us--)
1264 1 {
1265 2 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
1266 2 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
1267 2 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
1268 2 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
1269 2 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
1270 2 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
1271 2 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
1272 2 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
1273 2
1274 2 }
1275 1 }
1276 void delay_1ms(uchar _1ms)
1277 {
1278 1
1279 1 #ifndef NO_TIMER2
RCAP2LH = RCAP2_1ms;
T2LH = RCAP2_1ms;
TR2 = TRUE;
while (_1ms--)
{
while (!TF2);
TF2 = FALSE;
}
TR2 = FALSE;
#else
1293 1
1294 1 while (_1ms--)
C51 COMPILER V6.02 M500AUC 11/20/2007 16:53:51 PAGE 22
1295 1 {
1296 2 delay_50us(20);
1297 2 }
1298 1
1299 1 #endif
1300 1 }
1301
1302 /*"int1(IC_SW)中断服务函
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -