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

📄 suaizhiji.asm

📁 市场上流行的甩脂机源代码,功能强,但是所用资源不多.
💻 ASM
字号:

;==========================
;BANK 0 
	R0		EQU		0X00
	R1		EQU		0X01
	R2		EQU		0X02
	R3		EQU		0X03
	 C 		 EQU	 	0X00
	 DC 		 EQU	 	0X01
	 Z 		 EQU	 	0X02
	 PS0		EQU		0X05	
	 PS1		 EQU		0X06	
	 IOCPAGE	 EQU	  	0X07
	 
	R4 		EQU		0X04
	R5 		EQU		0X05
		SWITCHLED	EQU	0X00
		BEEP				EQU		0X01		
	R6 		EQU		0X06
		ZHENGFAN 		EQU		0X01
		PWM					EQU		0X02
		MODELED			EQU		0X07
		INTENSITYLED 	EQU		0X05		;up down
		REVERSELED	EQU		0X06  ;zheng fan
		
	R7 		EQU		0X07
	R8 		EQU		0X08
	R9 		EQU		0X09
	RA 		EQU		0X0A
	RAMP 	EQU		0X04
	RB 		EQU		0X0B
	RC 		EQU		0X0C
	RD 		EQU		0X0D
	RE 		EQU		0X0E
	IOCE	EQU		0X0E
	RF 		EQU		0X0F					
	 R3_BUF	EQU	0X10
	 R4_BUF	EQU	0X11
	 ACC_BUF	EQU	0X12
	 		
	RTMP1		EQU	0X15
	RTMP2		EQU	0X16
	RTMP3		EQU	0X17
	RTMP4		EQU	0X18
	RTMP5		EQU	0X19
	INRTMP1	EQU	0X1A
	INRTMP2	EQU	0X1B
	INRTMP3	EQU	0X1C
	INRTMP4	EQU	0X1D
	;PWMFLG	EQU	0X1F
	TFLAG1	EQU	0X1E
		AUTOPWMUP	EQU	0X00
		WAITF			EQU	0X01
		PWMEN			EQU	0X02
		BEEPF			EQU	0X03
		MODELEDF	EQU	0X04
		REVERSELEDF		EQU		0X05
		INTENSITYLEDF	EQU		0X06
		KOFLAG		EQU	0X07
	;buff_r	EQU	0X20
	;buff_g	EQU	0X21
	;buff_b	EQU	0X22
	PWMINC		EQU		0X21
	PWMEND		EQU		0X22
	TIMFLAG	equ	0x23
		st200us	equ	0x00
		MODECHAN	equ	0x01
		ST08MSF	equ	0x03
		poweron	equ	0x04
	LEDPOWBUF	EQU		0X25
	TIMEBUF		EQU		0X26
	RLDAT			EQU		0X27
	WAITCT		EQU		0X28
	RUNMODE		EQU		0X29
	BEEPTIME	EQU		0X2A
	KEYREF		EQU		0X2B
		KFIRSTF        EQU     0X05    ;THE "05" BIT
	PWMBAK		EQU		0X2C
	PWMBUF		EQU		0X2D
	
	
;=================
		ORG	0X0000
;================
	NOP
	NOP
  DISI
  CLR	R4
	CLR	R3
	BC	R3,PS0
	BC	R3,PS1
	JMP	RESET
;=================			
	ORG	0X0008
;=================
INTDET:
	MOV	ACC_BUF,A       ;FOR PUSH A
	SWAP	ACC_BUF
	SWAPA	R3
	MOV	R3_BUF,A        ;FOR PUSH 0X03
	MOV	A,R4
	MOV	R4_BUF,A        ;FOR PUSH 0X04
	CLR	R3 
	CLR	R4	
	MOV	A,@0X9C					;中断里面是100次
	MOV	R1,A
	JBC	RF,0X00
	JMP	TCC_INT					;DET TCC_IRQ

INTDET_R:
	MOV	A,@00000000B
	MOV	RF,A		
	MOV	A,R4_BUF
	MOV	R4,A
	SWAPA	R3_BUF
	MOV	R3,A
	SWAPA	ACC_BUF
	RETI
;一次的时间是100us.
TCC_INT:
	JBS	TFLAG1,PWMEN		;先处理PWM的输出.
	JMP	TCC_INT01
	INC	PWMEND
	MOV	A,PWMEND
	SUB	A,PWMBUF				;相等就转换到低电平
	JBC	R3,2
	BC	R6,PWM
	MOV	A,PWMEND				;总长度2.7豪秒
	SUB	A,@27
	JBS	R3,2
	JMP	TCC_INT01
	CLR	PWMEND
	BS	R6,PWM
TCC_INT01:
	JBS		TIMFLAG,POWERON			;开机状态下电源灯总亮
	JMP		TCC_INT012
	INC		LEDPOWBUF
	MOV		A,LEDPOWBUF					;电源灯5ms长度时间内1ms供电
	SUB		A,@10
	JBC		R3,2
	BS		R5,SWITCHLED
	MOV		A,LEDPOWBUF
	SUB		A,@50
	JBS		R3,2
	JMP		TCC_INT011
	CLR		LEDPOWBUF
	BC		R5,SWITCHLED
TCC_INT011:
	MOV		A,LEDPOWBUF					;是0也照样取反
	JBC		R3,2
	JMP		TCC_INT0A
	MOV		RTMP1,A
TCC_INT0B:
	MOV		A,@10
	SUB		RTMP1,A
	JBC		R3,2
	JMP		TCC_INT0A						;查找被10整除的数,1ms取反一次.
	JBC		R3,C
	JMP		TCC_INT0B
	JMP		TCC_INT012
TCC_INT0A1:
	MOV		A,@0B10000000
	JMP		TCC_INT0A3
TCC_INT0A2:
	MOV		A,@0B01000000
	JMP		TCC_INT0A3
TCC_INT0A:
	JBC		TFLAG1,MODELEDF
	JMP		TCC_INT0A1
	JBC		TFLAG1,REVERSELEDF
	JMP		TCC_INT0A2
	JBS		TFLAG1,INTENSITYLEDF
	JMP		TCC_INT012
	MOV		A,@0B00100001	
TCC_INT0A3:
	XOR		R6,A
TCC_INT012:
	INC	TIMEBUF			;产生8毫秒的标志位
	MOV	A,TIMEBUF
	SUB	A,@80
	JBS	R3,2
	JMP	TCC_INT02
	CLR	TIMEBUF
	BS	TIMFLAG,ST08MSF
	JBS    TFLAG1,WAITF
	JMP    TCC_INT02
	MOV    WAITCT,WAITCT
	JBC    R3,Z
	JMP    TCC_INT02
	INC    WAITCT	
TCC_INT02:
	JBS	TFLAG1,BEEPF		;按键音的处理
	JMP	TCC_INT03
	MOV	A,@0B00000001
	XOR	TIMFLAG,A
	JBS	TIMFLAG,ST200US
	JMP	TCC_INT03
	MOV	A,@0B00000010
	XOR	R5,A
TCC_INT03:
	JMP	INTDET_R
;==================FOR RESET THE MCU
RESET:
	MOV	A,@00000001B
	CONTW				;TCC=256US
	MOV	A,@01110111B		;
	IOW	rb
	MOV	A,@10000000B		;开看门狗
	IOW	ioce
	MOV	A,@00011001B		;
	IOW	R6			;
	MOV	A,@00001100B		;
	IOW	R5			;
;==================RESET COMMAN REGISTER AND REGISTER(BANK0,1)
	MOV	A,@10H
	MOV	R4,A
LOOP1:
	CLR	R0
	INC	R4
	MOV	A,@00111111B
	AND	A,R4
	SUB	A,@0X2F
	JBS	R3,Z
	JMP	LOOP1
LOOP2:
	CLR	R4
	MOV	A,@00000001B	;TCC ENABLE
	IOW	RF
	CALL 	 INI_BUFF
	BS		 TFLAG1,BEEPF		;按键音的处理
	MOV		 A,@64
	MOV		 BEEPTIME,A	
	ENI
;============	MAIN START
HAH2:	
	WDTC
	JBC		 TIMFLAG,ST08mSF			;8豪秒的时间处理
	JMP		 RLROUT1
HAH3:
	JBS    TFLAG1,WAITF
	JMP    HAH4
	MOV    WAITCT,WAITCT
	JBS    R3,Z
	JMP    HAH4
	JMP    WAITRT
HAH4:
	JMP		 HAH2
WAITRT:
	BC     TFLAG1,WAITF
	SWAPA  RLDAT
	AND    A,@0X0F
	MOV		 RTMP1,A
	JBC		 R3,2
	JMP		 WAITR0
	MOV		 A,RTMP1
	XOR		 A,@1
	JBC		 R3,2
	JMP		 WAITR1
	MOV		 A,RTMP1
	XOR		 A,@2
	JBC		 R3,2
	JMP		 WAITR2
	MOV		 A,RTMP1
	XOR		 A,@3
	JBC		 R3,2
	JMP		 WAITR3
	JMP		 HAH4
;
WAITR3:
	JBS		 TIMFLAG,poweron
	JMP		 WAITR31
	MOV		 A,RUNMODE
	AND		 A,@3
	SUB		 A,@2
	JBS		 R3,2
	JMP		 WAITR31
	MOV		 A,RLDAT
	AND		 A,@3
	MOV		 RTMP1,A
	JBC		 R3,2
	JMP		 WAITR3A
	
	MOV		 A,RTMP1
	XOR		 A,@1
	JBC		 R3,2
	JMP		 WAITR3B
	MOV		 A,RTMP1
	XOR		 A,@2
	JBC		 R3,2
	JMP		 WAITR3C
	MOV		 A,RTMP1
	XOR		 A,@3
	JBC		 R3,2
	JMP		 WAITR3D
	JMP		 HAH4
WAITR3A:
	MOV		 A,@0X31
	JMP		 WAITA1
WAITR3B:
	BC		 TFLAG1,PWMEN		;停止输出.
	BC		 R6,PWM
	MOV		 A,@0X32
WAITR3B1:
	MOV		 RLDAT,A	
	MOV    A,@0X83
	MOV    WAITCT,A        ;SET 1000mS
	BS     TFLAG1,WAITF
	JMP		 HAH4
WAITR3C:
	MOV		 A,@0B00000010
	XOR		 R6,A							;正反转输出
	MOV		 A,@0X33
	JMP		 WAITR3B1
WAITR3D:
	BS		 TFLAG1,PWMEN		 ;
	JMP		 WAITR2
WAITR31:
	JMP		 HAH4
;输出10和17
WAITR2:
	CLR		 PWMEND
	MOV		 A,@10
	MOV		 PWMBUF,A
	BS		 R6,PWM
	BS		 TIMFLAG,MODECHAN			;开始工作,具体模式看设定.
	MOV		 A,RUNMODE
	AND		 A,@3
	SUB		 A,@2
	JBS		 R3,2
	JMP		 HAH4
	MOV		 A,@0X30
WAITA1:
	MOV		 RLDAT,A
	BS     TFLAG1,WAITF
	MOV    A,@0X06
	MOV    WAITCT,A        ;SET 2000mS
	JMP		 HAH4
;输出9和18延时300ms
WAITR1:
	MOV		 A,@9
	MOV		 PWMBUF,A
	MOV    A,@0X0F
	AND    RLDAT,A         ;WAITF_DAT=0H
	MOV		 A,@0X20	
	JMP		 WAITR01
;1秒钟的时间到.输出8和19延时300ms
WAITR0:
	BS			TFLAG1,PWMEN		;先处理PWM的输出.	
	MOV			A,@8
	MOV			PWMBUF,A	
	MOV    A,@0X0F
	AND    RLDAT,A         ;WAITF_DAT=0H
	MOV		 A,@0X10
;延时300ms
WAITR01:
	OR		 RLDAT,A         ;WAITF_DAT=1H
	MOV    A,@0Xda;C0;DA
	MOV    WAITCT,A        ;SET 500mS WAIT FOR RV POWER STABLE
	BS     TFLAG1,WAITF
	BS		 R6,PWM
	CLR		 PWMEND
	JMP		 HAH4
	
RLROUT1:
	BC		TIMFLAG,ST08mSF	
	JBS		TFLAG1,BEEPF				;按键音的处理,延时的时间到没有.
	JMP		RLROUT2
	DJZ		BEEPTIME
	JMP		RLROUT2
	BC		TFLAG1,BEEPF
	BC		TFLAG1,MODELEDF
	BC		TFLAG1,REVERSELEDF
	BC		TFLAG1,INTENSITYLEDF
	BC		R5,BEEP
	BS		R6,MODELED
	BS		R6,REVERSELED
	BS		R6,INTENSITYLED
RLROUT2:
	JBS		TIMFLAG,MODECHAN		;在自动模式下边,程序的运行是500ms改变一次数据的.
	JMP		RLROUT3
	MOV		A,@0B00000100
	ADD		RUNMODE,A
	JBS		R3,C
	JMP		RLROUT3
	MOV		A,RUNMODE
	AND		A,@3
	MOV		RTMP1,A
	;JBC		R3,2
	;JMP		RLROUT3
	MOV		A,RTMP1
	XOR		A,@1
	JBC		R3,2
	JMP		RLROUT201
	MOV		A,RTMP1
	XOR		A,@2
	JBC		R3,2
	JMP		RLROUT202
	
	JMP		RLROUT3
RLROUT201:
	JBC		TFLAG1,AUTOPWMUP
	JMP		RLROUT211
	INC		PWMBUF
	MOV		A,PWMBUF
	SUB		A,@23
	JBC		R3,2
	BS		TFLAG1,AUTOPWMUP
	JMP		RLROUT3
RLROUT211:
	DEC		PWMBUF
	MOV		A,PWMBUF
	SUB		A,@9
	JBC		R3,2
	BC		TFLAG1,AUTOPWMUP
	JMP		RLROUT3
RLROUT202:
	MOV		A,PWMBAK
	SUB		A,PWMBUF			;IF PWMBUF > PWMBAK R3,C = 1
	JBC		R3,C
	JMP		RLROUT3
	INC		PWMBUF
	INC		PWMBUF
	JMP		RLROUT3
;检测键盘
RLROUT3:
	MOV    A,@11100110B
	OR     A,R6          ;DET THE KEY OPRATE
	SUB    A,@0FFH
	JBS    R3,Z          ;DETECT "Z" FLAG
	JMP		 SCANKEY
	JBS		 R5,0X02
	JMP		 SCANKEY
	JBS		 R5,0X03
	JMP		 SCANKEY
;键盘放开一切标志恢复.
RL1RT1:
	BC     KEYREF,KFIRSTF  ;RESET KFIRSTF
	BC     TFLAG1,KOFLAG  ;RESET THE KOFLAG
KEYRLR:
	JMP    HAH3
	
SCANKEY:
	JBC    TFLAG1,KOFLAG			;键盘已经有按下
	JMP    KEYRLR
	;JBC    CONFLAG,FORBIDF		;禁止键盘
	;JMP    KEYRLR
	CALL   DETKDT
	MOV    A,@0XFF
	SUB    A,RTMP4
	JBS    R3,Z
	JMP    KEYRL2          ;DET THE KEY, IF NOT "0FFH"
KEYRL1:
	BC     KEYREF,KFIRSTF  ;RESET THE KFIRSTF
	JMP		 KEYRLR
KEYRL2:
	JBC    KEYREF,KFIRSTF
	JMP    KEYRL21
	MOV    A,RTMP4
	OR     A,@00100000B    ;SET THE KFIRSTF
	MOV    KEYREF,A
	JMP    KEYRLR
KEYRL21:
	MOV    A,KEYREF
	AND    A,@00000111B
	SUB    A,RTMP4
	JBS    R3,Z           ;DET "Z" FLAG
	JMP    KEYRL1
	MOV    A,@01000000B
	ADD    KEYREF,A
	JBS    R3,C           ;DET "C" FLAG
	JMP    KEYRLR
	MOV    A,@00000111B
	AND    KEYREF,A
	BS     TFLAG1,KOFLAG		;产生键盘的标志
	
	
	;CALL   SOUND_OF1
	;JMP    KEYRLR
KEYRL22:
	MOV		 A,KEYREF
	AND		 A,@0X07
	MOV		 RTMP1,A
	JBC		 R3,2
	JMP		 KEY_ONOF        ;0
	MOV		 A,RTMP1
	SUB		 A,@1
	JBC		 R3,2
	JMP		 KEY_MODE        ;1 
	MOV		 A,RTMP1
	SUB		 A,@2
	JBC		 R3,2
	JMP		 KEY_TRAN        ;2
	MOV		 A,RTMP1
	SUB		 A,@3
	JBC		 R3,2
	JMP		 KEY_UP          ;3
	MOV		 A,RTMP1
	SUB		 A,@4
	JBC		 R3,2
	JMP		 KEY_DOWN        ;4
	JMP		 KEYRLR					;NOP
;开关机键盘
KEY_ONOF:
	CALL   SOUND_OF1
	MOV		A,@0B00010000
	XOR		TIMFLAG,A
	JBC		TIMFLAG,poweron
	JMP		POW_ON
	;关机了 所有的运转都停止 灯也灭	
	CALL 	INI_BUFF
	clr		PWMINC
	;clr		PWMBAK
	JMP		KEYRL3
;1秒钟以后启动电机
POW_ON:
	CLR		RUNMODE
	MOV		A,@10
	MOV		PWMBAK,A
POW_ON_1:
				 BS     TFLAG1,WAITF
         MOV    A,@0X0F
         AND    RLDAT,A         ;WAITF_DAT=0H
         MOV    A,@0X06;83
         MOV    WAITCT,A        ;SET 2000mS WAIT FOR RV POWER STABLE
				 BC		  TIMFLAG,MODECHAN			;还没开始工作
				 JMP		KEYRL3
KEYRL3:
	JMP		HAH3
;模式转换键盘
KEY_MODE:
	JBS		TIMFLAG,poweron
	JMP		KEYRL3
	BS		TFLAG1,MODELEDF
	CALL	SOUND_OF1
	INC		RUNMODE
	MOV		A,RUNMODE
	AND		A,@3
	MOV		RTMP1,A
	XOR		A,@1
	JBC		R3,2
	JMP		MODE001
	MOV		A,RTMP1
	XOR		A,@2
	JMP		MODE002
MODE000:
	MOV		A,@0XFC
	AND		RUNMODE,A
	CLR		PWMINC
	JMP		POW_ON_1
MODE002:
	MOV		A,@10
	MOV		PWMBAK,A
	MOV		PWMBUF,A
	CLR		PWMINC
MODE001:
	JMP		POW_ON_1
;方向切换键盘
KEY_TRAN:
	JBS		TIMFLAG,poweron		;关机时候没作用
	JMP		KEYRL3
	MOV		A,RUNMODE					;模式2的时候是没作用的
	AND		A,@3
	XOR		A,@2
	JBC		R3,2
	JMP		KEYRL3
	
	BS		TFLAG1,REVERSELEDF
	CALL	SOUND_OF1
	MOV		A,@0B00000010
	XOR		R6,A
	BC		TFLAG1,PWMEN		;先处理PWM的输出.
	BC		R6,PWM
	JMP		POW_ON_1
;力度加
KEY_UP:
	JBS		TIMFLAG,poweron		;关机时候没作用
	JMP		KEYRL3
	MOV		A,RUNMODE					;模式1的时候是没作用的
	AND		A,@3
	XOR		A,@1
	JBC		R3,2
	JMP		KEYRL3
	
	MOV		A,PWMINC
	SUB		A,@4
	JBC		R3,2
	JMP		KEYRL3
	INC		PWMINC
KEY_UP01:	
	BS		TFLAG1,INTENSITYLEDF
	CALL	SOUND_OF1
	CLR		PWMEND
	CALL	PWMDEC
	MOV		PWMBUF,A
	MOV		PWMBAK,A
	;BS		R6,PWM
	JMP		KEYRL3
;力度减
KEY_DOWN:
	JBS		TIMFLAG,poweron		;关机时候没作用
	JMP		KEYRL3
	MOV		A,RUNMODE					;模式1的时候是没作用的
	AND		A,@3
	XOR		A,@1
	JBC		R3,2
	JMP		KEYRL3
	
	MOV		PWMINC,PWMINC
	JBC		R3,2
	JMP		KEYRL3
	DEC		PWMINC
	JMP		KEY_UP01
PWMDEC:
	MOV		A,PWMINC
	AND		A,@7
	MOV		RTMP1,A
	mov		a,rtmp1
	JBC		R3,2
	RETL   @10
	
	MOV		 A,RTMP1
	XOR		 A,@1
	JBC		 R3,2
	RETL   @13
	
	MOV		 A,RTMP1
	XOR		 A,@2
	JBC		 R3,2
	RETL   @16
	
	MOV		 A,RTMP1
	XOR		 A,@3
	JBC		 R3,2
	RETL   @20
	
	MOV		 A,RTMP1
	XOR		 A,@4
	JBC		 R3,2
	RETL   @23
	RETL   @10
SOUND_OF1:
	BS		 TFLAG1,BEEPF		;按键音的处理
	MOV		 A,@32
	MOV		 BEEPTIME,A
	RET
DETKDT:
	JBS		 R6,0X03
	JMP		 DETKDT01
	JBS		 R5,0X02
	JMP		 DETKDT02
	JBS		 R5,0X03
	JMP		 DETKDT03
	JBS		 R6,0X00
	JMP		 DETKDT04
	JBS		 R6,0X04
	JMP		 DETKDT05
	MOV		 A,@0XFF
	MOV		 RTMP4,A
DETKDTEND:
	RET
DETKDT01:
	MOV		A,@1		;MODE KEY
DETKDT011:
	MOV		RTMP4,A
	JMP		DETKDTEND
DETKDT02:
	MOV		A,@2
	JMP		DETKDT011	;转向 KEY
DETKDT03:
	MOV		A,@3
	JMP		DETKDT011	;UP KEY
DETKDT04:
	MOV		A,@4
	JMP		DETKDT011	;DOWN KEY
DETKDT05:
	MOV		A,@0
	JMP		DETKDT011	;POWER KEY
INI_BUFF:	
	BS		R5,SWITCHLED
	BS		R6,MODELED
	BS		R6,REVERSELED
	BS		R6,INTENSITYLED
	;BC		TFLAG1,PWMEN		;先处理PWM的输出.
	BC		R6,PWM
	BC		R6,ZHENGFAN
	CLR		RUNMODE
	CLR		PWMEND
	CLR		PWMBUF
	CLR		PWMBAK
	MOV		A,@0X88
	AND   TFLAG1,A
	CLR   WAITCT
	CLR		TIMFLAG
	RET
	
	
	
	
	
	
	
	
	

⌨️ 快捷键说明

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