Dieses recht einfache Modul bietet die Möglichkeit die Steuerspannung zur Steuerung des Motors von 0 V bis zum Maximalwert 10 V im Rahmen des 8-Bit DA-Wandlers (von 0...255) über die Eingabetastatur zu definieren. Es besteht nur aus einer Schleife, in der die eigentliche ,,Tastatur-Steuerroutine'' immer wieder mit einer 0.3 Sek. Verzögerung (WAIT_LOOP 3) aufgerufen wird, bis das Modul verlassen wird.
; ====================================================================
; manual control main program
; ----------------------------------
; direct manual control of the PCF 8591 by controlling the "Power"
; ----------------------------------
manual_control_main:
rcall mod_manctrl_init ; initialize manual control env.
...
; manual control loop begin...
mcntrl_loop:
WAIT_LOOP 3 ; software timer
rcall speed_control ; key controlled speed of rotation
rcall check_keypress ; manage keyboard events...
breq mcntrl_loop ; ...nozzzin pressed...
cpi temp1, key_mask0 ; has "stop" been pressed?
brne mcntrl_loop ; if not, we looooooooooooop...
; manual control loop end...
; ----------------------------------
rcall stop_rotation ; we NEVER send stop directly to PCF
rcall mctl_funcmode ; do some screen io...
manual_control_main_ret:
ret
Dabei wird der Mechanismus der nummerischen Werteingabe (siehe Absch.
7.6.2.2) verwendet um dem ,,Power''-Wert
über die Tastatur zu kontrollieren, dieser wird dann zum D/A-Wandler
PCF8591 geschickt und in der LCD-Anzeige zusammen mit dem aktuellen
Drehwinkel ständig aktualisiert.
Die eigentliche Tastatursteuerung geschieht in der Subroutine speed_control. Das High-Level Tastaturkontroll-Unterprogramm keyproc_varvalue_preset führt anhand der aktuellen Tastenstati die konkrete Tasten-Wertumsetzung, unter Berücksichtigung der Tastendynamik, durch. Die Geschwindigkeit der Wertänderung nimmt daher mit der Tasten-Haltezeit, wie in Absch. 7.6.2.2 beschrieben, zu.
; ====================================================================
; manual control subroutine for speed control
; ----------------------------------
; input: none
; output: none
; affected: temp1
; ----------------------------------
speed_control:
LDIWR REG_A, RotSpeedMax
MOVWR MREG_A, REG_A ; inp: maxmum 8-bit value
LDSWR LREG_A, rot_speed_value ; inp: value to modify
rcall keyproc_varvalue_preset ; call speed keyboard function
STSWR rot_speed_value, LREG_A ; storing the "new" rot_speed_value
rcall mctl_funcmode ; screen io...
lds temp1, rot_speed_value
rcall PCF_SEND_VALUE ; send "new" speed value to pcf
ret
Der Modul-Code befindet sich (lt. Code-Organisation in Absch. 7.5.3) in der Datei mod/man_ctrl.asm.
gerhard.reithofer@tech-edv.co.at