📄 av_2717_015.dt
字号:
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 + -