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

📄 intelhex.a51

📁 msc1201 编程4
💻 A51
字号:
$NOMOD51
$include (REG1210.INC)
NAME 	INTEL_HEX
	PUBLIC _read_and_write_intel_hex;
	EXTRN CODE (_fpm, _tx_byte, rx_byte_echo, rx_hex_echo)
INTEL_HEX_ROUTINES  SEGMENT  CODE
	RSEG	INTEL_HEX_ROUTINES
CPUA	EQU 80H
CPUS  EQU 40H
FWR	EQU 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Get, write & report result for a Intel Hex File
; R7 define which CPU: CPUA or CPUS
_read_and_write_intel_hex:
	mov	BPL,R7
rw_intelhex:
	call	intel_hex_transform
	;R7.3/R7.1/R7.0= EOF/ CheckSum Err/ Write Err
	;if R7= xx1b / x10b / 100b / 000b then print X / E / T / .
	mov	a,r7
	mov	r7,#'X'
	jb	acc.0,intel_wr_error
	mov	r7,#'E'
	jb	acc.1,intel_chksum_error
	mov	r7,#'T'
	jb	ACC.3,intel_eof		;end of file
	mov	R7, #'.'		; Successful
	call	_tx_byte
	jnb	acc.3, rw_intelhex
	ret
intel_wr_error:
intel_chksum_error:
intel_eof:
	call	_tx_byte
	ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Get, write & report result for a Intel Hex Line
intel_hex_transform:
	call	rx_byte_echo		; wait for ':'
	cjne	r7,#':',intel_hex_transform
	MOV	R4, #0			; reset checksum
	call	rx_hex_echo_cs		; get byte count
	MOV 	R2, Reg7		; store byte count in R2
	call	rx_hex_echo_cs		; get dest address-hi
	MOV	DPH, R7
	call	rx_hex_echo_cs		; get dest address-lo
	MOV	DPL, R7
	call	rx_hex_echo_cs		; get line type (data line/last line)
	MOV	B, #00H			; B has receive line status
	cjne	r7,#01, iht_data_loop	
	orl	b,#08h			; last line
iht_data_loop:	
	call	rx_hex_echo_cs		; get a data OR checksum byte
	CJNE	R2, #00h, iht_data_byte	; check_byte_count
	SJMP	iht_checksum		; R2==00h
iht_data_byte:
	;MOV	R5, AR7		; PLACE DATA BYTE IN R5
	;MOV	R3, #0H			; FPM mode
	;MOV	R6, DPH			; Set write address
	;MOV	R7, DPL
	PUSH	DPH
	PUSH	DPL
	PUSH	REG4
	PUSH	REG2	
	PUSH	REGB
	MOV	R3,REG7		; pd
	MOV	R4,DPH		; a
	MOV	R5,DPL
	MOV	R7,#41H ;BPL		; cmd
iht_skip_translate:
	lcall _fpm
;	call	_write_src
	POP	REGB
	POP	REG2
	POP	REG4
iht_write_result:
	CJNE 	R7, #01H, iht_good_write
	ORL	b, #01H			; write error
iht_good_write:
	POP	DPL
	POP	DPH
	INC	DPTR
	DJNZ	R2, iht_data_loop
	call	rx_hex_echo_cs
iht_checksum:
	MOV 	A, R4;
	jz	iht_chksum_pass
iht_chksum_error:
	ORL	B, #02	
iht_chksum_pass:
	MOV	R7, B
	RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Get a byte from serial port with 
;	hex convert/echo/checksum cal
rx_hex_echo_cs:
	call rx_hex_echo;
	MOV	A, R4;
	ADD	A, R7;	ADD received byte to checksum
	MOV	R4, A;
	RET
end

⌨️ 快捷键说明

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