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

📄 text2.asm

📁 51单片机串口通信汇编语言源代码
💻 ASM
字号:
;功能:
;常数定义
DCount		EQU	6	;数码管总数
PORT_S		EQU	P1	;段选口
PORT_B		EQU	P2	;位选口
DFrstAdd	EQU	30H	;显示首地址
;资源定义:
DisBuf0		EQU	30H	;0号数码管显存
DisBuf1		EQU	31H	;1号数码管显存
DisBuf2		EQU	32H	;2号数码管显存
DisBuf3		EQU	33H	;3号数码管显存
DisBuf4		EQU	34H	;4号数码管显存
DisBuf5		EQU	35H	;5号数码管显存
Wcnt		EQU	40H	;显示位计数器
        ORG     0000H
	  AJMP    MAINT
        ORG     000BH
        AJMP    Timer0
	  ORG     0023H
	  AJMP     Serial
	  ORG     0030H 
;--------1ms扫描显示输出程序---------
Timer0:
	PUSH	ACC
	PUSH	B
	PUSH	PSW
	PUSH	DPH
	PUSH	DPL
	MOV	TH0,#0F4H	;重置T0计时初值
	MOV	TL0,#48H
	LCALL	Display		;显示输出
	POP	DPL
	POP	DPH
	POP	PSW
	POP	B
	POP	ACC
	RETI
;----------------------------------------- 
MAINT:
	MOV	SCON,#50H	;0101 0000,方式1允许接收
	MOV	TMOD,#21H	;0010 0000,T1:方式2 定时,T0:方式1定时
	MOV	TH0,#0F4H	;设置T0计时初值:约3ms
	MOV	TL0,#48H
	MOV	TH1,#0E8H	;T1定时计数初值(设置BR)
	MOV	TL1,#0E8H
	SETB	ES		;开串行中断
	SETB	ET0
	SETB	EA		;开全局中断
	SETB	TR0
	SETB	TR1		;启动T1
	MOV	R1,#DFrstAdd	;接收数据地址指针初始化
	MOV	R7,#6		;接收数据个数为8个 
;-----------------------------------------------------
;显示数据初始化
	MOV	DisBuf0,#10	;灭显示器
	MOV	DisBuf1,#10
	MOV	DisBuf2,#10
	MOV	DisBuf3,#10
	MOV	DisBuf4,#10
	MOV	DisBuf5,#10
MAIN:
	ORL	PCON,#1	;CPU睡眠
	SJMP	MAIN
;-------------------------------------------------------------- 
DISPLAY:
	MOV	PORT_S,#0	;消隐输出
	MOV	A,Wcnt		;查表读取当前点亮数码管的控制码
	MOV	DPTR,#DISCTRL
	MOVC	A,@A+DPTR
	MOV	PORT_B,A	;控制码送位选口
	MOV	A,#DFrstAdd	;计算当前点亮数码管的显存地址	
	ADD	A,Wcnt
	MOV	R0,A		;指针指向当前点亮数码管的显存
	MOV	A,@R0		;读显示代码
	MOV	DPTR,#DISTAB;查表获得其笔型码
	MOVC	A,@A+DPTR
	MOV	PORT_S,A	;笔型码送段选口显示输出
	INC	Wcnt			;显示位置计数加1
	MOV	A,Wcnt		;超界处理
	MOV	B,#DCount
	DIV	AB
	MOV	Wcnt,B
	RET
;-------------------------------------------------------------- 
;--------------------------------------------------------------
DISCTRL:		;显示位置控制码表
	DB	0EFH		;0号数码管显示
	DB	0F7H		;1号数码管显示
	DB	0FBH		;2号数码管显示
	DB	7FH	                ;3号数码管显示
	DB	0BFH		;4号数码管显示
	DB	0DFH		;5号数码管显示
;--------------------------------------------------------------
DISTAB:;显示数据码表
	DB	3FH		;0的笔型码	代码0
	DB	06H		;1的笔型码	代码1
	DB	5BH		;2的笔型码	代码2
	DB	4FH		;3的笔型码	代码3
	DB	66H		;4的笔型码	代码4
	DB	6DH		;5的笔型码	代码5
	DB	7DH		;6的笔型码	代码6
	DB	07H		;7的笔型码	代码7
	DB	7FH		;8的笔型码	代码8
	DB	6FH		;9的笔型码	代码9
	DB	00H		;灭的笔型码	代码10
;--------------------------------------------------------------

;-------------------------------------------------------------- 

Serial:
	JB	      	RI,SB1		;接收数据引起串行中断则转SB1
	CLR		TI		;发送数据引起串行中断则清除TI后返回
	RETI
SB1:
	CLR	RI			;清接收中断请求标志
	MOV	A,SBUF	;所接收数据正确吗(1的个数为偶数?)
	JB		P,SB3		;不是,转SB3
	MOV	SBUF,#0FFH	;是,发送接收数据正确应答
	CLR		ACC.7		;清除最高位的校验码
	MOV	@R1,A		;保存所接收到的数据
	DJNZ	R7,SB2	;所数据接收完毕吗?没有则转SB2继续
	CLR		ES		;完毕,关中断结束
	RETI
SB2:
	INC		R1		;地址指针下移
	RETI
SB3:
	MOV	SBUF,#0FEH	;发关接收数出错应答
	RETI 	 

	END

⌨️ 快捷键说明

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