;-------------------------------------------------------------------- ;-------------------------------------------------------------------- ;-- Matura Projekt SAYKIN Ferdi (Gruppe 6) 22.-27.Mai 2006 -- ;----- Messung der Beleuchtungsstärke durch TSL220 mit Timer2 ----- ;-------- Messbereich: 1-1000uW/cm^2 -------- ;-------------------------------------------------------------------- ;-------------------------------------------------------------------- $ INCLUDE (80C552.DEF) ;Definitionen 8052 $ INCLUDE (WORK.DEF) ;Definitionen des Projektes ORG 8000h ;Beginn bei 08000h (für den Kit) _RESET: LJMP START ORG 8400h START: ;-------------------------------------------------------------------- INIT: orl TM2CON,#10110001b ;16bit überlauf+externer reset möglich(pin) ; +Vorteiler:00->fosc+t2 betrieb als timer(Zeitgeber) orl CTCON,#00000010b ;sichern des zähler-inhaltes in Register0. ; Nach Setzen dieses Bits->Sicherung des Inhaltes ; durch Anlegen einer fallenden Flanke an Pin CT0I orl TM2IR,#10000001b ;CT0 Interruptflag, damit externer Int.am Pin möglich ;setb TR0 ;Timer 0 Run. When this bit is set Timer 0 is turned on. ;When this bit is cleared Timer 0 is off. ;-------------------------------------------------------------------- main: ljmp main lcall char_in ;testweise char_in ;-------------------------------------------------------------------- ;org 800Bh ; (((( Timer Interrupt SFR )))) Adresse ; ; mov tl0,#10011001b ;Timerlowwerte damit der Timerendwert 64000 ist ; mov th1,#00011001b ;Timerhighwerte damit der Timerendwert 64000 ist ; djnz counterl,aus ;Verschachtelter 16 Bit Zähler zum Zählen der Timerüberläufe ; dec counterh ; ---||--- ;aus: ; reti ;Return vom Interrupt ;-------------------------------------------------------------------- ;org 8003h ; (((( externer Interrupt SFR )))) Adresse ; ; ; mov r0,#30h ;30h in R0 geschoben ; mov @r0,tl0 ;timerLOWwert von Impuls A auf 30h ; inc r0 ;31h ; mov @r0,th0 ;timerHIGHwert von Impuls A auf 31h ; inc r0 ;32h ; mov @r0,counterlow ;counterLOWwert in 32h ; inc r0 ;33h ; mov @r0,counterhigh ;counterHIGHwert in 33h ; setb impulsBbit ;ImpulsBbit wird gesetzt [um die Werte von Impuls B für später aufzuheben] ; jmp int_ende ;überspringe Impuls B falls ImpulsBbit nicht gesetzt ; ;int_ende: ; reti ;Return vom Interrupt ; ;end