$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 (ServoLR) ;------------------------------------------------------------------------ ;Programmbeschreibung ;------------------------------------------------------------------------ ;Programm:Pulsweitenmodulation mit Timer 2 zur Servomotoransteuerung, ; Ausgabe an Port 1.1 (VG1/C13). ; Periodendauer 20ms ; Pulsweite variiert von 17ms - 19.5ms F448H-FE0CH ; 156 Schritte - ; T2 - Pulsweite kleiner ; T3 - Pulsweite größer ; Timer 0 16-Bit-Zähler ; ;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) ; ; ;Kommentar: ; ;Aenderungen: ;Datum: ; ; ;------------------------------------------------------------------------ ;Initialisierungsteil für allgemeine Konstanten ;------------------------------------------------------------------------ Periode_low EQU 0E0H ;legt die Periodendauer fest 20ms Periode_high EQU 0B1H ;45536 = 0B1E0H PWMANL EQU 030H ;Compare Wert 2ms => 18 ms PWMANH EQU 0F8H ;Compare Wert F830H CSEG AT 0H ;Legt absolute Codesegmentadresse auf 0h jmp INIT ;------------------------------------------------------------------------ ;Interrupt-Vektoren ;------------------------------------------------------------------------ ORG 000BH call ISRTIMER0 reti ;------------------------------------------------------------------------ ;Initialisierungsteil für On-Chip Peripherie ;------------------------------------------------------------------------ ORG 100H ;Programmstart bei 100H INIT: mov TMOD,#00000001B ;Timer 0 Initialisierung 16-Bit mov IEN0,#10010010B ;Interrupt Freigabe 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 mov CCH1,#PWMANH ;Pulsweitenmodulation Anfangswert mov CCL1,#PWMANL setb TR0 ;Timer0 läuft los ;------------------------------------------------------------------------ ;Programmschleife ;------------------------------------------------------------------------ PWM: jmp PWM ISRTIMER0: jb P1.2,TASTE3 ;T2 abwaerts nicht betätigt clr C mov A,CCL1 ;Inhalt von CCL1 subb A,#16 ;oberes Nibble um 1 erniedrigen mov CCL1,A ;Neuer Comparewert LB jnc TASTE3 ;High-Byte wird nicht verändert mov A,CCH1 ;Inhalt von CCH1 dec A ;Inhalt um 1 erniedrigen mov CCH1,A ;Neuer Comparewert HB TASTE3: jb P1.3,ISRENDE ;T3 aufwaerts nicht betätigt clr C mov A,CCL1 ;Inhalt von CCL1 add A,#16 ;oberes Nibble um 1 erniedrigen mov CCL1,A ;Neuer Comparewert LB jnc ISRENDE ;High-Byte wird nicht verändert mov A,CCH1 ;Inhalt von CCH1 inc A ;Inhalt um 1 erniedrigen mov CCH1,A ;Neuer Comparewert HB ISRENDE: ret end