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

📄 speed stacks.asm

📁 握手起跑器:当用户双手同时握住产品时,起跑器开始工作,LCD显示.MCU:NTK
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;*****************************************************;	LIST P=SH66P13	ROMSIZE=4096;*****************************************************;		SYSTEM REGISTER  $00-$2FH   BANK0;*****************************************************	IE		EQU	00H	;中断使能标志	IRQ		EQU	01H	;中断请求标志		TM0		EQU	02H	;Timer0 模式寄存器	BTM		EQU	03H	;BASE TIMER					TL0		EQU	04H	;Timer0 数据寄存器低四位	TH0		EQU	05H	;Timer0 数据寄存器高四位						;06-07Hreserved		PORTA		EQU	08H	;Port A 数据寄存器	PORTB		EQU	09H	;Port B		PORTC		EQU	0AH	;bounding option			PACR		EQU	0BH	PBCR		EQU	0CH		LPD		EQU	0DH		TBR		EQU	0EH	;查表寄存器	INX		EQU	0FH	;索引寄存器	DPL		EQU	10H	;INX 数据指针低四位	DPM		EQU	11H	;INX 数据指针中三位	DPH		EQU	12H	;INX 数据指针高三位					;$13-$14 RESERVED	PULL		EQU	13H	;PORTD MODE register	OSC_CTL		EQU	14H	;OSCillator type selected		LCD_CTL		EQU	15H	;LCD ON/OFF CONTRL	LCD_SEGOUT	EQU	16H	;LCD SEGMENT CONTRL		OCTL		EQU	17H	;CHANNCLE 1 LOW NIBBLE	OCTH		EQU	18H	;CHANNCLE 1 HIGH NIBBLE,BIT3:OCT:octave shift selected control	PSG_CTL		EQU	1EH	;(bit1-0)PSG MODE CONTRL&(bit3-2)clock source selected	PSG_CHEN	EQU	1DH					;PSG:$17-$1E 										;1FH --Reserved;*****************************************************;	SYSTEM REGISTER  $20-$1fFH  ($20-$7f::bank0);*****************************************************	AcBak		EQU	20H	Temp		EQU	21H		MsReg0		EQU	22H	;毫秒寄存器L	MsReg1		EQU	23H	;M	MsReg2		EQU	24H	;H	MsReg3		EQU	25H	;HH		SecRegL		EQU	26H	;秒		SecRegH		EQU	27H			MinRegL		EQU	28H	;分钟		MinRegH		EQU	29H				TimeFlg		EQU	30H	;ms30_flg=bit0					;Min10_flg=bit1					;Min5_flg=bit2(wait reset,wait touch)					;		LedFFlg		EQU	31H	;led flash flg=bit0					;two touching input hold 1s flg=bit1						SysRunFlg 	EQU	32H	;run_flg=bit0					;disp_flg=bit1					;keyenb_flg=bit2					;touch_procflg=bit3											TimKRegL 	EQU	33H	TimKRegH 	EQU	34H		TimSRegH 	EQU	35H	TimSRegL 	EQU	36H		Key1Temp 	EQU	37H	Key2Temp 	EQU	38H		Key3Temp 	EQU	39H	Key4Temp 	EQU	3AH		LastKeyL	EQU	3BH	LastKeyH	EQU	3CH		WaitTFlg	EQU	3DH						;wait reset flg=bit0					;wai touch input flg=bit1					;保持1S计时标志=bit2						KeyTime		EQU	3EH						KeyTemp		EQU	3FH		Key_flg		EQU	40H	;bit0=reset_keyflg					;bit1=touch_keyflg									;已触摸标志=bit2(计时开始标志)					;已触摸标志=bit3	Stop_flg	EQU	41H						Sec_flg		EQU	42H	;bit0=sec_flg					;bit1=TEST_FLG					;BIT3=SYS_FLG					Tc0Reg		EQU	43H					KeyPressL	EQU	44H	KeyPressH	EQU	45H		FlashReg	EQU	46H		JsReg1		EQU	47H	JsReg2		EQU	48H	JsReg3		EQU	49H	JsReg4		EQU	4AH	JsReg5		EQU	4BH		DispRegL	EQU	4CH	DispRegH	EQU	4DH		SysTime1	EQU	4eH	SysTime2	EQU	4fH			SysTime3	EQU	50H			DelayReg1	EQU	51H	DelayReg2	EQU	52H			XmJsFlg		EQU	53H	XmJsRegL	EQU	54H	XmJsRegM	EQU	55H		XmJsRegH	EQU	56H		AddReg		EQU	57H	touchreg	EQU	58H		TestFlg		EQU	59H	QickReg		EQU	5aH	testRegL	EQU	5BH	testRegM	EQU	5CH	testRegH	EQU	5dH	dispflg		EQU	5EH;	tflg		EQU	5fH;*****************************************************;	SYSTEM REGISTER  $300-$321H	BANK6(LCD);*****************************************************	Seg1		EQU	00H	Seg2		EQU	01H			Seg3		EQU	02H			Seg4		EQU	03H			Seg5		EQU	04H			Seg6		EQU	05H			Seg7		EQU	06H			Seg8		EQU	07H	;SEG8 寄存器			Seg9		EQU	08H	;SEG9 寄存器		Seg10		EQU	09H	;SEG10 寄存器						;*****************************************************;	 	VECTORS;*****************************************************	ORG	0000H	jmp	Reset			;Jump to RESET service routine	jmp	INT0_Isp		;jump to INT0 service routine		JMP	Timer0_Isp		;timer0 interrupt service routine	nop				;jump to base time service routine	nop				;JMP TO INT1 service routine	rtni			;*****************************************************;		INITIALIZTION;*****************************************************Reset:      	nop	nop	nop	ldi	IRQ,00H			;清中断请求	ldi	IE,00H			;关中断	nop				;上电稳定	nop	nop	nop	;*****************************************************;*****************************************************POWER_RESET:				;clear data ram	ldi	DPL,00H			;20H--1FFH	ldi	DPM,02H			;0-511(512)	ldi	DPH,00H			POWER_RESET_1:		ldi	INX,00H	adim	DPL,01H	ldi	TBR,00H	adcm	DPM,00H		ba3 	POWER_RESET_2	jmp 	POWER_RESET_3POWER_RESET_2:	adim 	DPH,01H	andim	DPM,07H			;clear bit3POWER_RESET_3:	sbi 	DPH,04H	bnz 	POWER_RESET_1;	SBI 	DPM,04H;	BNZ 	POWER_RESET_1CLR_LCD:	ldi	DPL,00H			;clear LCD ram	ldi	DPM,00H	ldi	DPH,06HCLR_LCD_1:		ldi	INX,00H	adim	DPL,01HCLR_LCD_2:	sbi	DPL,0aH			;10 seg	bnz	CLR_LCD_1			;timer 	ldi	TM0,1110B			ldi	TL0,07H	ldi	TH0,0DH					ldi	OSC_CTL,0000b			;PSG 	ldi	PSG_CTL,0010b			ldi	OCTL,0001b			ldi	OCTH,1000b			ldi	PSG_CHEN,0101B			;LCD 	ldi	LCD_CTL,0001B			ldi	LCD_SEGOUT,1000b			;I/O	ldi	PACR,1110B		ldi	PORTA,1101B						ldi	PBCR,0100B			ldi	PORTB,0100B	ldi	PULL,0010b		;bit3=close pull up,PA:bit1=PSG outpuT	;*****************************************************;		MAIN;*****************************************************	ldi	IRQ,0			;清中断请求	ldi	IE,0100B		;开中断	call	FnTestmode		;进入测试模式	lda	TestFlg,0	ba0	qickcheck		jmp	sys_stopqickcheck:				call	FnQickcheck		;快检	call	TestLcdproc	call	waitouchproc			lda	TestFlg,0	ba0	qickcheck		jmp	sys_stop	main_loop_part:		call	FnTimeFP			call	FnKeyProc			call	FnTouchProc					call	FnLcdDispPrc			call	FnJustProc		;-------------------------------------------------	lda	XmJsFlg,0	ba1	sys_stop		halt	nop	nop 	nop	jmp	main_loop_part	sys_stop:	andim	XmJsFlg,0000b				;关机进入:stop					ldi	PORTB,0100B		;bit2=1关	ldi	KeyTime,0		ldi	IRQ,0000B		;清外部中断请求	ldi	IE,1100b		;打开外部中断	stop	nop	nop	nop	;I/O	ldi	PACR,1110B		;bit3:green,bit2:red led output;	ldi	PORTA,1101B		;bit1=PSG OUTPUT				ldi	PBCR,0100B		;key input,BIT2=OUTPUT	ldi	PORTB,0000B		;bit2=0开	ldi	PULL,0010b		;bit3=close pull up,PA:bit1=PSG outpuT;	lda	PORTA,0;	sta	Temp,0;	andim	Temp,0001b;	baz	$+2;	jmp	sys_stop	;	lda	PORTA,0;	sta	Temp,0;	andim	Temp,0001b;	baz	$+2			;有键;	jmp	sys_stopssys_on:	adim	KeyTime,1	orim	SysRunFlg,0111b			ldi	LedFFlg,0000b	ldi	Stop_flg,0000b	ldi	Key_flg,0000b	ldi	JsReg1,0	ldi	JsReg2,0	ldi	JsReg3,0			ldi	JsReg4,0	ldi	JsReg5,0		ldi	PBCR,0100B			ldi	PORTB,0000B			orim	PORTA,1100b	lda	MsReg1,0	or	MsReg2,0	baz	$+3wait_reset:		orim	WaitTFlg,0001b		;等待复位标志	jmp	main_loop_part	lda	SecRegL,0	baz	$+2	jmp	wait_reset	andim	WaitTFlg,1110b		;不用等待复位	orim	WaitTFlg,0010b		;等待TOUCH	orim	Key_flg,0001b			jmp	main_loop_part	;*****************************************************	DELAY10MS:				;延时10MS	ldi	DelayReg1,03HjDelayReg1:		ldi	DelayReg2,08HjDelayReg2:		sbim	DelayReg2,1	baz	$+2	jmp	jDelayReg2	sbim	DelayReg1,1	baz	DELAY10MSend	jmp	jDelayReg1DELAY10MSend:	rtni;*****************************************************	;		test mode;*****************************************************		FnTestmode:	lda	PORTB,0	ba3	FnTestmodend	call	DELAY10MS;	call	DELAY10MS	lda	PORTB,0	ba3	FnTestmodend	orim	TestFlg,0001bFnTestmodend:	rtni;*****************************************************			FnQickcheck:	lda	TestFlg,0	ba0	$+2	jmp	FnQickcheckend		lda	TestFlg,0	ba1	FnQickcheckend				lda	Sec_flg,0	ba1	$+2	jmp	FnQickcheckend		andim	Sec_flg,1101b		orim	dispflg,0001b	adim	QickReg,1	sbi	QickReg,1	baz	xian0	sbi	QickReg,2	baz	xian1	sbi	QickReg,3	baz	xian2	sbi	QickReg,4	baz	xian3	sbi	QickReg,5	baz	xian4	sbi	QickReg,6	baz	xian5	sbi	QickReg,7	baz	xian6	sbi	QickReg,8	baz	xian7	sbi	QickReg,9	baz	xian8	sbi	QickReg,0ah	baz	xian9	sbi	QickReg,0bh	baz	xianred		sbi	QickReg,0ch	baz	xiangreencloseAll:	ldi	QickReg,0	orim	PORTA,1100B		ldi	DPL,00H			;clear LCD ram	ldi	DPM,00H	ldi	DPH,06HcloseLcd1:		ldi	INX,00H	adim	DPL,01H	sbi	DPL,0aH			;10 seg	bnz	closeLcd1	orim	TestFlg,0010b			ldi	dispflg,0		jmp	FnQickcheckendxian0:	ldi	Temp,0	call	songSeg	jmp	FnQickcheckendxian1:	ldi	Temp,1	call	songSeg	jmp	FnQickcheckend	xian2:	ldi	Temp,2	call	songSeg	jmp	FnQickcheckend	xian3:	ldi	Temp,3	call	songSeg	jmp	FnQickcheckendxian4:	ldi	Temp,4	call	songSeg	jmp	FnQickcheckend	xian5:	ldi	Temp,5	call	songSeg	jmp	FnQickcheckendxian6:	ldi	Temp,6	call	songSeg	jmp	FnQickcheckend	xian7:	ldi	Temp,7	call	songSeg	jmp	FnQickcheckendxian8:	ldi	Temp,8	call	songSeg	jmp	FnQickcheckendxian9:	ldi	Temp,9	call	songSeg	jmp	FnQickcheckend		;-------------------------------------------------	songSeg:		sta	SecRegL,0	sta	SecRegH,0	sta	MsReg1,0	sta	MsReg2,0	sta	MinRegL,0	songSegend:	rtni;-------------------------------------------------------					xianred:	ldi	dispflg,0	ldi	DPL,00H			;clear LCD ram	ldi	DPM,00H	ldi	DPH,06HcloseLcd:		ldi	INX,00H	adim	DPL,01H	sbi	DPL,0aH			;10 seg	bnz	closeLcd		orim	PORTA,1100b	andim	PORTA,1011B	jmp	FnQickcheckendxiangreen:	ldi	dispflg,0	orim	PORTA,1100b	andim	PORTA,0111B	;	jmp	FnQickcheckend		FnQickcheckend:	rtni;*****************************************************	waitouchproc:	lda	TestFlg,0	ba0	$+2				jmp	waitouchped	lda	TestFlg,0	ba1	$+2							jmp	waitouchped		lda	Sec_flg,0	ba1	$+2	jmp	waitouchped	andim	Sec_flg,1101b			orim	PORTA,1100B				lda	TestFlg,0	ba2	$+2				jmp	testproc1			lda	TestFlg,0		 	ba3	$+2	jmp	testproc2;	orim	TestFlg,1000b			andim	TestFlg,0000b			jmp	waitouchpedtestproc1:		lda	PORTB,0	ba0	$+2	jmp	testproc2	lda	TestFlg,0	ba2	waitouchped	orim	PORTA,1100B	andim	PORTA,0111b	orim	TestFlg,0100b	jmp	waitouchped		testproc2:		lda	PORTB,0	ba1	$+2	jmp	waitouchped		lda	TestFlg,0	ba3	waitouchped	orim	PORTA,1100B	andim	PORTA,1011b	orim	TestFlg,1000bwaitouchped:	rtni						;*****************************************************	;***********	scan key process 	;*************;*****************************************************	FnScanKey:				lda	PORTB,0				sta	Key1Temp,0	lda	PORTA,0	sta	Key3Temp,0	andim	Key3Temp,0001b	nop	nop	nop	nop	nop		nop		nop	nop	nop	nop	lda	PORTA,0	sta	Key4Temp,0	andim	Key4Temp,0001b	sub	Key3Temp,0	bnz	next_key	lda	Key4Temp,0				sta	LastKeyH,0next_key:		lda	PORTB,0	sta	Key2Temp,0	sub	Key1Temp,0	bnz	FnScanKeyEnd	lda	Key2Temp,0			sta	LastKeyL,0FnScanKeyEnd:	rtni		;*****************************************************	;***********		key process 	;*************;*****************************************************	FnKeyProc:		lda	SysRunFlg,0	ba2	$+2			;keyenb_flg=1	jmp	FnKeyProcEnd	andim	SysRunFlg,1011b			call	FnScanKey		;扫键		lda	LastKeyL,0	sub	KeyPressL,0	baz	KEY_NOFREE	lda	LastKeyL,0	sta	KeyPressL,0	andim	KeyPressL,1000b

⌨️ 快捷键说明

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