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

📄 7290jt.asm

📁 单片机用TDS-ICE仿真器的试验程序。
💻 ASM
字号:
SDA		BIT	P1.7			;I2C总线定义
SCL		BIT	P1.6
MTD		EQU	30H			;发送数据缓冲器
MRD		EQU	40H			;接收数据缓冲区

;定义器件地址,变量
ZLG7290		EQU	70H			;ZLG7290的器件地址
ACK		BIT	10H			;应答标志位
KEYON		BIT	11H			;有键按下的标志位
K1_ON		BIT	12H			;已经按下过k1的标志位
SLA		DATA	50H			;器件的从地址
SUBA		DATA	51H			;器件的子地址
NUMBYTE		DATA	52H			;读/写的字节数变量
BLINK		DATA	53H			;控制闪烁的变量
NUM		DATA	54H			;指向DISP_BUF的值的变量
DISP_BUF	EQU	60H			;显示缓冲区



		ORG	8000H
		AJMP	MAIN
		ORG	8003H
		AJMP	KEYINT0
		ORG	8100H
MAIN:		MOV	R4,#0F0H		;延时,等待芯片复位
		DJNZ	R4,$
		MOV	BLINK,#01H		;给闪烁控制变量赋初值
		MOV	NUM,#00H		;给要指向的变量赋初值
		CLR	KEYON			;有键按下的标志位清零
		CLR	K1_ON			;按下过k1的标志位清零
		SETB	IT0			;设置外部中断为边沿触发方式
		SETB	EX0			;开放外部中断0
		SETB	EA			;开放总中断


;给显示缓冲区赋值0~8
		MOV	R0,#DISP_BUF		;取显示缓冲区地址
		MOV	A,#00H			;赋初值
		MOV	R1,#08H			;循环8次
WRDISP_BUF:	MOV	@R0,A			;将值送入显示缓冲区
		INC	R0			;地址加1
		INC	A			;数值加1
		DJNZ	R1,WRDISP_BUF		;循环8次了吗?


;在LED上显示数字0~8,
;入口参数:R6:复合命令的第一个字节,R7:复合命令的第二个字节。R2:要显示的LED数

		MOV	R6,#60H			;复合命令第一个字节的初值,是按位下载数据并译码的指令代码
		MOV	R7,#00H			;复合命令的第二个字节,是要显示的数值
		MOV	R2,#08H			;循环8次,即显示8位
LOOP1:		MOV	MTD,R6			;将复合命令的第一个字节送发送数据缓冲区
		MOV	MTD+1,R7		;将复合命令的第二个字节送发送数据缓冲区
		INC	R6			;显示下一个位
		INC	R7			;数值加1
		LCALL	SENDCMD			;调用发送命令函数
		ACALL	DELAY			;延迟
		DJNZ	R2,LOOP1		;循环8次了吗?


;键盘处理程序
;K1键:闪烁,表示可以修改闪烁位的值,每按一次K1,闪烁向左移动一位.
;K2键:增加,按一次显示值加1
;K3键:减少,按一次显示值减1
;K4键:确定,停止所有闪烁

KEYHANDLE:	SETB	EA
		JNB	KEYON,KEYHANDLE		;判断KEYON(有键按下)标志是否有被置位,没有则在此处循环	
		CLR	EA
		CLR	KEYON			;如果标志被置位,KEYON标志清零
		LCALL	SCANKEY			;调用键盘扫描函数,读出键值
		MOV	A,MRD			;将接收数据缓冲区的内容送A
		CJNE	A,#01H,KEY2_HANDLE	;如果按下了K1键,即键值为01,就执行KEY1_HANDLE程序,如果不是跳转到KEY2_HANDLE
KEY1_HANDLE:	SETB	K1_ON			;置位K1_ON(按下K1)标志位
		MOV	MTD,#70H		;发送闪烁命令,复合命令的第一个字节是07H
		MOV	MTD+1,BLINK		;复合命令的第二字节,指出要闪烁的位
		MOV	A,BLINK			;将要闪烁的位左移一位,在下一次按下K1时,闪烁会左移一位
		RL	A
		MOV	BLINK,A
		INC	NUM			;现在显示第NUM个数
		MOV	A,NUM
		CJNE	A,#09H,NEXT1		;如果NUM大于8,要将它重新设置为0
		MOV	NUM,#01H
NEXT1:		LCALL	SENDCMD			;调用发送命令函数
		AJMP	KEYHANDLE		;跳转到KEYHANDLE

;K2的处理程序
KEY2_HANDLE:	CJNE	A,#02H,KEY3_HANDLE	;如果按下的键是K2
		JNB	K1_ON,KEYHANDLE		;如果已经按下了K1,则可以继续执行
		MOV	A,NUM			
		DEC	A
		ORL	A,#60H			;复合命令第一字节,表示要下载数据的DpRam(0~7)
		MOV	MTD,A			;送发送数据缓冲区
		MOV	R0,A			;指向显示缓冲区
		INC	@R0			;所指向的值加1,即显示值加1
		CJNE	@R0,#1FH,NEXT2		;如果得到的值大于1FH(超过可以显示的值),要将它重新设置为00H
		MOV	@R0,#00H
NEXT2:		MOV	MTD+1,@R0		;作为复合命令的第二字节发送到发送缓冲区
		ORL	MTD+1,#40H		;该位闪烁
		LCALL	SENDCMD			;调用发送命令函数
		AJMP	KEYHANDLE		;跳转到KEYHANDLE

;K3的处理程序
KEY3_HANDLE:	CJNE	A,#03H,KEY4_HANDLE
		JNB	K1_ON,KEYHANDLE
		MOV	A,NUM
		DEC	A
		ORL	A,#60H
		MOV	MTD,A
		MOV	R0,A
		DEC	@R0			;所指向的值加1,即显示值加1
		CJNE	@R0,#0FFH,NEXT3		;如果得到的值小于0(0减1为FFH),要将它重新设置为1EH
		MOV	@R0,#1EH
NEXT3:		MOV	MTD+1,@R0		
		ORL	MTD+1,#40H
		LCALL	SENDCMD
		AJMP	KEYHANDLE

;K4的处理程序
KEY4_HANDLE:	CJNE	A,#04H,OTHERKEY_HANDLE	
		MOV	MTD,#70H		;发送所有位不闪烁命令
		MOV	MTD+1,#00H
		LCALL	SENDCMD
		MOV	BLINK,#01H		;将控制闪烁的变量设置为初值
		MOV	NUM,#00H		;将指向显示缓冲区的变量设置为初值
		CLR	K1_ON			;清除K1_ON标志
		AJMP	KEYHANDLE		

;其他键的处理程序
OTHERKEY_HANDLE:				;如果按下的是K5~K8,跳转到KEYHANDLE,无操作
		AJMP	KEYHANDLE

;键盘中断程序

KEYINT0:	PUSH	PSW			;保护现场
		PUSH	ACC
		CLR	EX0			;禁止中断
		SETB	KEYON			;置位KEYON标志
		SETB	EX0			;开放中断
		POP	ACC			;出栈
		POP	PSW		
		RETI				;中断返回

;延时子程序
DELAY:		MOV	R5,#10H
DELAY0:		MOV	R4,#0F0H
DELAY1:		DJNZ	R4,DELAY1
		DJNZ	R5,DELAY0
		RET

		$INCLUDE(ZLG7290.INC)		;包含ZLG7290软件包
		$INCLUDE(VI2C_ASM.INC)		;包含VIIC软件包
		END

		

⌨️ 快捷键说明

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