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

📄 av_2717_015.dt

📁 一个双路马达驱动与8LED显示的电动玩具!
💻 DT
📖 第 1 页 / 共 2 页
字号:
R0				==		0X00
TCC				==		0X01
PC				==		0X02
STATUS			==		0X03
   Z			==		2
   C			==		0
RSR				==		0X04
PORT5			==		0X05
PORT6			==		0X06
RD				==		0X0D
RE				==		0X0E
RF				==		0X0F
  TCIF			==		0

P5CR			==		0X05
P6CR			==		0X06
PCR				==		0X0A
PDCR			==		0X0B
ODCR			==		0X0C
PHCR			==		0X0D		
WDTCR			==		0X0E		
IMR				==		0X0F

;R10-R1F and R20-R3F is general purpose register
REG_10MS		==		0X10			;use for clean genernal registers
ACC_BUF			==		0X11
R3_BUF			==		0X12
KEY_FLAG		==		0X13
 UP1_FLAG		==		0
 DOWN1_FLAG		==		1
 UP2_FLAG		==		2
 DOWN2_FLAG		==		3
 F1_FLAG		==		4
 UP1_STATIC		==		5
 DOWN1_STATIC	==		6
 UP2_STATIC		==		7
KEY_STATE		==		0X14
 UP1_STATE		==		0
 DOWN1_STATE	==		1
 UP2_STATE		==		2
 DOWN2_STATE	==		3
 F1_STATE		==		4
 DOWN2_STATIC	==		5
 F1_STATIC		==		6
FLAG1			==		0X15
 DELAY_ON_G_FLAG==		0
 NEG_FLAG		==		1
 DELAY_ON_M_FLAG==		2
 MODE_DO_FLAG	==		3
 STATIC_FLAG	==		4
POWERTEST1		==		0X16
POWERTEST2		==		0X17
REG_G_100US		==		0X18
REG_M_100US		==		0X19
FLAG_100US		==		0X1A
DUTY_100US		==		0X1B
SLEEP_FLAG		==		0X1C
COUNT_G_10MS	==		0X1D
COUNT_M_10MS	==		0X1E
SPEED_M			==		0X1F
SPEED_M_DUTY	==		0X20
SPEED_G			==		0X21
SPEED_G_DUTY	==		0X22
LED_DUTY		==		0X23
MODE			==		0X24
R5_BUF			==		0X25
R6_BUF			==		0X26
 MOTOR_G_LGA	==		0
 MOTOR_G_LGB	==		1
 MOTOR_M_LM		==		2
G_T_REG			==		0X27
POS_REG			==		0X28
DIS_TEMP		==		0X29
KEY_TIME		==		0X2A
STATIC_TIME		==		0X2B
;*********************************************************
ORG			000H
 			NOP
 			NOP
 			NOP
 			NOP
 			JMP			POWERON
 			NOP
 			NOP
 			ORG			008H
 			JMP			INT_TCC
 			
 			ORG			010H
 			
;*****************************************************
SPEED_G_TAB:
			ADD		PC,A
			RETL	@0X00		;total is 10.0ms,0
 			RETL	@0X28		;speed1 4.0ms ,1
 			RETL	@0X38		;speed2 5.6ms,2
 			RETL	@0X44		;6.8MS
 			RETL	@0X5C		;9.2MS
 			RETL	@0X5C			
 			RETL	@0X5C

;*****************************************************************************
SPEED_M_TAB:
			ADD		PC,A
			RETL	@0X00		;total is 10.0ms
			RETL	@0X28 		;4.0MS
			RETL	@0X38		;5.6MS
			RETL	@0X46		;7.0MS
			RETL	@0X64		;10.0MS
			RETL	@0X64		
			RETL	@0X64		
 			
;*********************************************************
;LED_DIS
STATIC_TABE_M:
			ADD		PC,A
			RETL	@0B00000000 	;			
 			RETL	@0B10000000		;LED1
 			RETL	@0B10000000		;LED1-2
 			RETL	@0B10000000		;LED1-3
 			RETL	@0B10000000		;LED1-4
 			
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
STATIC_TABF_M:
			ADD		PC,A
			RETL	@0B00000000 	;			
 			RETL	@0B00000000		;LED1
 			RETL	@0B10000000		;LED1-2
 			RETL	@0B10000000		;LED1-3
 			RETL	@0B10000000		;LED1-4
 			
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
STATIC_TABG_M:
			ADD		PC,A
			RETL	@0B00000000 	;			
 			RETL	@0B00000000		;LED1
 			RETL	@0B00000000		;LED1-2
 			RETL	@0B10000000		;LED1-3
 			RETL	@0B10000000		;LED1-4
 			
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
STATIC_TABH_M:
			ADD		PC,A
			RETL	@0B00000000 	;			
 			RETL	@0B00000000		;LED1
 			RETL	@0B00000000		;LED1-2
 			RETL	@0B00000000		;LED1-3
 			RETL	@0B10000000		;LED1-4
;*********************************************************
STATIC_TABE_G:
			ADD		PC,A
			RETL	@0B00000000 	;			
 			RETL	@0B01000000		;LED5
 			RETL	@0B01000000		;LED5-6
 			RETL	@0B01000000		;LED5-7
 			RETL	@0B01000000		;LED5-8
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
STATIC_TABF_G:
			ADD		PC,A
			RETL	@0B00000000	;			
 			RETL	@0B00000000		;LED5
 			RETL	@0B01000000		;LED5-6
 			RETL	@0B01000000		;LED5-7
 			RETL	@0B01000000		;LED5-8
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
STATIC_TABG_G:
			ADD		PC,A
			RETL	@0B00000000 	;			
 			RETL	@0B00000000		;LED5
 			RETL	@0B00000000		;LED5-6
 			RETL	@0B01000000		;LED5-7
 			RETL	@0B01000000		;LED5-8
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
STATIC_TABH_G:
			ADD		PC,A
			RETL	@0B00000000 	;			
 			RETL	@0B00000000		;LED5
 			RETL	@0B00000000		;LED5-6
 			RETL	@0B00000000		;LED5-7
 			RETL	@0B01000000		;LED5-8
;*****************************************************
DYNAMIC_TABE_M:
			ADD		PC,A
			RETL	@0B00000000 	;			
 			RETL	@0B10000000		;LED1
 			RETL	@0B00000000		
 			RETL	@0B00000000		
 			RETL	@0B00000000		
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
DYNAMIC_TABF_M:
			ADD		PC,A
			RETL	@0B00000000 				
 			RETL	@0B00000000		
 			RETL	@0B10000000		;LED2
 			RETL	@0B00000000		
 			RETL	@0B00000000		
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
DYNAMIC_TABG_M:
			ADD		PC,A
			RETL	@0B00000000 				
 			RETL	@0B00000000		
 			RETL	@0B00000000		
 			RETL	@0B10000000		;LED3
 			RETL	@0B00000000		
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
DYNAMIC_TABH_M:
			ADD		PC,A
			RETL	@0B00000000 				
 			RETL	@0B00000000		
 			RETL	@0B00000000		
 			RETL	@0B00000000		
 			RETL	@0B10000000		;LED4

;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
DYNAMIC_TABE_G:
			ADD		PC,A
			RETL	@0B00000000				
 			RETL	@0B01000000		;LED5
 			RETL	@0B00000000		
 			RETL	@0B00000000		
 			RETL	@0B00000000		
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
DYNAMIC_TABF_G:
			ADD		PC,A
			RETL	@0B00000000				
 			RETL	@0B00000000		
 			RETL	@0B01000000		;LED6
 			RETL	@0B00000000		
 			RETL	@0B00000000	
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
DYNAMIC_TABG_G:
			ADD		PC,A
			RETL	@0B00000000				
 			RETL	@0B00000000		
 			RETL	@0B00000000		
 			RETL	@0B01000000		;LED7
 			RETL	@0B00000000		
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
DYNAMIC_TABH_G:
			ADD		PC,A
			RETL	@0B00000000				
 			RETL	@0B00000000		
 			RETL	@0B00000000		
 			RETL	@0B00000000		
 			RETL	@0B01000000		;LED8	
;*****************************************************
LED_DYNAMIC_STA:
			MOV     A,LED_DUTY
			ADD    	PC,A           ;矩阵循环扫描/1MS
			JMP     LED_DYNAMIC_DUTY0
			JMP     LED_DYNAMIC_DUTY1
			JMP     LED_DYNAMIC_DUTY2		
			JMP     LED_DYNAMIC_DUTY3
;*****************************************************
LED_STATIC_MODE:
			MOV     A,LED_DUTY
			ADD    	PC,A           ;矩阵循环扫描/1MS
			JMP     LED_STATIC_DUTY0
			JMP     LED_STATIC_DUTY1
			JMP     LED_STATIC_DUTY2		
			JMP     LED_STATIC_DUTY3
				
;*****************************************************	

POWERON:	
 			
 			DISI
 			WDTC
 			MOV		A,@0XF8	;00001001b 1 set the relative I/O as input
			IOW		P6CR
			MOV		PORT6,A
			
			MOV		A,@0X00
			IOW		P5CR
			MOV		PORT5,A
			
			MOV		A,@0X00
			IOW		0X0C		;disable opendrain
			
			MOV		A,@0XFF		;disable pull down
			IOW		0X0B

			MOV		A,@0XCF		;0 set the relative I/O pull high
			IOW		PHCR	
			
			MOV		A,@0X55			;power on test1
			XOR		A,POWERTEST1
			JBS		STATUS,Z
			JMP		CLR_RAM
		
			MOV		A,@0XAA			;power on test2
			XOR		A,POWERTEST2
			JBS		STATUS,Z
			JMP		CLR_RAM
			
		
			MOV		A,@0X18			;test power on T=1,P=1
			AND		A,STATUS
			XOR		A,@0X18
			JBS		STATUS,Z
		
			JMP		MAIN

		
CLR_RAM:                    ;clean the RAM   
/*			MOV		A,@0X1F
			MOV		DIS_TEMP,A
			MOV		A,@0X11
			MOV		RSR,A
LOOP2:
			CLRA
			MOV 	R0,A
			INC		RSR
			DJZ		DIS_TEMP
			JMP		LOOP2	
		*/
			MOV		A,@0X10
			MOV		RSR,A
LOOP2:
			CLRA
			MOV 	R0,A
			INC		RSR
			MOV		A,@0XF0
			SUB		A,RSR
			JBS		STATUS,C
			JMP		LOOP2
			
			MOV		A,@0X01
			MOV		MODE,A
			
			MOV		A,@0X55				
			MOV		POWERTEST1,A
		
			MOV		A,@0XAA
			MOV		POWERTEST2,A	
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&			
MAIN:
			WDTC			
			MOV		A,@0X80		;enable the WDT
			IOW		WDTCR
			
			CLR		RF	
			MOV		A,@0X40		;set TCC prescaler as 1:2  (100*2/4)*2=0.1ms
			CONTW
			MOV		A,@0XAA
			MOV		TCC,A   ;set TCC  time equal 250   
		
			MOV		A,@0X01     ;enable TCC time intterrupt flag
			IOW		IMR
	
			ENI	
;***********************************************************
;主程序循环(LED循环扫描,马达循环驱动)
LOOP:
			WDTC
			MOV		A,@0X32				;0.5S 无速度便SLEEP
			SUB		A,SLEEP_FLAG
			JBC		STATUS,C
			JMP		MODE0
			
			MOV		A,MODE
			ADD		PC,A
			
			JMP		LOOP
			JMP		MODE1
			JMP		MODE2
			JMP		MODE3	
			NOP
			NOP
			JMP		LOOP			

LOOP1:
			MOV		A,R5_BUF
			MOV		PORT5,A
			MOV		A,R6_BUF
			MOV		PORT6,A
			JMP		LOOP
			
;******************************************************
; SLEEP MODE

MODE0:
			NOP
			NOP
			CLR		SLEEP_FLAG
			DISI
			
			MOV		A,@0XF8
			IOW		0X06
			
			MOV		A,@0X00
			MOV		PORT5,A
			CALL	DELAY
			
			CLR		TCC			;must do when the cont is change
			WDTC
			MOV		A,@0X0F
			CONTW
		
			MOV		A,@0X00
			IOW		WDTCR

		
			MOV 	PORT6,PORT6  
		
			MOV		A,@0X02
			IOW		IMR
		
			DISI
		
			SLEP
		
WAKE_UP:
			NOP
			NOP
			DISI				;colse the intterrupt
			MOV		A,@0X38
			IOW		0X06
			
        	WDTC
			MOV		A,@0X80		;enable the WDT
			IOW		WDTCR
		
			MOV		A,@0X40
			CONTW
			MOV		A,@0XAA
			MOV		TCC,A
		
			MOV		A,@0X01     ;enable TCC time intterrupt flag
			IOW		IMR
		
			ENI					;enable the intterrupt
			JMP		LOOP
			
			
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;MODE1

MODE1:
			CALL		DIS_MODE
			CALL		MOTOR_G_DRIVE
			CALL		MOTOR_M_DRIVE
			JMP			LOOP1
			
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;MODE2

MODE2:		
			JBC			FLAG1,MODE_DO_FLAG
			JMP			MODE2_DO
			
			JBC			FLAG1,NEG_FLAG
			JMP			$+3
			
			BS			FLAG1,NEG_FLAG
			JMP			$+2
			
			BC			FLAG1,NEG_FLAG
			
			CLR			COUNT_G_10MS
			CLR			COUNT_M_10MS
			BS			FLAG1,MODE_DO_FLAG
			
MODE2_DO:
			MOV			A,@0X96
			MOV			G_T_REG,A	;马达正(反)转周期
			MOV			A,@0X32
			MOV			POS_REG,A		;停止时间(间断时间)
			CALL		DIS_MODE
			CALL		MOTOR_G_POS_NEG
			CALL		MOTOR_M_POS_NEG	
			JMP			LOOP1		

;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;MODE3

MODE3:
			JBC			FLAG1,MODE_DO_FLAG
			JMP			MODE3_DO
			
			JBC			FLAG1,NEG_FLAG
			JMP			$+3
			
			BS			FLAG1,NEG_FLAG
			JMP			$+2
			
			BC			FLAG1,NEG_FLAG
			
			CLR			COUNT_G_10MS
			CLR			COUNT_M_10MS
			BS			FLAG1,MODE_DO_FLAG
			
MODE3_DO:
			MOV			A,@0X64
			MOV			G_T_REG,A	;马达正(反)转周期
			MOV			A,@0X32
			MOV			POS_REG,A		;停止时间(间断时间)
			CALL		DIS_MODE
			CALL		MOTOR_G_POS_NEG
			CALL		MOTOR_M_POS_NEG	
			JMP			LOOP1					
			


;********************************************************

MOTOR_G_DRIVE:

			JBS		FLAG1,DELAY_ON_G_FLAG
			JMP		SPEED_G_OFF
			
SPEED_G_ON:
			JBC		FLAG1,NEG_FLAG		;逆时针转动标志
			JMP		$+4
			
			BC		R6_BUF,MOTOR_G_LGA		;		顺时针
			BS		R6_BUF,MOTOR_G_LGB
			JMP		$+3
			
			BS		R6_BUF,MOTOR_G_LGA			;	逆时针
			BC		R6_BUF,MOTOR_G_LGB
			
			MOV		A,SPEED_G		;H time of a cycle
			CALL	SPEED_G_TAB
			
			SUB		A,REG_G_100US
			JBS		STATUS,C
			RET

			BC		FLAG1,DELAY_ON_G_FLAG
			BC		R6_BUF,MOTOR_G_LGA		;跳转是停止
			BC		R6_BUF,MOTOR_G_LGB
			
SPEED_G_OFF:
			MOV		A,@0X64			;whole time of a cycle is 10.0ms
			SUB		A,REG_G_100US
			JBS		STATUS,C
			RET
			
			INC		COUNT_G_10MS
			CLR		REG_G_100US
			BS		FLAG1,DELAY_ON_G_FLAG
			RET
			
;******************************************************************************
MOTOR_G_POS_NEG:
			JBC		FLAG1,NEG_FLAG
			JMP		MOTOR_G_NEG
			
			MOV		A,G_T_REG			;正转周期
			SUB		A,COUNT_G_10MS
			JBS		STATUS,C
			JMP		$+4
			
			BS		FLAG1,NEG_FLAG
			CLR		COUNT_G_10MS
			RET
			
			
			MOV		A,POS_REG		;正转关闭时间
			SUB		A,COUNT_G_10MS
			JBS		STATUS,C
			JMP		$+3
			
			CALL	MOTOR_G_DRIVE
			RET
			
			CALL	MOTOR_G_DRIVE
			BC		R6_BUF,MOTOR_G_LGA		;方向改变时延时
			BC		R6_BUF,MOTOR_G_LGB
			RET
			
MOTOR_G_NEG:
			MOV		A,G_T_REG		;反转周期
			SUB		A,COUNT_G_10MS
			JBS		STATUS,C
			JMP		$+4
			
			BC		FLAG1,NEG_FLAG
			CLR		COUNT_G_10MS
			RET
			
			MOV		A,POS_REG		;反转停止时间
			SUB		A,COUNT_G_10MS
			JBS		STATUS,C
			JMP		$+3
			
			CALL	MOTOR_G_DRIVE
			RET
			
			CALL	MOTOR_G_DRIVE
			BC		R6_BUF,MOTOR_G_LGA		;方向改变时延时
			BC		R6_BUF,MOTOR_G_LGB
			RET
			
;***************************************************************************************
MOTOR_M_DRIVE:

			JBS		FLAG1,DELAY_ON_M_FLAG
			JMP		SPEED_M_OFF
			
SPEED_M_ON:
			
			MOV		A,SPEED_M		;H time of a cycle
			CALL	SPEED_M_TAB
			
			SUB		A,REG_M_100US
			JBC		STATUS,C
			JMP		$+3
			
			BS		R6_BUF,MOTOR_M_LM
			RET
			
			BC		R6_BUF,MOTOR_M_LM
			BC		FLAG1,DELAY_ON_M_FLAG
			RET
			
SPEED_M_OFF:
			MOV		A,@0X64			;whole time of a cycle is 10.0ms

⌨️ 快捷键说明

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