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

📄 crc.asm

📁 单片机程序设计基础 随书光盘
💻 ASM
字号:
;CRC校验算法
SADDR	EQU	2000H		;数据区首址(任意设置128字节数据)。
ERR	BIT	00H		;出错标志。

	ORG	0000H
	LJMP	TEST
	
	ORG	100H
TEST:	MOV	R3,#80H
	MOV	DPTR,#DATS
	MOV	P2,#HIGH(SADDR)	;片外RAM中数据存放首址。
	MOV	R0,#LOW(SADDR)
COPY:	CLR	A
	MOVC	A,@A+DPTR	;将测试数据存放到片外RAM中。
	MOVX	@R0,A
	INC	DPTR
	INC	R0
	DJNZ	R3,COPY
	LCALL	CRCOUT		;模拟发方生成CRC校验。
	LCALL	CHECK		;模拟收方进行CRC校验,应该没有差错。
	MOV	DPTR,#SADDR+20H	;模拟两个字节被破坏。
	CLR	A
	MOVX	@DPTR,A
	INC	DPTR
	MOVX	@DPTR,A
	LCALL	CHECK		;再次模拟收方进行CRC校验,应该发现差错。
STOP:	LJMP	STOP

CRCOUT:	MOV	DPTR,#SADDR+80H;将CRC存放单元初始化为零。
	CLR	A
	MOVX	@DPTR,A
	INC	DPTR
	MOVX	@DPTR,A
	LCALL	CRC	;计算CRC。
	MOV	DPTR,#SADDR+80H;将计算结果存放到数据块之后。
	MOV	A,R2
	MOVX	@DPTR,A
	INC	DPTR
	MOV	A,R3
	MOVX	@DPTR,A
	RET

CRC:	MOV	DPTR,#SADDR ;(CRC计算模块)先取两字节数据,
	MOVX	A,@DPTR	;作为最初的被除数。
	MOV	R2,A	
	INC	DPTR
	MOVX	A,@DPTR
	MOV	R3,A
	MOV	R7,#80H	;以后的128字节依次作为被除数的补充。
CRC1:	INC	DPTR
	MOVX	A,@DPTR	;取一字节数据,作为被除数的补充。
	MOV	R4,A
	MOV	R5,#8	;每字节要进行8次模2除法。
CRC2:	MOV	A,R4	;三字节被除数的当前余数左移一位。
	RLC	A
	MOV	R4,A
	MOV	A,R3
	RLC	A
	MOV	R3,A
	MOV	A,R2
	RLC	A
	MOV	R2,A
	JNC	CRC3	;移出的最高位是0,不用处理。
	XRL	A,#10H	;移出的最高位是1,进行模2处理。
	MOV	R2,A
	MOV	A,R3
	XRL	A,#21H
	MOV	R3,A
CRC3:	DJNZ	R5,CRC2	;处理完一个字节。
	DJNZ	R7,CRC1	;处理完全部数据。
	RET		;CRC校验码在R2R3之中。

CHECK:	CLR	ERR	;出错标志初始化。
	LCALL	CRC	;计算CRC。
	MOV	A,R2	;结果为零否?
	ORL	A,R3
	JZ	CHKE
	SETB	ERR	;结果不为零,设立出错标志。
CHKE :	RET

DATS:	DB	00H,01H,02H,03H,04H,05H,06H,07H
	DB	08H,09H,0AH,0BH,0CH,0DH,0EH,0FH
	DB	10H,11H,12H,13H,14H,15H,16H,17H
	DB	18H,19H,1AH,1BH,1CH,1DH,1EH,1FH
	DB	20H,21H,22H,23H,24H,25H,26H,27H
	DB	28H,29H,2AH,2BH,2CH,2DH,2EH,2FH
	DB	30H,31H,32H,33H,34H,35H,36H,37H
	DB	38H,39H,3AH,3BH,3CH,3DH,3EH,3FH
	DB	40H,41H,42H,43H,44H,45H,46H,47H
	DB	48H,49H,4AH,4BH,4CH,4DH,4EH,4FH
	DB	50H,51H,52H,53H,54H,55H,56H,57H
	DB	58H,59H,5AH,5BH,5CH,5DH,5EH,5FH
	DB	60H,61H,62H,63H,64H,65H,66H,67H
	DB	68H,69H,6AH,6BH,6CH,6DH,6EH,6FH
	DB	70H,71H,72H,73H,74H,75H,76H,77H
	DB	78H,79H,7AH,7BH,7CH,7DH,7EH,7FH

	END

⌨️ 快捷键说明

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