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

📄 com8123.asm

📁 这是一个COM8123以中断方式工作的实用程序
💻 ASM
字号:
;-----------------------------------------------------------------------------
;		检测 GM8123 的通讯功能		
;	CPU时钟为 22.1184MHZ。			
;-----------------------------------------------------------------------------
RESET	EQU	P1.5
MS	EQU	P1.0
STADD0	EQU	P1.1
STADD1	EQU	P1.2

SRADD0	EQU	P1.3
SRADD1	EQU	P1.4


	ORG	0000H
	LJMP	START


	ORG	0023H
	LJMP	SERIAL_INT

	ORG	0100H
START:
	MOV	SP,#40H
	MOV	TMOD,#20H	;定时器1工作在方式2。
	MOV	IE,#080H	;开串行口中断。
	MOV	SCON,#0c0H	;串行口工作在方式3。9位。
	MOV	TH1,#0e8H	;E8;给定时器1装入初值。设置主机工作波特率为4800bps
	MOV	TL1,#0e8H	;E8;
	MOV	PCON,#080H	;

	CLR	RESET		;复位 GM8123。
	LCALL	DELAY
	LCALL	DELAY	
	LCALL	DELAY		;延时。
;	SETB	RESET		;
	lcall	delay
	LCALL	DELAY
	LCALL	DELAY
	LCALL	DELAY
	LCALL	DELAY	
	LCALL	DELAY		;延时。
;	SETB	RESET		;
	lcall	delay
	LCALL	DELAY
	LCALL	DELAY
	LCALL	DELAY
	LCALL	DELAY	
	LCALL	DELAY		;延时。
	SETB	RESET		;
	lcall	delay
	LCALL	DELAY
	LCALL	DELAY

	SETB	TR1		;启动定时器1。
	CLR	MS		;GM8123工作在写命令字方式下。
	clr	stadd0		;将 STADD1-0 设置成 00.
	clr	stadd1
	
	CLR	MS		;GM8123工作在写命令字方式下。
	LCALL	DELAY

	MOV	SBUF,#0F3H	;F8H	;命令字。子串口波特率=1200,母串口波特率=4800。11位。=====
	JNB	TI,$		;等待发送完毕。
	CLR	TI		;清除TI标志位。
	 
	clr 	tr1
	MOV	TH1,#0fdH	;E8;给定时器1装入初值。设置主机工作波特率为4800bps
	MOV	TL1,#0fdH	;E8;
	MOV	SCON,#040H
	setb 	tr1
;--------------------------------------------------------------------------------------
;	读命令字
;--------------------------------------------------------------------------------------
   ;     LCALL   DELAY           ;这个延迟很重要!!没有它,命令字读不对。
;	setb	ren		;允许CPU接收串行数据。
;	SETB	MS		;读命令字。
;	lcall	delay
;	CLR	SRADD0
;	CLR	SRADD1
;	CLR	STADD0
;	CLR	STADD1

;	JNB	RI,$		;等待接收完毕。(这几句让我折腾了一天!!!!!)
;	CLR	RI		;清除RI标志位。
;	MOV	A,SBUF		;命令字在A中。
;-------------------------------------------------------------------------------------

;	CLR	REN		;禁止CPU接收串行数据。

;	CLR	TR1		;停止定时器1。
;	MOV	SCON,#040H	;050H	;串行口工作在方式1。(10位,可变)
;	MOV	TH1,#0e9H	;E8;装入定时器1初值。将MCU主控波特率设置成4800bps.
;	MOV	TL1,#0e9H	;E8;
;	MOV	PCON,#080H
;	SETB	TR1		;启动定时器1。


 ;       clr	ms
;	lcall	delay


;	SETB	REN		;允许接收。
;	clr	ea

	setb 	ms
	setb	stadd0
	setb	stadd1
	clr	ms
	lcall	delay
	lcall	delay

;lll:
;	JNB	RI,$		;等待接收完毕。(这几句让我折腾了一天!!!!!)
;	CLR	RI		;清除RI标志位。
;	MOV	A,SBUF		;读出的数据在A中。检查A的内容可以知道读出的数据是否正确。
;
;	ljmp	lll



;-------------------------------------------------------------------------------
;	主控MCU发送/接收程序
;-------------------------------------------------------------------------------
SEND:
	
	clr	STADD0		;选择子通道1发送。 
	CLR	STADD1	
	MOV	SBUF,#00H	;子通道1发送0AAH。
	JNB	TI,$		;等待发送完成。
	CLR	TI
	
	
	SETB	STADD0		;选择子通道1发送。 
	CLR	STADD1
	MOV	SBUF,#0aaH	;子通道1发送0AAH。
	JNB	TI,$		;等待发送完成。
	CLR	TI
	
	
	clr	STADD0		;选择子通道1发送。 
	CLR	STADD1	
	MOV	SBUF,#00H	;子通道1发送0AAH。
	JNB	TI,$		;等待发送完成。
	CLR	TI
	

	SETB	STADD1
	CLR	STADD0		;将STADD1-0设置成10H,选子通道2。
	MOV	SBUF,#055H	;
	JNB	TI,$		;等待发送完成。
	CLR	TI
	
	
	clr	STADD0		;选择子通道1发送。 
	CLR	STADD1	
	MOV	SBUF,#00H	;子通道1发送0AAH。
	JNB	TI,$		;等待发送完成。
	CLR	TI
	

	SETB	STADD0		;将STADD1-0设置成11H,选子通道3。
	SETB	STADD1	
	MOV	SBUF,#33H	;
	JNB	TI,$		;等待发送完成。
	CLR	TI
	
	
;	clr	STADD0		;选择子通道1发送。 
;	CLR	STADD1	
;	nop
;	MOV	SBUF,#00H	;子通道1发送0AAH。
;	JNB	TI,$		;等待发送完成。
;	CLR	TI
	
	
	
	
	SJMP	SEND


delay:
	mov	r4,#0FFh
del:
	nop
	nop
	djnz	r4,del
	ret
;--------------------------------------------------------------------------------
;	中断处理程序
;--------------------------------------------------------------------------------
SERIAL_INT:

	reti



	PUSH	PSW
	CLR	EA		;关中断。
	JNB	RI,NOO		;要不是接收中断,转。
	MOV	A,P1		;
	ANL	A,#18H		;取出 SRADD1-0。
	JZ	COMMAND		;SRADD1-0=0,转接收命令字。
	CJNE	A,#08H,NCHANNAL	;不是子通道1,转。
	MOV	R1,SBUF		;把子通道1来的数据放到R1中。
	CLR	RI
	LJMP	NOCHN

NCHANNAL:
	CJNE	A,#10H,MCHANNAL	;不是子通道2,转。
	MOV	R2,SBUF		;把子通道1来的数据放到R2中。
	CLR	RI
	LJMP	NOCHN

MCHANNAL:
	CJNE	A,#18H,NOCHN	;也不是子通道3,说明是出错了。
	MOV	R3,SBUF		;把子通道1来的数据放到R3中。
	CLR	RI
	LJMP	NOCHN

NOCHN:
	SETB	EA		;开中断。
	POP	PSW
	RETI


NOO:
	JNB	TI,NOCHN	;既不是接收中断,也不是发送中断,是错误

	;(发送中断处理)
;	CLR	TI
	LJMP	NOCHN

COMMAND:
	MOV	R0,SBUF		;把子接收到的命令字放到R0中。
	CLR	RI
	LJMP	NOCHN



	END

						;

⌨️ 快捷键说明

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