$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 (SCHRAUBENZ.A51) ;------------------------------------------------------------------------ ;Programmbeschreibung ;------------------------------------------------------------------------ ;Programm: An einer Verpackungsanlage sollen jeweils 200 Schrauben verpackt werden. Nachdem 200 Schrauben ; durch eine Lichtschranke gefallen sind stellt ein Servomotor jeweils eine Klappe zwischen Stellung1 und ; Stellung2. ; ; PDL: ; Servomotor: Timer 2- PWM ; Schrauben zählen: Timer 0 Interrupt (oder Timer 1) ; Zählbetrieb ; Lichtschranke funktioniert ohne Prellen ; Polling / Interrupt ; ;Erstellt am: Montag, 22. Januar 2007 07:29:36 ;Programmiert: Juergen Dietz ; ;Verwendete Einspruenge: keine ; ;Verwendete Unterprogramme: keine ; ; ;Verwendete Register und Variable: ;Registerbank(0) ; ; ;Kommentar: ; ;Aenderungen: ;Geaendert am: Montag, 22. Januar 2007 07:29:36 ; ; ;------------------------------------------------------------------------ ;Initialisierungsteil fuer 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 Interrupt-Vektor ;------------------------------------------------------------------------ ORG 0BH INT_TIMER0: ;Timer 0 Interrupt Vektor call ISR_T0 reti ;------------------------------------------------------------------------ ;Initialisierungsteil für On-Chip Peripherie ;------------------------------------------------------------------------ ORG 100H ;Programmstart bei 100H INIT: mov IEN0,#10000010B ;Interrupt Freigabe der Interrupt so einstellen, wenn wir ohne richtige ;serial anschluss, sonst mov IEN0,#10010010B wenn díe Hardware verbunden ist ;Timer0 Initialisierung mov TMOD,#00000110B ;8-Bit-Zaehler im Reloadbetrieb setb TR0 ;Start des Timers mov TH0, #38h ;High Bite mit 56 laden mov TL0, #38h ;Low Bite mit 56 laden ;Timer2 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 ;------------------------------------------------------------------------ ABFRAGE: jnb 20h.0,PW05 ;Stellung1 jb 20h.0,PW20 ;Stellung2 ajmp ABFRAGE PW05: ;Stellung1 mov CCL1,#PWM_05_low ;P1.1 Compare Capture Low Byte mov CCH1,#PWM_05_high ;CC High Byte jmp ABFRAGE PW20: ;Stellung2 mov CCL1,#PWM_20_low ;P1.1 Compare Capture Low Byte mov CCH1,#PWM_20_high ;CC High Byte jmp ABFRAGE ISR_T0: cpl 20h.0 ;komplementiere 0. Bit in 20h ret end