⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.ls1

📁 实验7 在RAM中执行程序代码 实验7 在RAM中执行程序代码 实验7 在RAM中执行程序代码
💻 LS1
📖 第 1 页 / 共 5 页
字号:
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 + -