📄 main.asm
字号:
LDAA 0,X
STAA 0,Y
J7:BRCLR ATD0STAT1,#$80,J7
LDX #ATD0DR7L
LDY #AD_Value+7
LDAA 0,X
STAA 0,Y
J8:BRCLR ATD1STAT1,#$01,J8
LDX #ATD1DR0L
LDY #AD_Value+8
LDAA 0,X
STAA 0,Y
J9:BRCLR ATD1STAT1,#$02,J9
LDX #ATD1DR1L
LDY #AD_Value+9
LDAA 0,X
STAA 0,Y
J10:BRCLR ATD1STAT1,#$04,J10
LDX #ATD1DR2L
LDY #AD_Value+10
LDAA 0,X
STAA 0,Y ;传感器的值传送结束
START1: MOVB #$FF,MIN ;将MIN中取$FF
START: LDAB #$0B
LDX #AD_Value ;将指针指向AD_Value
LOOP: LDAA 0,X ;将AD_Value中内容送A
CMPA MIN ;将(A)与(MIN)比较
BHI NEXT ;若(A)≥(MIN),转NEXT
STAA MIN ;将小值送MIN中
STX ONE ;将小值地址送(ONE:ONE+1)
NEXT: INX ;指向AD_Value+1
DBNE B,LOOP ;若(B)-1≠0,转LOOP
lDAA MIN
CMPA #$CC
BHS PWM_SET
AD_CB: LDAA ONE+1 ;左边传感器地址低8位送A
ANDA #$0F ;保留左边传感器地址低4位
LDAB #5
MUL
EXG B,X ;B中放的是乘积之后的低8位
INX
LDAA AD_Table,X ;将查询到的值送入到A中
STAA WAI1+6
INX
LDAA AD_Table,X
STAA WAI1+7 ;舵机PWM给定 ;舵机PWM给定 ;舵机PWM给定 ;舵机PWM给定 ;舵机PWM给定 ;舵机PWM给定 ;舵机PWM给定 ;舵机PWM给定
INX
LDAA AD_Table,X ;需要的速度(脉冲数)高8位放在WAI1+8寄存器中
STAA WAI1+8 ;WAI1+8 中放脉冲数,即速度设定
INX
LDAA AD_Table,X ;需要的速度(脉冲数)低8位放在WAI1+9寄存器中
STAA WAI1+9
JMP PWM_SET
AD_Table:
;FCB $63,$0D,$97,$19,$00 ;0
. ;FCB $4E,$0D,$97,$19,$00 ;1
;FCB $34,$0D,$5C,$19 ;2 脉冲数25 对应speed_low
;FCB $20,$0D,$34,$3c ;3
;
;FCB $07,$0C,$A8,$3c ;4 脉冲数60 对应speed_mid
;FCB $07,$0C,$A8,$3c ;5 脉冲数60 对应speed_mid
;
;FCB $0C,$0B,$B8,$64 ;6 脉冲数100 对应speed_high
;FCB $0C,$0B,$B8,$64 ;7 脉冲数100 对应speed_high
;FCB $0C,$0B,$B8,$64 ;8 脉冲数100 对应speed_high
;
;FCB $27,$0B,$99,$3c ;9
;FCB $27,$0B,$99,$3c ;10
;
;FCB $42,$0A,$DE,$3c ;11
;FCB $5C,$0A,$63,$19 ;12
;FCB $75,$09,$EA,$19,$00 ;13
;FCB $75,$09,$D8,$19,$00 ;14
;
FCB $63,$0F,$A0,$0F,$64
FCB $4E,$0F,$A0,$0F,$64
FCB $34,$0E,$10,$0F,$64
;
FCB $20,$0C,$80,$00,$64
FCB $07,$0C,$80,$00,$64
;
FCB $0C,$0B,$B8,$00,$64
;
FCB $27,$0A,$F0,$00,$64
FCB $42,$0D,$A4,$00,$64
;
FCB $5C,$0D,$AC,$00,$64
FCB $75,$07,$D0,$00,$64
FCB $75,$07,$D0,$00,$64
;*----------------改写通道占空比寄存器PWMDTY0的值--------------------------------*
;*程序功能:将T0中值写入道占空比寄存器PWMDTY0*
;*程序入口:T0_Vallue*
;*程序出口:T0_Vallue中T0写入PWMDTY0*
;*-------------------------------------------------------------------------------*
PWM_SET: LDAA #$00;
STAA PWME ;关PWM通道
LDAA #$9C
STAA PWMPER0
LDAA #$40
STAA PWMPER1 ;设置50HzPWM
LDAA WAI1+6
STAA PWMDTY0 ;T0送通道占空比寄存器,产生所需占空比PWM波
LDAA WAI1+7
STAA PWMDTY1
LDAA WAI1+8
STAA need_speed1 ;给需要的速度
LDAA WAI1+9
STAA need_speed2
LDAA #%00001111 ;
STAA PWME;开启channel0、1:channel2、3
;******************************************************************************
INC COUNT
LDAA COUNT
CMPA #$64 ;程序运行到100次了就处理1次舵机
BEQ PWMDTY23_CONTROL ;如果相等就跳转
JMP AD_VUP
;*******************测速模块***********************************************
;将需要的脉冲数(speed_high speed_mid speed_low)放到need_speed中,速度即可稳定在need_speed上
PWMDTY23_CONTROL:
CLR COUNT
LDAA #$00
STAA ICPAR ;关闭累加器
speed1:LDAA need_speed1
LDAB PACN1
STAB cur_speed_h
CMPA cur_speed_h
BEQ speed2 ;如果相等就跳转
BHS big1 ;如果大于or相等,跳转
LDD low_speed ;电机low_speed的PWM占空比为20%
STD PWMDTY23
BRA next_text_speed
big1:LDD high_speed ;电机hign_speed的PWM占空比为90%
STD PWMDTY23
BRA next_text_speed
speed2:LDAA need_speed2
LDAB PACN0
STAB cur_speed_l
CMPA cur_speed_l
BHS big2 ;如果大于或等于,跳转
LDD low_speed ;电机low_speed的PWM占空比为20%
STD PWMDTY23
BRA next_text_speed
big2:LDD high_speed ;电机hign_speed的PWM占空比为90%
STD PWMDTY23
next_text_speed:
CLR PACN0
CLR PACN1
LDAA #$03
STAA ICPAR ;打开累加器
;*****************************************************************************
JMP AD_VUP
;**********************主程序结束,循坏进入AD_VUP******************************
;******************************************************************************
EndlessLoop:
LDX #1 ; X contains counter
CouterLoop:
STX Counter ; update global
BSR CalcFibo
STD FiboRes ; store result
LDX Counter
INX
CPX #24 ; larger values cause overflow
BNE CouterLoop
BRA EndlessLoop ; restart.
; Function to calculate fibonacci numbers. Argument is in X.
DelaySub: ldx #$01
Delay: ldaa #$01
Delay1: ldab #$01
Delay2:
nop
dbne b,Delay2
dbne a,Delay1
dbne x,Delay
rts
CalcFibo:
LDY #$00 ; second last
LDD #$01 ; last
DBEQ X,FiboDone ; loop once more (if X was 1, were done already)
FiboLoop:
LEAY D,Y ; overwrite second last with new value
EXG D,Y ; exchange them -> order is correct again
DBNE X,FiboLoop
FiboDone:
RTS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -