📄 main.ls1
字号:
0014 30B5FD 891 JNB K4,?C0035
0017 892 ?C0036:
893 ; //复位重要SFR寄存器
894 ; IE = 0x00;
895 ; SOURCE LINE # 246
0017 E4 896 CLR A
0018 F5A8 897 MOV IE,A
898 ; TCON = 0x00;
899 ; SOURCE LINE # 247
001A F588 900 MOV TCON,A
901 ; TMOD = 0x00;
902 ; SOURCE LINE # 248
001C F589 903 MOV TMOD,A
904 ; IP = 0x00;
905 ; SOURCE LINE # 249
001E F5B8 906 MOV IP,A
907 ; SCON = 0x00;
908 ; SOURCE LINE # 250
0020 F598 909 MOV SCON,A
A51 MACRO ASSEMBLER MAIN 03/29/2007 22:55:54 PAGE 15
910 ; //恢复堆栈指针SP默认值;跳到RAM地址0x8000处
911 ; #pragma asm
912 ; MOV SP, #0x07
0022 758107 913 MOV SP, #0x07
914 ; LJMP 0x8000
0025 028000 915 LJMP 0x8000
916 ; #pragma endasm
917 ; }
918 ; SOURCE LINE # 256
0028 22 919 RET
920 ; END OF GotoRam
921
922 ;
923 ;
924 ; /*******************************************************************************
925 ; 函数:GetString()
926 ; 功能:从串行口读入一行HEX记录
927 ; 参数:*s-字符缓冲区,保存读入的数据
928 ; size-最大限制长度
929 ; *******************************************************************************/
930 ; void GetString(char pdata *s, unsigned char size)
931
---- 932 RSEG ?PR?_GetString?MAIN
0000 933 _GetString:
934 USING 0
935 ; SOURCE LINE # 265
0000 8F00 F 936 MOV s?1150,R7
0002 8D00 F 937 MOV size?1151,R5
938 ; {
939 ; SOURCE LINE # 266
940 ; char c;
941 ; unsigned char n;
942 ; n = 0;
943 ; SOURCE LINE # 269
0004 E4 944 CLR A
0005 F500 F 945 MOV n?1153,A
946 ; for (;;)
947 ; SOURCE LINE # 270
0007 948 ?C0038:
949 ; {
950 ; SOURCE LINE # 271
951 ; c = _getkey();
952 ; SOURCE LINE # 272
0007 120000 F 953 LCALL _getkey
000A 8F00 F 954 MOV c?1152,R7
955 ; if ( (c==':') || isxdigit(c) )
956 ; SOURCE LINE # 273
000C E500 F 957 MOV A,c?1152
000E 643A 958 XRL A,#03AH
0010 6005 959 JZ ?C0041
0012 120000 F 960 LCALL _isxdigit
0015 5014 961 JNC ?C0040
0017 962 ?C0041:
963 ; {
964 ; SOURCE LINE # 274
965 ; if ( n < size )
966 ; SOURCE LINE # 275
0017 E500 F 967 MOV A,n?1153
0019 C3 968 CLR C
001A 9500 F 969 SUBB A,size?1151
001C 50E9 970 JNC ?C0038
971 ; {
972 ; SOURCE LINE # 276
973 ; s[n++] = c;
974 ; SOURCE LINE # 277
001E AF00 F 975 MOV R7,n?1153
A51 MACRO ASSEMBLER MAIN 03/29/2007 22:55:54 PAGE 16
0020 0500 F 976 INC n?1153
0022 E500 F 977 MOV A,s?1150
0024 2F 978 ADD A,R7
0025 F8 979 MOV R0,A
0026 E500 F 980 MOV A,c?1152
0028 F2 981 MOVX @R0,A
982 ; }
983 ; SOURCE LINE # 278
984 ; }
985 ; SOURCE LINE # 279
0029 80DC 986 SJMP ?C0038
002B 987 ?C0040:
988 ; else if ( c == '\n' )
989 ; SOURCE LINE # 280
002B E500 F 990 MOV A,c?1152
002D B40AD7 991 CJNE A,#0AH,?C0038
992 ; {
993 ; SOURCE LINE # 281
994 ; s[n] = '\0';
995 ; SOURCE LINE # 282
0030 E500 F 996 MOV A,s?1150
0032 2500 F 997 ADD A,n?1153
0034 F8 998 MOV R0,A
0035 E4 999 CLR A
0036 F2 1000 MOVX @R0,A
1001 ; return;
1002 ; }
1003 ; SOURCE LINE # 284
1004 ; }
1005 ; SOURCE LINE # 285
1006 ; }
1007 ; SOURCE LINE # 286
0037 1008 ?C0045:
0037 22 1009 RET
1010 ; END OF _GetString
1011
1012 ;
1013 ;
1014 ; //主程序
1015 ; void main()
1016
---- 1017 RSEG ?PR?main?MAIN
0000 1018 main:
1019 USING 0
1020 ; SOURCE LINE # 290
1021 ; {
1022 ; SOURCE LINE # 291
1023 ; unsigned char n;
1024 ; unsigned char i;
1025 ; unsigned int addr;
1026 ; CIntelHEX idata IntelHEX;
1027 ; char pdata buf[76];
1028 ; UartInit();
1029 ; SOURCE LINE # 297
0000 120000 F 1030 LCALL UartInit
1031 ; printf("Ready\r\n");
1032 ; SOURCE LINE # 298
0003 7BFF 1033 MOV R3,#0FFH
0005 7A00 F 1034 MOV R2,#HIGH (?SC_29)
0007 7900 F 1035 MOV R1,#LOW (?SC_29)
0009 120000 F 1036 LCALL _printf
1037 ; for (;;)
1038 ; SOURCE LINE # 299
000C 1039 ?C0046:
1040 ; {
1041 ; SOURCE LINE # 300
A51 MACRO ASSEMBLER MAIN 03/29/2007 22:55:54 PAGE 17
1042 ; GetString(buf,sizeof(buf)-1); //从串行口读入一行HEX记录
1043 ; SOURCE LINE # 301
000C 7F00 F 1044 MOV R7,#LOW (buf?1258)
000E 7D4B 1045 MOV R5,#04BH
0010 120000 F 1046 LCALL _GetString
1047 ; if ( AnalyseHEX(&IntelHEX,buf) ) //分析HEX记录,转换成BIN格式
1048 ; SOURCE LINE # 302
0013 7F00 F 1049 MOV R7,#LOW (IntelHEX?1257)
0015 7D00 F 1050 MOV R5,#LOW (buf?1258)
0017 120000 F 1051 LCALL _AnalyseHEX
001A 50F0 1052 JNC ?C0046
1053 ; {
1054 ; SOURCE LINE # 303
1055 ; switch ( IntelHEX.tt )
1056 ; SOURCE LINE # 304
001C 7800 F 1057 MOV R0,#LOW (IntelHEX?1257+03H)
001E E6 1058 MOV A,@R0
001F 14 1059 DEC A
0020 6036 1060 JZ ?C0054
0022 04 1061 INC A
0023 70E7 1062 JNZ ?C0046
1063 ; {
1064 ; SOURCE LINE # 305
1065 ; case 0x00: //HEX类型:数据
1066 ; SOURCE LINE # 306
0025 1067 ?C0050:
1068 ; //保存BIN代码到RAM
1069 ; addr = IntelHEX.aaaa;
1070 ; SOURCE LINE # 308
0025 7800 F 1071 MOV R0,#LOW (IntelHEX?1257+01H)
0027 E6 1072 MOV A,@R0
0028 F500 F 1073 MOV addr?1256,A
002A 08 1074 INC R0
002B E6 1075 MOV A,@R0
002C F500 F 1076 MOV addr?1256+01H,A
1077 ; n = IntelHEX.ll;
1078 ; SOURCE LINE # 309
002E 7800 F 1079 MOV R0,#LOW (IntelHEX?1257)
0030 E6 1080 MOV A,@R0
0031 F500 F 1081 MOV n?1254,A
1082 ; for ( i=0; i<n; i++ )
1083 ; SOURCE LINE # 310
0033 E4 1084 CLR A
0034 F500 F 1085 MOV i?1255,A
0036 1086 ?C0051:
0036 E500 F 1087 MOV A,i?1255
0038 C3 1088 CLR C
0039 9500 F 1089 SUBB A,n?1254
003B 50CF 1090 JNC ?C0046
1091 ; {
1092 ; SOURCE LINE # 311
1093 ; XBYTE[addr+i] = IntelHEX.dd[i];
1094 ; SOURCE LINE # 312
003D 7400 F 1095 MOV A,#LOW (IntelHEX?1257+04H)
003F 2500 F 1096 ADD A,i?1255
0041 F8 1097 MOV R0,A
0042 E6 1098 MOV A,@R0
0043 FF 1099 MOV R7,A
0044 E500 F 1100 MOV A,i?1255
0046 7C00 1101 MOV R4,#00H
0048 2500 F 1102 ADD A,addr?1256+01H
004A FD 1103 MOV R5,A
004B EC 1104 MOV A,R4
004C 3500 F 1105 ADDC A,addr?1256
004E 8D82 1106 MOV DPL,R5
0050 F583 1107 MOV DPH,A
A51 MACRO ASSEMBLER MAIN 03/29/2007 22:55:54 PAGE 18
0052 EF 1108 MOV A,R7
0053 F0 1109 MOVX @DPTR,A
1110 ; }
1111 ; SOURCE LINE # 313
0054 0500 F 1112 INC i?1255
0056 80DE
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -