📄 main000.asm
字号:
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 + -