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

📄 main000.asm

📁 这是一个MSC51单片机程序它读出片外RAM中的数据从串行口发向机
💻 ASM
📖 第 1 页 / 共 2 页
字号:
                NOP
                NOP
;-----------------------------------------------------------------
MAIN_RDD:       ;读入一行数据(16字节),并转化为INTER HEX的数据格式
                LCALL   READ_BIN
                LCALL   HEX2ASC
                MOV     SYS_STATUS,#0A4H
                MOV     R0,#ADDR_HEX
                MOV     NUM,#4CH    ; 每个记录为44字节
LP_TTT0:        MOV     A,@R0
                CLR     TI
                MOV     SBUF,A      ; 送出一个字节
LP_TTT:
                JNB     TI,LP_TTT
                CLR     TI
                ;发好一个字节的处理
                INC     R0
                DJNZ    NUM,LP_TTT0     ;此行记录未发完则继续发送
                MOV     SYS_STATUS,0A5H
                ; 0A5H---LINE计数及地址刷新处理
                INC     LINE
                MOV     A,#20H
                ADD     A,ADDR_LOW
                MOV     ADDR_LOW,A
                CLR     A
                ADDC    A,ADDR_HIGH
                MOV     ADDR_HIGH,A
                MOV     SYS_STATUS,#0A4H
                MOV     A,LINE
                JZ      MAIN_ALINE0
                NOP
                NOP
                LJMP    MAIN_RDD
;-----------------------------------------------------------------------
MAIN_ALINE0:    MOV     SYS_STATUS,#0A0H
                LJMP    COMMAND_ERR
                NOP
                NOP
                LJMP    MAIN_RRR
;-----------------------------------------------------------------------
READ_BIN:       ;从片外存储器中读取16字节数据
                MOV     CNT,#20H
                MOV     R0,#ADDR_BIN
                MOV     DPL,ADDR_LOW
                MOV     DPH,ADDR_HIGH
                MOV     A,BLOCK_NUM
                MOV     C,ACC.3
                MOV     P1.7,C
LP_RD:          MOVX    A,@DPTR
                MOV     @R0,A
                INC     DPTR
                INC     R0
                DJNZ    CNT,LP_RD
                RET
                NOP
                NOP
                LJMP    ERR
;--------------------------------------------------------------------
TAB_HEX2ASC:
                DB      30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
                ;   0,1,2,3,4,5,6,7,8,9
                DB      41H,42H,43H,44H,45H,46H
                ;   A,B,C,D,E,F
                ;  ":"的ASCII码为:3AH,"CR"(回车)的ASCII为:0DH
                NOP
                NOP
                LJMP    ERR
;--------------------------------------------------------------------
HEX2ASC:        ; 由十六进制数据生成INTER HEX 格式文件数据的子程序
                MOV     R0,#ADDR_HEX
                MOV     TEMP,#00H
                ; 取INTER HEX 文件数据段首地址作为指针
                MOV     A,#3AH
                MOV     @R0,A
                INC     R0              ; 数据段以":" 打头
                MOV     A,#32H
                MOV     @R0,A
                INC     R0
                MOV     A,#30H
                MOV     @R0,A
                INC     R0              ; 记录长度(20H)
                MOV     A,#20H
                ADD     A,TEMP
                MOV     TEMP,A          ; 记录长度加入累加和中

                MOV     DPTR,#TAB_HEX2ASC
                MOV     A,ADDR_HIGH
                SWAP    A
                ANL     A,#0FH
                MOVC    A,@A+DPTR
                MOV     @R0,A
                INC     R0
                MOV     A,ADDR_HIGH
                ANL     A,#0FH
                MOVC    A,@A+DPTR
                MOV     @R0,A
                INC     R0              ; 加入偏移地址高字节

                MOV     A,ADDR_LOW
                SWAP    A
                ANL     A,#0FH
                MOVC    A,@A+DPTR
                MOV     @R0,A
                INC     R0
                MOV     A,ADDR_LOW
                ANL     A,#0FH
                MOVC    A,@A+DPTR
                MOV     @R0,A
                INC     R0              ; 加入偏移地址低字节

                MOV     A,ADDR_HIGH
                ADD     A,TEMP
                ADD     A,ADDR_LOW
                MOV     TEMP,A          ; 偏移地址加入累加和

                MOV     A,#30H
                MOV     @R0,A
                INC     R0
                MOV     @R0,A
                INC     R0              ; 此记录为数据记录
                ; 记录类别为数据(00H),不用加入累加和中

                MOV     CNT,#20H        ; 设定记录长度为10H
                MOV     R1,#ADDR_BIN
LP_HEX:         MOV     A,@R1           ; 读入一字节数据
                ADD     A,TEMP
                MOV     TEMP,A          ; 加入累加和中
                MOV     A,@R1           ; 重读此字节
                SWAP    A
                ANL     A,#0FH
                MOVC    A,@A+DPTR
                MOV     @R0,A
                INC     R0
                MOV     A,@R1
                ANL     A,#0FH
                MOVC    A,@A+DPTR
                MOV     @R0,A
                INC     R0
                INC     R1
                DJNZ    CNT,LP_HEX
                ;加上校验和
                MOV     A,TEMP
                CPL     A
                INC     A
                MOV     TEMP,A
                SWAP    A
                ANL     A,#0FH
                MOVC    A,@A+DPTR
                MOV     @R0,A
                INC     R0
                MOV     A,#0FH
                ANL     A,TEMP
                MOVC    A,@A+DPTR
                MOV     @R0,A
                INC     R0
                MOV     A,#0AH
                MOV     @R0,A           ;记录以回车符结束
                RET
                NOP
                NOP
                LJMP    ERR
;-------------------------------------------------------------------------
SUB_CRC:        ;CRC校验对路果生成子程序
                ;R0为字符串指针;R3为字节数,结果存放在CRC_VALUE中
                PUSH    A
                PUSH    PSW
                MOV     CRC_VALUE,#00H
LP_CRC:         MOV     A,@R0
                XRL     A,CRC_VALUE
                MOV     DPTR,#TAB_CRC
                MOVC    A,@A+DPTR
                MOV     CRC_VALUE,A
                INC     R0
                DJNZ    R3,LP_CRC
                POP     PSW
                POP     ACC
                RET
                NOP
                NOP
                LJMP    ERROR
;-------------------------------------------------------------------------
TAB_CRC:        ; CRC校验数据表
                DB      000,094,188,226,097,063,221,131
                DB      194,156,126,032,163,253,031,065
                DB      157,195,033,127,252,162,064,030
                DB      095,001,227,189,062,096,130,220
                DB      035,125,159,193,066,028,254,160
                DB      225,191,093,003,128,222,060,098
                DB      190,224,002,092,223,129,099,061
                DB      124,034,192,158,029,067,161,255
                DB      070,024,250,164,039,121,155,197
                DB      132,218,056,102,229,187,089,007
                DB      219,133,103,057,186,228,006,088
                DB      025,071,165,251,120,038,196,154
                DB      101,059,217,135,004,090,184,230
                DB      167,249,027,069,198,152,122,036
                DB      248,166,068,026,153,199,037,123
                DB      058,100,134,216,091,005,231,185
                DB      140,210,048,110,237,179,081,015
                DB      078,016,242,172,047,113,147,205
                DB      017,079,173,243,112,046,204,146
                DB      211,141,111,049,178,236,014,080
                DB      175,241,019,077,206,144,114,044
                DB      109,051,209,143,012,082,176,238
                DB      050,108,142,208,083,013,239,177
                DB      240,174,076,018,145,207,045,115
                DB      202,148,118,040,171,245,023,073
                DB      008,086,180,234,105,055,213,139
                DB      087,009,235,181,054,104,138,212
                DB      149,203,041,119,244,170,072,022
                DB      233,183,085,011,136,214,052,106
                DB      043,117,151,201,074,020,246,168
                DB      116,042,200,150,021,075,169,247
                DB      182,232,010,084,215,137,107,053
                NOP
                NOP
                LJMP    ERROR
;-------------------------------------------------------------------------
                END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -