Indigo
raub_UrhG_vergewaltiger
|
0wnage proggie von mir damals ![;)](/images/smilies/wink.gif) ;******************************************************************************
;* Verfasser: Martin Floimayr *
;* Letzte Änderung: 26.02.2002 *
;* Klasse: 5BHE 2002 *
;* *
;* Feuchtemessung mit Multiplex Anzeigetreiber *
;* =========================================== *
;* *
;* Das Programm soll mittels Timer1 im Counterbetrieb von einer externen *
;* Messelektronik mit NE555+Feuchtesensor die eingelesene Frequenz einer *
;* bestimmten relativen Feuchte zuordnen und auf der 3stelligen Multiplex- *
;* anzeige ausgeben *
;* *
;* Verwendete Register und Baugruppen: *
;* =================================== *
;* Port 3.2 - 3.4 multiplexleitungen *
;* Port 1 Datenausgabe an die Anzeige *
;* R5 - R7 Einer-, Zehner- und Hunderterstelle der Ausgabe *
;* R0 Zeitrastererzeugung *
;* R3, R4 Multiplexverzögerungsvariablen *
;* *
;* Grundsätzliche Funktion: *
;* ======================== *
;* *
;* Timer NE555 erzeugt aus Kapazität des Feuchtesensors HC200 eine Frequenz *
;* 70kHz - 50kHz (entspricht 0 - 100% rH), also einen Frequenzhub von 20kHz. *
;* Das Abfragezeitraster ist 10ms, d.h. betragen die Zählwerte 700-500 Im- *
;* pulse. Die Formel (700-Zählwert)/2 führt letzendlich zur Relativen Feuchte *
;* *
;******************************************************************************
$INCLUDE (reg52.inc)
initial segment code
takt segment code
prog segment code
ausg segment code
delay segment code
tab segment code
ORG 8000h
call INIT ; TIMER0 initialisieren
jmp PROGRAMM ; sprung ins Hauptptogramm
ORG 800bh
jmp RASTER ; Zeitrastererzeugung
;Tabelle aus Excel errechnet
rseg tab
tabelle: DB 100,100,98,97,95,94,93,91,90,89,87,86,85,84,82,81,80,79,77,76,75,74,73,71,70,69,68,67,66,64,63,62,61,60,59,58,57,56,55,54,53,51,50,49,48,47,46,45,44,43,42,41,40,39,39,38,37,36,35,34,33,32,31,30,29,28,27,27,26,25,24,23,22,21,21,20,19,18,17,16,16,15,14,13,12,12,11,10,9,8,8,7,6,5,5,4,3,2,2,1,0
rseg initial
INIT: clr P3.2 ; Multiplexports auf 0
clr P3.3
clr P3.4
mov R0,#0 ; Taktregister auf 0
mov R5,#0 ; Einerstelle auf 0
mov R6,#0 ; Zehnerstelle auf 0
mov R7,#0 ; Hunderterstelle auf 0
; Timer0 initialisieren
mov TMOD,#00000001b ; Timer0 Modus einstellen (16bit Timer)
mov TH0,#0ECh ; Timer HIByte
mov TL0,#078h ; Timer LOWByte (zählraster 5ms)
; Timer1 initialisieren
anl TMOD,#00001111b ; Timer 1 löschen
orl TMOD,#01010000b ; Timer1 Modus einstellen (16bit Counter)
mov TL1,#0 ; TL1 löschen
mov TH1,#0 ; TH1 löschen
setb TR0 ; Timer0 starten
setb TR1 ; Timer1 starten
setb ET0 ; Timer0 Interupt freigeben
setb ET1 ; Timer1 Interupt freigeben
setb EA ; Interupts enablen
ret
rseg takt
RASTER: clr TR0 ; Timer stoppen
MOV TH0,#0ECh ; Timer nachladen
MOV TL0,#078h ; 2ms raster
setb TR0 ; Timer starten
AUS: inc R0 ; Zeitrastervariable erhöhen
inc r1
call AUSGABE ; Werte ausgeben
reti
rseg prog
PROGRAMM:
cjne R0,#1,ENDE ; wenn taktzählregister == 1 == 5ms, dann Anzeige aktualisieren
mov R0,#0 ; taktzählregister rücksetzen
FREQ: clr TR1 ; Timer 1 stoppen
mov A,TL1
mov TL1,#0 ; TL 1 löschen
mov TH1,#0 ; TH 1 löschen
setb TR1 ; Timer 1 starten
cjne r1,#201,ENDE ; Werte im Sekundentakt aktualisieren (200*5ms)
mov r1,#0 ; Taktregister rücksetzen
mov b,#3 ; Wert korrigieren
subb a,b
mov DPTR,#tabelle ; DPTR auf Tabelle setzen
movc a,@a+DPTR ; Tabelle auslesen
mov B,#100 ; B mit 100 laden
div AB ; A durch B
mov R7,A ; Hunderterstelle in R4 schreiben
mov A,B ; Rest in A schreiben
mov B,#10 ; B mit 10 laden
div AB ; A durch B
mov R6,A ; Zehnerstelle in R6 schreiben
mov R5,B ; Einerstelle in R5 schreiben
ENDE: jmp programm ; sprung zum anfang
rseg ausg
AUSGABE:
setb P3.2 ; Einer Anzeige ein
mov P1,R5 ; Einer am Port ausgeben
mov R3,#1
call WAIT ; 1ms warten
clr P3.2 ; Einer Anzeige aus
setb P3.3 ; Zehner Anzeige ein
mov P1,R6 ; Zehner am Prot ausgeben
mov R3,#1
call WAIT ; 1ms warten
clr P3.3 ; Zehner Anzeige aus
setb P3.4 ; Hunderter Anzeige ein
mov P1,R7 ; Hunderter am Port ausgeben
mov R3,#1
call WAIT ; 1ms warten
clr P3.4 ; Hunderter Anzeige aus
ret
rseg delay
WAIT:
mov R4, #250 ; 250 * 4z 1msec (12MHz Takt = 1æs =1z
L0: nop ; 1z +
nop ; 1z +
djnz R4,L0 ; 2z = 4z * 250 = 1 ms
djnz R3,WAIT ; R3mal wiederholen
ret
END
hac, was hab ich assembler coden geliebt
|