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

📄 duartm.asm

📁 周立功开发板源代码,里面包含了各种关于周立功dp51开发板的源代码
💻 ASM
字号:
;******************************************************************************
;		DP-51S单片机仿真实验板上多机通讯程序
;    本程序是主机部分,主要负责与指定的从机进行通讯,读取从机上的按键,并发送
;显示数据到从机。
;
;File:  DUARTM.ASM
;Date:  2003.03.29
;******************************************************************************
LED_ADDR	EQU	2000H		;定义LED数码管的数据段地址
;当前与主机通讯的从机地址
NOW_SLA		DATA	30H
SLA_NO		DATA	31H	;从机地址序号(0-7)

;定义串行通讯发送数据缓冲区35H--3FH
SENDD_BUF	EQU	35H
;定义串行通讯数据接收缓冲区40H---4FH
RCVD_BUF	EQU	40H
;接收新的数据帧标志,为1是表示接收到新回应帧
RCV_NEW		BIT	10H

RCV_ERR		BIT	13H	;接收出错标志,在显示输出时使用


;显示缓冲区50H---54H
DISP_BUF	EQU	50H
;显示控制位定义

DISPB0		BIT	P1.6	;显示位控制
DISPB1		BIT	P1.0
DISPB2		BIT	P1.1
DISPB3		BIT	P1.2
DISPB4		BIT	P1.3
DISPB5		BIT	P1.4
DISPB6		BIT	P1.5
KDKEY		BIT    	P1.7

TIME_COUNT	EQU	32H	;闪动显示的软件定时器
DISP_CPL	BIT	11H	;闪动显示的取反标志,为1时将屏幕显示取反
DISP_STA	BIT	12H	;当前显示状态,为1时表示是显示数据,为0时显示灭


;定时器0的初值,设置为20mS定时,DP-51上的晶振为11.0592M。
TH0_DAT		EQU	0B8H
TL0_DAT		EQU	61H



;=========================================================================
	ORG	0000H
	AJMP	MAIN

	ORG	000BH
	AJMP	T0_INT		;定时器0中断入口

	ORG	0023H
	AJMP	SERIAL_INT	;串口中断入口

	ORG	0100H
MAIN:
	MOV	SP,#60H	
	MOV	R0,#SLA_NO
	MOV	@R0,#0H
	MOV	SLA_NO,#0H
	MOV	R7,#10
MAIN_L1:
	MOV	R6,#0
	DJNZ	R6,$
	DJNZ	R7,MAIN_L1	;延时,等待从机上电复位完成

SERIAL_INI:
	MOV	TMOD,#21H	;设置定时器1工作模式,波特率发生器;设置定时器0为工作模式1
	MOV	TH1,#0FDH	;设置波特率为9600b
	SETB	TR1
	MOV	PCON,#00H
        MOV	SCON,#0D0H	;设置串口位方式3,允许串口接收。SM2=0,接收所有数据
	SETB	ES		;打开串口中断允许
	SETB	PS		;设置串口中断为高优先级

DISP_INI:
	MOV	TH0,#TH0_DAT	;设置定时器0,用于显示闪动定时
	MOV	TL0,#TL0_DAT
	SETB	ET0
	SETB	TR0
	SETB	EA
	ACALL	SYS_INI		;进行系统的初化        

MAIN_L2:			;系统主循环
        ACALL	DISP		;扫描显示
	ACALL	DISP

	MOV	R4,#10
MAIN_L3:
	ACALL	SCAN_KEY	;扫描键盘
	CJNE	A,#0FFH,MAIN_KEY	
	DJNZ	R4,MAIN_L3	;多次扫描,以提高按键的灵敏度
MAIN_SEND:			;若没有按键,则正常通讯及显示
	JNB	DISP_CPL,MAIN_L2
	CLR	DISP_CPL
	JBC	DISP_STA,MAIN_SDL1
	SETB	DISP_STA
	MOV	DISP_BUF,#0FFH	;4位数码管显示为灭
	MOV	DISP_BUF+1,#0FFH	;4位数码管显示为灭
	MOV	DISP_BUF+2,#0FFH
	MOV	DISP_BUF+3,#0FFH
	MOV	DISP_BUF+4,#0FFH
	MOV	DISP_BUF+5,#0FFH	;4位数码管显示为灭
	MOV	DISP_BUF+6,#0FFH	;4位数码管显示为灭
	SJMP	MAIN_SDL3
MAIN_SDL1:
	JNB	RCV_ERR,MAIN_SDL2
	MOV	DPTR,#FIND_BIT
	MOV	A,SLA_NO
	MOVC	A,@A+DPTR
	MOV	DISP_BUF,A
	MOV	DISP_BUF+1,#86H		;4位数码管显示"ErrX"
	MOV	DISP_BUF+2,#0AFH
	MOV	DISP_BUF+3,#0AFH
	MOV	A,SLA_NO
	INC	A
	MOV	DPTR,#DISP_TAB
	MOVC	A,@A+DPTR
	MOV	DISP_BUF+4,A	
	SJMP	MAIN_SDL3
MAIN_SDL2:
	MOV	DPTR,#FIND_BIT
	MOV	A,SLA_NO
	MOVC	A,@A+DPTR
	MOV	DISP_BUF,A
	MOV	DISP_BUF+1,#92H
	MOV	DISP_BUF+2,#0C7H
	MOV	DISP_BUF+3,#88H
	MOV	A,SLA_NO
	INC	A
	MOV	DPTR,#DISP_TAB
	MOVC	A,@A+DPTR
	MOV	DISP_BUF+4,A
MAIN_SDL3:
	ACALL	SEND_DISP
	SJMP	MAIN_L2

MAIN_KEY:				;若有按键,则进行从机的切换
	CJNE	A,SLA_NO,MAIN_KEYL1	;判断是否要切换从机
	AJMP	MAIN_L2
MAIN_KEYL1:
	MOV	SLA_NO,A		;设置通讯从机
	MOV	SENDD_BUF,#12H
	MOV	SENDD_BUF+1,#30H
	MOV	SENDD_BUF+2,#06H
	MOV	SENDD_BUF+3,#00H	;不需要从机回应
	MOV	SENDD_BUF+4,#0BFH	;设置显示"----"
	MOV	SENDD_BUF+5,#0BFH
	MOV	SENDD_BUF+6,#0BFH
	MOV	SENDD_BUF+7,#0BFH
	MOV	SENDD_BUF+8,#24H	
	MOV	R7,#9
	ACALL	SEND_SLADAT		;发送数据
	AJMP	MAIN_L2

; 0-F的显示字模 (共阳数码管),0FFH为显示' '
DISP_TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
	  DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH



;*************************************************************
;名称:SYS_INI
;功能:系统初始化,包括设置从机号SLA_NO为0,并向所有从机发送初
;      化显示数据,设置主机显示内容。
;入口参数:无
;出口参数:无
;使用资源:SEND_SLADAT子程序所用的资源
;*************************************************************
SYS_INI:
	MOV	SLA_NO,#0
	MOV	TIME_COUNT,#00H
	CLR	RCV_NEW	
	CLR	RCV_ERR

	;向从机1-4发送初化显示数据,广播地址为0C0H
	MOV	SENDD_BUF,#12H
	MOV	SENDD_BUF+1,#30H
	MOV	SENDD_BUF+2,#06H
	MOV	SENDD_BUF+3,#00H	;不需要从机回应
	MOV	SENDD_BUF+4,#0BFH	;设置显示"----"
	MOV	SENDD_BUF+5,#0BFH
	MOV	SENDD_BUF+6,#0BFH
	MOV	SENDD_BUF+7,#0BFH
	MOV	SENDD_BUF+8,#24H	
	MOV	NOW_SLA,#0C0H
	MOV	R7,#9
	ACALL	SEND_SLADAT		;发送数据
	;向从机5-8发送初化显示数据,广播地址为0D0H
	MOV	NOW_SLA,#0D0H
	MOV	R7,#9
	ACALL	SEND_SLADAT
	RET


;*************************************************************
;名称:SEND_DISP
;功能:向从机发送显示命令,数据为本机显示缓冲区的数据。
;入口参数:DISP_BUF  发送的数据的缓冲区
;	   SLA_NO    从机号     
;出口参数:NOW_SLA   从机地址
;占用资源

⌨️ 快捷键说明

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