Listado 6. Listado del Programa de Control de Velocidad (página 2 de 4)
020A 5C
020B 26FC
020D A61C
020F B708
0211 A610
0213 B7E3
0215 9A
;*********************************************************
;Bucle del programa principal.
;Lee los pulsadores del control motor.
;Si un pulsador es pulsado, BSR realiza la acción pedida.
;El Bucle continuamente vigila el cierre de los pulsadores.
0216 0000 02 Main
0219 AD0C
021B 0200 02 Main1
021E AD25
0220 0400 F3 Main2
0223 AD44
0225 20EF
;*********************************************************
;DoOnOff maneja los rebotes del cierre del pulsador On/Off
;del Motor y espera que se deje de pulsar.
0227
DoOnOff
0227 A607
0229 B7E4
022B 3DE4
DoOnOff1
022D 26FC
022F 0000 12
0232 0100 FD
0235 3DE5
0237 2607
0239 3CE5
023B B6E3
motor
023D B7E0
023F 81
0240 3FE0
DoOnOff2
0242 3FE5
0244 81
DoOnOff3
;***********************************************************
;DoSpeedUp maneja los rebotes del cierre del pulsador Speed Up
; incrementa el ciclo de trabajo hasta que se deje de pulsar
; El ciclo de servicio se incrementa aprox. 24 ms.
; Ajusta a través de todo el rango de velocidad aprox 6 seg.
0245
DoSpeedUp
0245 3DE5
0247 2601
0249 81
DoSpeedUp1
024A A607
DoSpeedUp2
024C B7E4
024E 3DE4
DoSpeedUp3
0250 26FC
0252 0200 F4 DoSpeedUp4 BRSET SpeedUp,PortA,DoSpeedUp1 ;RTS si Pulsador Off
0255 B6E3
0257 A1FF
0259 27EE
025B A603
025D B7E4
025F 3DE4 DoSpeedUp5
INCX
BNE
ClrLoop
LDA
#$1C
STA
TSCR
LDA
#MinPWM
STA
MotorPWM
CLI
BRSET MotorOnOff,PortA,Main1 ;¿Pulsado On/Off?
BSR
DoOnOff
BRSET SpeedUp,PortA,Main2 ;Speed Up Pulsado?
BSR
DoSpeedUp
BRSET SpeedDn,PortA,Main ;¿Baja la velocidad?
BSR
DoSpeedDn
BRA
Main
EQU
*
LDA
#DebounceT
STA
RTIDlyCnt
TST
RTIDlyCnt
BNE
DoOnOff1
BRSET MotorOnOff,PortA,DoOnOff3 ;Entonces prueba
BRCLR MotorOnOff,PortA,* ;Espera para pulsador está
TST
MotorOnFlg
BNE
DoOnOff2
INC
MotorOnFlg
LDA
MotorPWM
STA
DesiredPWM
RTS
CLR
DesiredPWM
CLR
MotorOnFlg
RTS
EQU
*
TST
MotorOnFlg
BNE
DoSpeedUp2
RTS
LDA
#DebounceT
STA
RTIDlyCnt
TST
RTIDlyCnt
BNE
DoSpeedUp3
LDA
MotorPWM
CMPA
#Percent100 ;¿ha total velocidad?
BEQ
DoSpeedUp1
LDA
#RampTime
STA
RTIDlyCnt
TST
RTIDlyCnt
109
;¿Apunta a siguiente pos./ hecho?
;No; continua borrar la RAM
;Habilita interrup. TOF y RTI
;Inicializa PWM a la mín. veloc.
;Habilita interrupciones
;Si es SI, ir a DoOnOff
;Si es SI, ir a DoSpeedUp
;Si es SI, ir a DoSpeedDown
;Repetir el bucle continuamente
;DebounceT*RTI
;Inicializa contador software
;interrupción RTI decrementa este
;Bucle hasta RTIDlyCnt = 0
;si el pulsador está abierto,
;no ha habido buena pulsación.
;dejado de pulsar
;¿Motor aún en marcha?
;Si, para el motor.
;No, pone el flag 'MotorOn'
;y coge la última veloc. del
;Activa la salida PWM
;Vuelve (1 de 2)
;Desactiva la salida PWM
;Borra el flag 'MotorOn'
;Vuelve (2 de 2)
;¿Motor en marcha?
;Si, bifurca
;No, los pulsadores no trabajan
;Retardo de rebote (aprox 50 ms)
;Inicializa el contador software
;interrupción RTI decrementa éste
;bucle hasta RTIDlyCnt = 0
;Pulsador pulsado, subir veloc.
;Si es SI, volver
;No, coge rampa retardo de tiempo
;(3 * 8.2Ms = 24.6)
;Guarda contador software
;¿Rampa retardo tiempo expirado?
= 50mS