Listado 6. Listado del Programa de Control de Velocidad (página 3 de 4)
0261 26FC
0263 3CE3
0265 3CE0
0267 20E9
;**********************************************************
;DoSpeedDn maneja el cierre del pulsador Speed Down
;Rebotes de pulsador incrementan el duty cycle hasta soltar.
; Duty cycle incrementado aprox cada 24 ms.
; Ajusta a través del rango completo de veloc. en aprox 6 seg
0269
DoSpeedDn
0269 3DE5
026B 2601
026D 81
DoSpeedDn1
026E A607
DoSpeedDn2
0270 B7E4
0272 3DE4
DoSpeedDn3
0274 26FC
0276 0200 F4 DoSpeedDn4 BRSET SpeedUp,PortA,DoSpeedDn1
0279 B6E3
027B A110
027D 27EE
027F A603
0281 B7E4
0283 3DE4
DoSpeedDn5
0285 26FC
0287 3AE3
0289 3AE0
028B 20E9
;**********************************************************
;En las interrupciones RTI y TOF participa 1 vector, TimerInt
;se usa para decidir que fuente de servicio fue pedida.
;Las rutinas de servicio TOFInt y RTIInt, ambas son usadas
;para generar una señal PWM.
028D
TimerInt
028D 0E08 04
0290 0C08 12
0293 80
;*********************************************************
;Respuesta a interrupción TOF - Decrementa PWMCoarse, cuando
;0... compara PWMFine a TCR. Cuando pasa TCR, PWMFine borra
;el pin de salida PWM y desactiva futuras TOF. RTI re-activa.
;
0294
TOFInt
0294 3AE1
0296 260A
0298 B6E2
TOFInt1
029A B109
CmpMore
029C 22FC
029E 1F00
02A0 1B08
02A2 16 08
ExitTOF
02A4 80
;**********************************************************
;Respuesta a interrupción RTIF – Pone el pin PWM = 1, y
;activa TOF. Hace PWMCoarse y PWMFine desde DesiredPWM
;
02A5
RTIInt
02A5 3AE4
BNE
DoSpeedUp5
INC
MotorPWM
INC
DesiredPWM
BRA
DoSpeedUp4
EQU
*
TST
MotorOnFlg
BNE
DoSpeedDn2
RTS
LDA
#DebounceT
STA
RTIDlyCnt
TST
RTIDlyCnt
BNE
DoSpeedDn3
LDA
MotorPWM
CMPA
#MinPWM
BEQ
DoSpeedDn1
LDA
#RampTime
STA
RTIDlyCnt
TST
RTIDlyCnt
BNE
DoSpeedDn5
DEC
MotorPWM
DEC
DesiredPWM
BRA
DoSpeedDn4
EQU
*
BRSET TOF,TSCR,TOFInt
BRSET RTIF,TSCR,RTIInt
RTI
EQU
*
DEC
PWMCoarse
BNE
ExitTOF
LDA
PWMFine
CMPA
TCR
BHI
CmpMore
BCLR
PWM,PortA
BCLR
TOIE,TSCR
BSET
TOFR,TSCR
RTI
EQU
*
DEC
RTIDlyCnt
110
;No, continua esperando
;Si, incrementa velocidad motor
;Adelanta el valor deseado de PWM
;Bucle para pulsador,
;hasta pulsado
;¿Motor en marcha?
;SI, bifurca
;No, pulsador no está pulsado
;Rebotes retardan aprox 50 ms
;Inicializa software del contador
;interrupción RTI decrementa éste
;Lazo hasta RTIDlyCnt = 0
;RTS si no es pulsado
;Pulsado, acelera.
;¿aún a mínima velocidad?
;Si es SI, volver.
;No, rampa retardo(3*8.2ms =24.6)
;Guarda contador software.
;¿Rampa de retardo expirada?
;No, continua la espera.
;Si, decrece la veloc. del motor
;Reduce valor deseado PWM.
;Lazo para pulsador aún pulsado.
;¿interrupción TOF?
;¿interrupción RTI?
;No debe tener aquí
;(código defensivo)
;¿PWMCoarse = 0?
;No. Borra TOF y vuelve
;compara los 4 superiores de TCR
;Lazo hasta PWMFine <= TCR
;Pone la salida PWM = 0V
;Desactiva la interrupción TOF
;Reset el Flasg de interr. TOF
;Vuelve al programa principal
;RTIDlyCnt = RTIDlyCnt - 1.