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

📄 qq.asm

📁 基于at89c2051的方波发生器
💻 ASM
字号:
	ORG	0000H
	SJMP	MAIN
	ORG	000BH
	LJMP	OUT
	ORG	0030H
	XYZ	EQU	30H	;时间常数地址
	;************************************************
	;主程序
        ;名称:MAIN
        ;作者:叶辽原
	;************************************************
MAIN:	MOV	SP,#60H	;设置SP指针
	MOV	R0,#50H	;显示缓冲区首地址时50H
ML0:	CLR	A
	MOV	@R0,A	;显示缓冲区清零
	INC	R0
	CJNE	R0,#55H,ML0
	MOV	R0,#40H	;键值存放首地址
ML1:	CLR	A
	MOV	@R0,A	;键值存放区清零
	INC	R0
	CJNE	R0,#44H,ML1
	;MOV	P3,#01H	;初始化P3口
	MOV	A,#03H	;数码管显示0
	MOV	B,A
	SETB	P3.2
	SETB	P1.7
	SETB	P3.3
	CLR	P3.1
	MOV	R3,#3
ML2:	CLR	C
	MOV	A,B
	MOV	R2,#8
ML3:	RRC	A
	MOV	P3.0,C
	NOP
	NOP
	SETB	P3.1
	NOP
	NOP
	CLR	P3.1
	DJNZ	R2,ML3
	DJNZ	R3,ML2
	CLR	P3.1
	NOP
	NOP
	MOV	IE	,#10000010B
	MOV	TMOD,#01H
	MOV	TL0,#35H
	MOV	TH0,#0F8H
	SETB	TR0
	MOV	XYZ,#0FFH
ML4:	LCALL	KEY	;调用键扫描子程序
	;//	LCALL	OUT	;调用信号输出子程序
	SJMP	ML4
	;************************************************
	;键扫描程序
        ;名称:KEY
        ;作者:叶辽原
	;************************************************
KEY:	;//	MOV	R2,#5	;按键扫描次数
	MOV	A,#2
KEY1:	JNB	P1.0,NET1	;+1键按下,转处理程序
	JNB	P1.1,NET2
	JNB	P1.2,NET33
	JNB	P1.3,NET44
	;//	DJNZ	R2,KEY1	;连续扫描5次按键
KEY2:	RET
NET33:	AJMP	NET3
NET44:	AJMP	NET4
	;************************************************
	;+1处理子程序
        ;名称:NET1
        ;作者:叶辽原
	;************************************************
NET1:	DEC	A
	JZ	NET5	;延时消除按键抖动
	LCALL	DELAY	;调用延时程序等待1MS
	SJMP	KEY1
NET5:	JNB	P1.0,NET5
	MOV	R0,#40H	;键值首地址给指针(低位)
	CLR	C	;进位位复位
	MOV	A,@R0	;取键值
	ADD	A,#1	;键值加1
	DA	A	;转换成2位十进制BCD码
	MOV	@R0,A	;存回去
	JC	NET11	;有进位位,转进位处理程序
NET10:	LCALL	CHAIZI	;调用拆字程序

	LCALL	DISPLAY	;调用显示程序

        MOV	R0,#52H
	CJNE	@R0,#2,NET111
	DEC	R0
	CJNE	@R0,#5,NET112
	DEC	R0
	CJNE	@R0,#5,NET113
	AJMP	MAIN
NET111:	JC	NET13
	AJMP	MAIN
NET112:	JC	NET13
	AJMP	MAIN
NET113:	JC	NET13
	AJMP	MAIN

        LCALL	NET10TO16
NET13:	SJMP	KEY2
NET11:	LCALL	BWJCLCX	;百位加处理程序
	SJMP	NET10
	;************************************************
	;+10处理子程序
        ;名称:NET2
        ;作者:叶辽原
	;************************************************
NET2:	DEC	A
	JZ	NET6	;延时消除按键抖动
	LCALL	DELAY	;调用延时程序等待1MS
	SJMP	KEY1
NET6:	JNB	P1.1,NET6
	MOV	R0,#40H	;键值首地址给指针(个位和十位)
	CLR	C	;复位进位位
	MOV	A,@R0	;取十位和个位
	ADD	A,#10	;键值加10
	DA	A	;转换成2位十进制BCD码
	MOV	@R0,A
	JC	NET21	;有进位位,转进位处理程序
NET20:	LCALL	CHAIZI	;调用拆字程序
	LCALL	DISPLAY	;调用显示程序
	MOV	R0,#52H
	CJNE	@R0,#2,NET121
	DEC	R0
	CJNE	@R0,#5,NET122
	DEC	R0
	CJNE	@R0,#5,NET123
	AJMP	MAIN
NET121:	JC	NET23
	AJMP	MAIN
NET122:	JC	NET23
	AJMP	MAIN
NET123:	JC	NET23
	AJMP	MAIN
	LCALL	NET10TO16
NET23:	SJMP	KEY2
NET21:	LCALL	BWJCLCX	;百位加处理程序
	SJMP	NET20
	;************************************************
	;-1处理子程序
        ;名称:NET3
        ;作者:叶辽原
	;************************************************
NET3:	DEC	A
	JZ	NET7	;延时消除按键抖动
	LCALL	DELAY	;调用延时程序等待1MS
	AJMP	KEY1
NET7:	JNB	P1.2,NET7
	LCALL	NET10TO16
	MOV	A,XYZ
	CJNE	A,#0,NET71
	AJMP	MAIN
NET71:	CJNE	A,#0FFH,NET72
	LJMP	MAIN
NET72:	JC	NET73
	LJMP	MAIN
NET73:	CLR	C
	SUBB	A,#1
	MOV	XYZ,A
	MOV	31H,A
	LCALL	NET16TO10
	;MOV	R0,#40H	;键值首地址给指针
	;CLR	C
	;MOV	A,@R0	;取出十位和个位
	;SUBB	A,#1	;键值减1
	;DA	A	;转换成2位十进制BCD码
	;MOV	@R0,A
	;JC	NET31	;有借位
;NET30:	LCALL	CHAIZI	;调用拆字程序
	LCALL	DISPLAY	;调用显示程序
        MOV     R0,#50H
        MOV     R1,#40H
        MOV     A,@R0
        INC     R0
        MOV     @R1,A
        MOV     A,@R0
        SWAP    A
        ORL     A,@R1
        MOV     @R1,A
        INC     R0
        INC     R1
        MOV     A,@R0
        MOV     @R1,A
	;LCALL	NET10TO16
	AJMP	KEY2
;NET31:	LCALL	BWJICLCX	;调用百位减处理程序
	;SJMP	NET30
	;************************************************
	;-10处理子程序
        ;名称:NET4
        ;作者:叶辽原
	;************************************************
NET4:	DEC	A
	JZ	NET8	;延时消除按键抖动
	LCALL	DELAY	;调用延时程序等待1MS
	AJMP	KEY1
NET8:	JNB	P1.3,NET8
	LCALL	NET10TO16
	MOV	A,XYZ
	CJNE	A,#0,NET81
NET80:	AJMP	MAIN
NET81:	CJNE	A,#0FFH,NET84
	SJMP	NET80
NET84:	JC	NET85
	SJMP	NET80
NET85:	CLR	C
	CJNE	A,#10,NET83
NET82:	CLR	C
	SUBB	A,#10
	MOV	XYZ,A
	MOV	31H,A
	LCALL	NET16TO10
	;MOV	R0,#40H	;键值首地址给指针
	;CLR	C
	;MOV	A,@R0	;取出十位和个位
	;SUBB	A,#10	;键值减10
	;DA	A	;转换成2位十进制BCD码
	;MOV	@R0,A
	;JC	NET41	;有借位
;NET40:	LCALL	CHAIZI	;调用拆字程序
	LCALL	DISPLAY	;调用显示程序
	;LCALL	NET10TO16
        
        MOV     R0,#50H
        MOV     R1,#40H
        MOV     A,@R0
        INC     R0
        MOV     @R1,A
        MOV     A,@R0
        SWAP    A
        ORL     A,@R1
        MOV     @R1,A
        INC     R0
        INC     R1
        MOV     A,@R0
        MOV     @R1,A
        
	LJMP	KEY2
NET83:	JC	NET80
	SJMP	NET82
;NET41:	LCALL	BWJICLCX	;调用百位减处理程序
	;SJMP	NET40
	;************************************************
	;百位加子程序
        ;名称:BWJCLCX
        ;作者:叶辽原
	;************************************************
BWJCLCX:	INC	R0
	INC	@R0	;百位加1
	RET
	;************************************************
	;百位减子程序
	;************************************************
;BWJICLCX:	INC	R0
	;DEC	@R0	;百位减1
	;RET
	;************************************************
	;拆字子程序
	;个位在50H,十位在51H,百位在52H
        ;名称:CHAIZI
        ;作者:叶辽原
	;************************************************
CHAIZI:	MOV	R1,#40H	;键值首地址
	MOV	R0,#50H	;显示缓冲区首地址(个位数)
	MOV	A,@R1	;取出十位和个位
	ANL	A,#0FH	;取个位数据
	MOV	@R0,A	;个位数据存显示缓冲区
	MOV	A,@R1
	SWAP	A	;十位和个位交换
	ANL	A,#0FH	;取十位
	INC	R0
	MOV	@R0,A	;十位数据存显示缓冲区
	INC	R1
	INC	R0
	MOV	A,@R1
	MOV	@R0,A	;百位数据存显示缓冲区
	RET
	;************************************************
	;显示子程序
        ;名称:DISPLAY
        ;作者:叶辽原
	;************************************************
DISPLAY:	SETB	P3.2	;打开164
	SETB	P1.7
	SETB	P3.3
	MOV	R0,#50H	;设置显示缓冲区首地址指针
	MOV	R2,#3	;设置显示位数
	MOV	DPTR,#TAB
DISPLAY0:	MOV	A,@R0	;取出要显示的个位数据
	MOVC	A,@A+DPTR	;取要显示数据的段码
	CLR	C
	CLR	P3.1
	MOV	R3,#8
DISPLAY1:	RRC	A
	MOV	P3.0,C
	SETB	P3.1
	NOP
	NOP
	CLR	P3.1
	DJNZ	R3,DISPLAY1
	INC	R0
	DJNZ	R2,DISPLAY0
	CLR	P3.1
	RET
TAB:	DB	03H,09FH,025H,0DH,099H	;共阳数码管字型码(低电平点亮)
	DB	049H,41H,1FH,01H,09H
	;************************************************
	;信号发生程序
        ;名称:OUT
        ;作者:叶辽原
	;************************************************
OUT:	;/	SETB	RS0
	;MOV	31H,XYZ
	MOV	TL0,#35H
	MOV	TH0,#0F8H
	DJNZ	31H,OUT1
	CPL	P3.7
	MOV	31H,XYZ
OUT1:	RETI
	;************************************************
	;延时1MS子程序
        ;名称:DELAY
        ;作者:叶辽原
	;************************************************
DELAY:	MOV	R2,#20
DELAY2:	MOV	R3,#200
DELM1:	DJNZ	R3,DELM1
	DJNZ	R2,DELAY2
DELAYX:	RET
        ;************************************************
        ;十进制转十六进制子程序
        ;名称:NET10TO16
        ;作者:叶辽原
        ;************************************************
NET10TO16:	MOV	R0,#52H
	MOV	R1,#XYZ
	MOV	@R1,#0
	MOV	A,@R0
	MOV	B,#100
	MUL	AB
	MOV	@R1,A
	DEC	R0
	MOV	A,@R0
	MOV	B,#10
	MUL	AB
	ADD	A,@R1
	DEC	R0
	ADD	A,@R0
	MOV	@R1,A
	MOV	31H,A
	MOV	XYZ,A
	RET
        ;***********************************************
        ;十六进制转十进制子程序
        ;名称:NET16TO10
        ;作者:叶辽原
        ;***********************************************
NET16TO10:	MOV	R0,#52H
	MOV	B,#100
	DIV	AB
	MOV	@R0,A
	MOV	A,#10
	XCH	A,B
	DIV	AB
	DEC	R0
	MOV	@R0,A
	DEC	R0
	MOV	@R0,B
	RET
	END

⌨️ 快捷键说明

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