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

📄 parity.asm

📁 单片机程序设计基础 随书光盘
💻 ASM
字号:
;偶校验检错码模拟通讯程序
SADDR	EQU	2000H	;数据区首址。
BADDR	EQU	2100H	;模拟发送缓冲区首址。
DADDR	EQU	2020H	;数据保存区首址。
NUMB	DATA	30H	;数据个数存放单元。
ERR	BIT	00H	;出错标志。

	ORG	0000H
	LJMP	TEST
	
	ORG	100H		;测试程序。
TEST:	MOV	NUMB,#20H	;原始数据个数。
	MOV	R2,#20H
	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	R2,COPY
	MOV	NUMB,#20H	;原始数据个数。
	MOV	DPTR,#SADDR	;原始数据首址。
	MOV	P2,#HIGH(BADDR)	;模拟发送缓冲区首址。
	MOV	R0,#LOW(BADDR)
	LCALL	TRANS		;模拟发送。
	MOV	DPTR,#DADDR	;模拟接收数据保存区首址。
	MOV	P2,#HIGH(BADDR)	;模拟发送缓冲区首址。
	MOV	R0,#LOW(BADDR)
	LCALL	RECEV		;模拟接收。
	NOP			;应该没有差错。
	NOP
	NOP
	MOV	P2,#HIGH(BADDR)	;在模拟通讯缓冲区子制造一个差错。
	MOV	R0,#LOW(BADDR)+5
	MOVX	A,@R0
	XRL	A,#40H
	MOVX	@R0,A
	MOV	DPTR,#DADDR+32	;模拟接收数据保存区首址。
	MOV	R0,#LOW(BADDR)
	LCALL	RECEV		;再接收一次,应该能够发现差错(ERR=1)。
STOP:	LJMP	STOP		;

TRANS:	MOV	A,NUMB		;模拟发送程序,先取数据个数。
	MOV	R2,A
	LCALL	OUTB		;发送数据个数。
TRNS:	MOVX	A,@DPTR		;读取一个数据。
	LCALL	OUTB		;发送一字节数据。
	INC	DPTR		;调整数据指针。
	DJNZ	R2,TRNS		;发送完全部数据。
	RET			;发送结束。

OUTB:	MOV	B,A		;暂存。
	SWAP	A		;取高四位。
	LCALL	OUT		;发送出去。
	MOV	A,B		;取低四位。
OUT:	ANL	A,#0FH		;将十六进制数转换成ASCII码。
	ADD	A,#90H
	DA	A
	ADDC	A,#40H
	DA	A
	MOV	C,PSW.0		;取偶校验结果。
	MOV	ACC.7,C		;拼入最高位。
	MOVX	@R0,A		;发送到模拟缓冲区。
	INC	R0
	RET

RECEV:	CLR	ERR		;出错标志初始化。
	LCALL	INBY		;输入一个字节。
	MOV	NUMB,A		;保存数据长度。
	MOV	R2,A
RECV:	LCALL	INBY		;输入一个字节。
	MOVX	@DPTR,A		;存入数据区。
	INC	DPTR		;调整数据指针。
	DJNZ	R2,RECV		;输入全部数据。
	RET

INBY:	LCALL	INB		;输入四位信息。
	SWAP	A		;高四位。
	MOV	B,A		;暂存。
	LCALL	INB		;再输入四位信息。
	ORL	A,B		;低四位与高四位拼接成一个字节。
	RET

INB:	MOVX	A,@R0		;从模拟通讯缓冲区读取一个数据。
	INC	R0
	JNB	PSW.0,ASC	;偶校验正确否?
	SETB	ERR		;偶校验出错,设立出错标志。
ASC:	ANL	A,#7FH		;除去偶校验位,恢复原ASCII码。
	CLR	C		;将ASCII码转换为十六进制数。
	SUBB	A,#30H
	JNB	ACC.4,INE
	SUBB	A,#7
INE:	RET

DATS:	DB	1,2,3,4,5,6,7,8
	DB	9,10,11,12,13,14,15,16
	DB	17,18,19,20,21,22,23,24
	DB	25,26,27,28,29,30,31,32
	END

⌨️ 快捷键说明

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