$nomod51 ;der Modus fuer 8051 wird abgeschaltet
$debug
$nolist ;es wird kein Listing fuer reg535 erstellt
$include(reg535.pdf) ;die 80535-spezifischen Daten
$list ;es wird ein Listing erstellt
$ title (PWM16ADD.A51)
;------------------------------------------------------------------------
;Programmbeschreibung
;------------------------------------------------------------------------
;Programm:
;Pulsweitenmodulation mit Timer 2 zur Servomotoransteuerung,
;Servomotor in Stellung Links = 19,1ms = 64636 = FC7CH
;Servomotor in Stellung Mitte = 18,5ms = 64036 = FA24H
;Servomotor in Stellung Rechts = 17,9ms = 63436 = F7CCH
;T2 startet Anfahrt langsam auf T3
;bis Servo-Schenkel T3 berührt
;
; Ausgabe an Port 1.1 (VG1/C13).
; Periodendauer 20ms
; T2 - Pulsweite variabel
;
;
;
;Datum: 29.Dezember 2002
;Programmiert: J. Walter
;
;Verwendete Einspruenge: keine
;
;Verwendete Unterprogramme: keine
;
;
;Verwendete Register und Variable:
;Registerbank(0)
;
;Kommentar:
;
;Aenderungen:
;Datum:
;
;
;------------------------------------------------------------------------
;Initialisierungsteil für allgemeine Konstanten
;------------------------------------------------------------------------
Periode_low EQU 0E0H ;legt die Periodendauer fest 20ms
Periode_high EQU 0B1H ;45536 = 0B1E0H
PWM_L_RECHTS EQU 0CCH ;F7CC
PWM_H_RECHTS EQU 0F7H ;Compare Wert
CSEG AT 0H ;Legt absolute Codesegmentadresse auf 0h
jmp INIT
;------------------------------------------------------------------------
;Initialisierungsteil für On-Chip Peripherie
;------------------------------------------------------------------------
ORG 100H ;Programmstart bei 100H
INIT:
;Timer Intitialisierung
mov T2CON,#00010001B ;Timer2 Einstellung:Timer mit f=f(osz)/12
;Mode 0 ->Reload bei Ueberlauf
mov CCEN,#00001000B ;Compare Mode des CC1 freigeben
mov CRCL,#Periode_low ;Low Byte von Compare Reload Capture
mov CRCH,#Periode_high ;High Byte von Compare Reload Capture
;------------------------------------------------------------------------
;Programmschleife
;------------------------------------------------------------------------
mov CCL1,#PWM_L_RECHTS ;Compare Capture Low Byte
mov CCH1,#PWM_H_RECHTS ;CC High Byte
mov DPL,CCL1 ;Datenpointer missbrauchen
mov DPH,CCH1 ;
PWM:
jb P1.2,PWM ;Start mit Taste 2 betaetigt?
;------------------------------------------------------------------------
;Anfahren von Taster P1.3
;------------------------------------------------------------------------
KALIBRATION:
jnb P1.3,T1_3 ;Taster T1_3 betätigt
inc DPTR
mov CCL1,DPL ;in Compare-Register 1
mov CCH1,DPH
WARTE3:
mov R2,#0FH ;Länge innere Schleife
WARTE2:
djnz R2,WARTE2
djnz R3,WARTE3
jmp KALIBRATION
T1_3:
;------------------------------------------------------------------------
;Schreiben von Compare 1 in externen Speicher 2000H
;------------------------------------------------------------------------
mov DPTR,#2000H ;Adresse 2000
mov A,CCH1 ;High-Byte Compare
movx @DPTR,A ;High-Byte in 2000H
mov A,CCL1 ;Low-Byte in Akku
inc DPTR ;Adresse DPTR 2001H
movx @DPTR,A ;Low-Byte in 2001H
jmp INIT
end