$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 (PWM16SUB.A51)

;------------------------------------------------------------------------

;Programmbeschreibung

;------------------------------------------------------------------------

;Programm:

;im Uhrzeigersinn PW erhöhen

;gegen Uhrzeigersinn PW erniedrigen

;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_LINKS     EQU 07CH     ;FC7C

PWM_H_LINKS   EQU 0FCH  ;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_LINKS        ;Compare Capture Low Byte 

mov CCH1,#PWM_H_LINKS         ;CC High Byte

 

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

WARTE3:

mov R2,#0FH                   ;Länge innere Schleife

WARTE2:

djnz R2,WARTE2

djnz R3,WARTE3

mov A,CCL1                    ;in LOW in Akku

subb A,#1                     ;-1

mov CCL1,A                    ;wieder zurück in Compare 1 LOW

jnz KALIBRATION               ;Falls Akku  nicht 0 weiter herunterzaehlen

mov A,CCH1                    ;HIGH Compare in AKKU

subb A,#1                     ;-1

mov CCH1,A                    ;Wieder zurück in Compare 1 HIGH

mov A,CCL1                    ;unmittelbar LOW-Byte herunterzaehlen, ansonsten springt Servo

subb A,#1

mov CCL1,A

jmp KALIBRATION        

 

 

;------------------------------------------------------------------------

;Schreiben von Compare 1 in externen Speicher 2000H

;------------------------------------------------------------------------

T1_3:

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