$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 (servo)
;------------------------------------------------------------------------
;Programmbeschreibung
;------------------------------------------------------------------------
;Programm:Pulsweitenmodulation mit Timer 2 zur Servomotoransteuerung, 
;         Ausgabe an Port 1.1 (VG1/C13). 
;	  Periodendauer 20ms
;	  T2 - Pulsweite 0,5ms 
;	  T3 - Pulsweite 3 ms; 
; 	  
;Grundlegende Funktion:
;* der Reloadwert im CRC legt die Periodendauer fest
;* der Wert im Register CC1 legt das Tastverhaeltnis fest
;
;Datum: 12.Januar 2001         
;Programmiert: J. Walter
;
;Verwendete Einspruenge: keine 
;
;Verwendete Unterprogramme: keine       
;
;
;Verwendete Register und Variable:
;Registerbank(0)        
;R1     Wertuebergabe des A/D Wertes             
;
;Kommentar: 
;
;Aenderungen:
;Datum:
;
;
;------------------------------------------------------------------------
;Initialisierungsteil für allgemeine Konstanten
;------------------------------------------------------------------------
Periode_low     EQU 0E0H	;legt die Periodendauer fest 20ms
Periode_high    EQU 0B1H	;45536 = 0B1E0H
PWM_05_low      EQU 00CH   	;Compare Wert 0.5ms = 19.5ms
PWM_05_high     EQU 0FEH	;Compare Wert FE0CH
PWM_20_low      EQU 048H   	;Compare Wert 3.0ms = 17.0 ms
PWM_20_high     EQU 0F4H	;Compare Wert F830H

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
;------------------------------------------------------------------------

PWM:
jnb P1.2,PW05     		;Taste 2 betaetigt?
jnb P1.3,PW20			;Taste 3 betaetigt?
jmp PWM	

PW05:	              	
mov  CCL1,#PWM_05_low		;P1.1 Compare Capture Low Byte  
mov  CCH1,#PWM_05_high		;CC High Byte
jmp PWM

PW20:
mov  CCL1,#PWM_20_low		;P1.1 Compare Capture Low Byte  
mov  CCH1,#PWM_20_high		;CC High Byte
jmp PWM

end