$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 (pwm1)
;------------------------------------------------------------------------
;Programmbeschreibung
;------------------------------------------------------------------------
;Programm:Pulsweitenmodulation mit Timer 2, 
;         Ausgabe an Port 1.1 (VG1/C13). 
; 	  Mit der ADDA-Karte kann am Potentiometer die Pulsweite ein-
;	  gestellt werden und an P1.1 mit einem Oszillographen beobachtet
; 	  werden. 
;
;Grundlegende Funktion:
;* der Reloadwert im CRC legt die Periodendauer fest
;* der Wert im Register CC1 legt das Tastverhaeltnis fest
;
;Datum:15.10.1995         
;Programmiert: Jens Weber, Stephan Schrodt
;
;Verwendete Einspruenge: keine 
;
;Verwendete Unterprogramme: keine       
;
;
;Verwendete Register und Variable:
;Registerbank(0)        
;R0     Wertuebergabe des A/D Wertes             
;
;Kommentar: 
;
;Aenderungen:
;Datum:
;
;
;------------------------------------------------------------------------
;Initialisierungsteil für allgemeine Konstanten
;------------------------------------------------------------------------
Load_low        EQU 0   ;Reloadwert, legt die Periodendauer fest
Load_high       EQU 255 ;hier 0FF00H=256 Microsek. bei 1 MHz Takt
Comp_low        EQU 0   ;Compare Wert                      
Comp_high       EQU 255 ;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,Load_low      ;Low Byte von Compare Reload Capture
MOV  CRCH,Load_high     ;High Byte von...
MOV  CCL1,Comp_low      ;Compare Capture Low Byte  
MOV  CCH1,Comp_high     ;CC High Byte
          


;------------------------------------------------------------------------
;Programmschleife
;------------------------------------------------------------------------

PWM:     
LCALL  A_D              ;A/D Wandlung aufrufen
JMP    PWM              ;kontinuierliches Signal, d.h. wieder von vorne

;------------------------------------------------------------------------
;Unterprogramm fuer A/D Wandler
;------------------------------------------------------------------------
A_D:     
  
MOV  DAPR,#0		;Wandlung starten, Meßbereich 0-5 Volt
JB   BSY,$              ;solange warten bis Wandlung beendet ist
MOV  CCL1,ADDAT         ;gewandeltes Ergebnis in CCL1
RET                     ;Ruecksprung zu Hauptprogramm


END