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

📄 s19-1.asm

📁 简单的仪表控制程序,有源代码,有详细的注示,很合初学者学习
💻 ASM
字号:
;********89C51引脚定义********
	RS BIT P3.3
	R_W BIT P3.4
	E BIT P3.5
	DB0_DB7 EQU P1
;------计数器A缓存单元定义--------
	A4 EQU 40H
	A3 EQU 41H
	A2 EQU 42H
	A1 EQU 43H
	A0 EQU 44H
;-----计数器B缓存单元定义------
	B4 EQU 45H
	B3 EQU 46H
	B2 EQU 47H
	B1 EQU 48H
	B0 EQU 49H
;-----计数器C缓存单元定义------
	C4 EQU 4AH
	C3 EQU 4BH
	C2 EQU 4CH
	C1 EQU 4DH
	C0 EQU 4EH
;-----计数器D缓存单元定义-----
	D4 EQU 4FH
	D3 EQU 50H
	D2 EQU 51H
	D1 EQU 52H
	D0 EQU 53H
;------LCD显示缓存指针------
	LCD_POINT EQU 54H
;*******程序开始********
	ORG 0000H
	LJMP MAIN
	ORG 000BH
	LJMP TIMER0
;*******主程序*******
	ORG 0030H
MAIN:	MOV TMOD,#01H
	MOV TL0,#00H
	MOV TH0,#00H
	SETB EA
	SETB ET0
	SETB TR0
	MOV SP,#60H
	LCALL INITIAL
	LCALL CLN
;*****显示A:*************
AGAIN:	MOV A,#10000000B
	LCALL WRITE_COM
	MOV A,#41H
	LCALL WRITE_DATA
	MOV A,#10000001B
	LCALL WRITE_COM
	MOV A,#3AH
	LCALL WRITE_DATA
;--------- 显示B:--------------------
	MOV A,#10001001B
	LCALL WRITE_COM
	MOV A,#42H
	LCALL WRITE_DATA
	MOV A,#10001010B
	LCALL WRITE_COM
	MOV A,#3AH
	LCALL WRITE_DATA
;---------- 显示C:-------------------
	MOV A,#11000000B
	LCALL WRITE_COM
	MOV A,#43H
	LCALL WRITE_DATA
	MOV A,#11000001B
	LCALL WRITE_COM
	MOV A,#3AH
	LCALL WRITE_DATA
;---------- 显示D:---------------------
	MOV A,#11001001B
	LCALL WRITE_COM
	MOV A,#44H
	LCALL WRITE_DATA
	MOV A,#11001010B
	LCALL WRITE_COM
	MOV A,#3AH
	LCALL WRITE_DATA
;*******计数程序启动********
START:	MOV LCD_POINT,#10000010B
	MOV R0,#A4
	LCALL DISP
	MOV LCD_POINT,#10001011B
	MOV R0,#B4
	LCALL DISP
	MOV LCD_POINT,#11000010B
	MOV R0,#C4
	LCALL DISP
	MOV LCD_POINT,#11001011B
	MOV R0,#D4
	LCALL DISP
	LJMP START
;*******显示计数值********
DISP:	MOV R2,#05H
	MOV A,LCD_POINT
	LCALL WRITE_COM
LL0:	MOV A,@R0
	ADD A,#30H
	LCALL WRITE_DATA
	INC R0
	DJNZ R2,LL0
	RET
;******清除计数缓存(40H~53H)单元*******
 CLN:	MOV R1,#20
	MOV R0,#40H
	CLR A
THERE:	MOV @R0,A
	INC R0
	DJNZ R1,THERE
	RET
;*******定时器T0中断服务子程序********
TIMER0:	MOV TL0,#00H
	MOV TH0,#00H
	CLR P3.7
	SETB P3.6
	JB P3.0,NEXT1
	LCALL DEL
	JB P3.0,NEXT1
	LCALL CONV_B
NEXT1:	JB P3.1,NEXT2
	LCALL DEL
	JB P3.1, NEXT2
	LCALL CONV_D
;---------------------------------
NEXT2:	CLR P3.6
	SETB P3.7
	JB P3.0,NEXT3
	LCALL DEL
	JB P3.0,NEXT3
	LCALL CONV_A
NEXT3:	 JB P3.1,NEXT4
	LCALL DEL
	JB P3.1, NEXT4
	LCALL CONV_C
NEXT4:	RETI
;*******计数器A进行计算********
CONV_A:	PUSH ACC
	PUSH PSW
	INC A0
	MOV A,A0
	CJNE A,#0AH,DONE_A
	MOV A0,#00H
	MOV A,A1
	ADD A,#01H
	MOV A1,A
	CJNE A,#0AH,DONE_A
	MOV A1,#00H
	MOV A,A2
	ADD A,#01H
	MOV A2,A
	CJNE A,#0AH,DONE_A
	MOV A2,#00H
	MOV A,A3
	ADD A,#01H
	MOV A3,A
	CJNE A,#0AH,DONE_A
	MOV A3,#00H
	MOV A,A4
	ADD A,#01H
	MOV A4,A
	CJNE A,#0AH,DONE_A
	MOV A4,#00H
DONE_A:	POP PSW
	POP ACC
	RET
;*******计数器B进行计算********
CONV_B:	PUSH ACC
	PUSH PSW
	INC B0
	MOV A,B0
	CJNE A,#0AH,DONE_B
	MOV B0,#00H
	MOV A,B1
	ADD A,#01H
	MOV B1,A
	CJNE A,#0AH,DONE_B
	MOV B1,#00H
	MOV A,B2
	ADD A,#01H
	MOV B2,A
	CJNE A,#0AH,DONE_B
	MOV B2,#00H
	MOV A,B3
	ADD A,#01H
	MOV B3,A
	CJNE A,#0AH,DONE_B
	MOV B3,#00H
	MOV A,B4
	ADD A,#01H
	MOV B4,A
	CJNE A,#0AH,DONE_B
	MOV B4,#00H
DONE_B:	POP PSW
	POP ACC
	RET
;*******计数器C进行计算********
CONV_C:	PUSH ACC
	PUSH PSW
	INC C0
	MOV A,C0
	CJNE A,#0AH,DONE_C
	MOV C0,#00H
	MOV A,C1
	ADD A,#01H
	MOV C1,A
	CJNE A,#0AH,DONE_C
	MOV C1,#00H
	MOV A,C2
	ADD A,#01H
	MOV C2,A
	CJNE A,#0AH,DONE_C
	MOV C2,#00H
	MOV A,C3
	ADD A,#01H
	MOV C3,A
	CJNE A,#0AH,DONE_C
	MOV C3,#00H
	MOV A,C4
	ADD A,#01H
	MOV C4,A
	CJNE A,#0AH,DONE_C
	MOV C4,#00H
DONE_C:	POP PSW
	POP ACC
	RET
;*******计数器D进行计算********
CONV_D:	PUSH ACC
	PUSH PSW
	INC D0
	MOV A,D0
	CJNE A,#0AH,DONE_D
	MOV D0,#00H
	MOV A,D1
	ADD A,#01H
	MOV D1,A
	CJNE A,#0AH,DONE_D
	MOV D1,#00H
	MOV A,D2
	ADD A,#01H
	MOV D2,A
	CJNE A,#0AH,DONE_D
	MOV D2,#00H
	MOV A,D3
	ADD A,#01H
	MOV D3,A
	CJNE A,#0AH,DONE_D
	MOV D3,#00H
	MOV A,D4
	ADD A,#01H
	MOV D4,A
	CJNE A,#0AH,DONE_D
	MOV D4,#00H
DONE_D:	POP PSW
	POP ACC
	RET
;****** 启动LCM子程序******
INITIAL:MOV A,#00111000B
	LCALL WRITE_COM
	MOV A,#00001100B 
	LCALL WRITE_COM 
	MOV A,#00000110B 
	LCALL WRITE_COM 
	RET
;******查询忙碌标志信号子程序******
CHECK_BUSY: 	PUSH ACC
BUSY_LOOP:	CLR E
	SETB R_W
	CLR RS
	SETB E
	MOV A, DB0_DB7
	CLR E
	JB ACC.7,BUSY_LOOP
	POP ACC
	LCALL DEL
	RET
;****** 写指令到LCM子程序******
WRITE_COM: 	LCALL CHECK_BUSY
	CLR E
	CLR RS 
	CLR R_W
	SETB E
	MOV DB0_DB7,A
	CLR E
	RET
;****** 写数据到LCM子程序******
WRITE_DATA: 	LCALL CHECK_BUSY
	CLR E
	SETB RS 
	CLR R_W
	SETB E
	MOV  DB0_DB7,A
	CLR E
	RET
;*******清除LCM子程序*******
CLS:	MOV A,#00000001B
	LCALL WRITE_COM
	RET
;****延时子程序****
DEL:	MOV R6,#5
L1:	MOV R7,#248
	DJNZ R7,$
	DJNZ R6,L1
	RET
;********************
	END

⌨️ 快捷键说明

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