$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 (JDE1S.A51) ;------------------------------------------------------------------------ ;Programmbeschreibung ;------------------------------------------------------------------------ ;Programm: Jede 1 sek soll ein Vorgang ausgeloest werden ; Autoreload Betrieb des Timer 0 ; 250µs mal 4000 = 1 sek ; 250µs werden von Timer0 erzeugt ; Innere + Aeussere Schleife (20 mal 200) ; Interruptbetrieb ; ; ; ;Erstellt am: Montag, 8. Januar 2007 07:22:16 ;Programmiert: ; ;Verwendete Einspruenge: keine ; ;Verwendete Unterprogramme: keine ; ; ;Verwendete Register und Variable: ;Registerbank(0) ;R2 ist Zaehlregister ;R3 ist Zaehlregister ;Kommentar: ; ;Aenderungen: ;Geaendert am: Montag, 8. Januar 2007 07:22:16 ; ; ;------------------------------------------------------------------------ ;Initialisierungsteil fuer allgemeine Konstanten ;------------------------------------------------------------------------ CSEG AT 0H ;Legt absolute Codesegmentadresse auf 0h jmp INIT ; ;------------------------------------------------------------------------ ;Interrupt-Vektoren ;------------------------------------------------------------------------ ORG 0Bh ;Interruptvektor Timer0 call ISR_T0 ;Intzerrupt Service-Routine aufrufen reti ;Return from Interrupt ;------------------------------------------------------------------------ ;Initialisierungsteil fuer On-Chip Peripherie ;------------------------------------------------------------------------ ORG 100H ;Programmstart bei 100H INIT: mov sp,#30h ;Stack-Pointer auf setb EAL ;allgemeine Interruptfreigabe setb ET0 ;Timer0 mov TH0,#6h ;Timer0 TH0=6 mov TMOD,#00000010b ;Timer0 auf Autoreload Betrieb mov R2,#200 ;Zaehlregister mov R3,#20 ;------------------------------------------------------------------------ ;Programmschleife ;------------------------------------------------------------------------ ABFRAGE: jnb P1.3,START ;Programm-Start jmp ABFRAGE ;Warte-Schleife START: setb TR0 ;Timer0 starten jmp ABFRAGE ;Sprung zur Abfrage ISR_T0: djnz R2,WEITER1 ;bis 4000 zaehlen mov R2,#200 ;Register neu laden djnz R3,WEITER1 mov R3,#20 ;Register neu laden cpl P3.2 ;Funktion wenn 1 sek erreicht wurde call NOP_F ;hier kann die eigentliche Funktion ausgeführt sein WEITER1: ret ;Interrupt-Service-Routine beenden NOP_F: nop ret end