Gast
#8308
;AD-Wandler - Programm für 80C552
;Assembler ist von Metalink (umsonst bei Philips.de etc.)
$mod552
datanf set 0
datend set 7fh
org 0
sjmp start
org 3
clr EX0 ;Taste deaktivieren
acall _reti ;weitere Interrupts enablen
acall _ppause ;große Pause für die Taste
reti
org 0bh
dec A
reti
org 53h
mov 20h,ADCON ;Low-Byte von ADC
mov 1fh,ADCH ;High-Byte von ADC
anl ADCON,#239 ;vor Neustart ADCI löschen!
orl ADCON,#8 ;neue Wandlung starten
anl 20h,#11010000b ;Bit1-0 + ADCI bleiben
reti
org 80h
start: mov IEN0,#83h ;Enable All + T0/EX0 -Interrupt
mov TMOD,#0 ;Timer0/16bit
orl PCON,#1 ;warten auf Tastendruck /EX0
mov DPTR,#datanf-1 ;initialisieren Speicher
setb EAD ;AD-Wandler-Interrupt aktivier.
orl ADCON,#8 ;Start AD-Wandler
acall _click ;Programm zur Aufnahme von Volt
clr EAD ;danach Interrupt sperren
acall _pause ;zum Auslaufen d. letzt. Wandl.
anl ADCON,#239 ;danach ADCI löschen (falls
;Unterprogramm _click öfter
;aufgerufen wird)
;hier kommen noch Befehle für Unterprogramme (Schnittstelle), die
;natürlich hier auch noch fehlen!
org 100h
_click: jnb 20h.4,_click ;warten auf ADC-fertig/K1
clr 20h.4 ;Statusbit init./Bit1-0 remain
mov B,20h ;Bit1-0 retten/K1
mov A,1fh ;Bit9-2 laden/K1
inc DPTR
movx @DPTR,A ;Bit9-2 von K1 speichern
jnb 20h.4,$ ;warten auf ADC-fertig/K2
clr 20h.4 ;Statusbit init./Bit1-0 remain
mov A,1fh ;Bit9-2 laden/K2
rr A
rr A
anl A,#00111111b ;Bit9-4 bleiben übrig
orl A,B ;Bit1-0/K1+Bit9-4/K2
inc DPTR
movx @DPTR,A ;speichern
mov A,1fh ;Bit9-2 erneut laden/K2
anl A,#00000011b ;Bit3-2 bleiben übrig
orl A,20h ;Bit1-0+3-2
rr A
rr A
mov B,A ;Bit3-0 retten
jnb 20h.4,$ ;warten auf ADC-fertig/K3
clr 20h.4 ;Statusbit init./Bit1-0 remain
mov A,1fh ;Bit9-2 laden /K3
swap A ;Bit9-6 als unteres Nibble
anl A,#00001111b ;bleiben übrig
orl A,B ;Bit3-0/K2+Bit9-6/K3
inc DPTR
movx @DPTR,A ;speichern
mov A,1fh ;Bit9-2 erneut laden /K3
swap A ;Bit5-2
anl A,#11110000b ;bleiben übrig
mov B,A ;Bit5-2 retten
mov A,20h ;Bit1-0 laden/K3
swap A ;Bit1-0 auf Bitposition 3-2
orl A,B ;Bit5-0
mov B,A ;Bit5-0 retten/K3
jnb 20h.4,$ ;warten auf ADC-fertig/K4
clr 20h.4 ;Statusbit init./Bit1-0 remain
mov A,1fh ;Bit9-2 laden/K4
rl A
rl A
anl A,#00000011b ;Bit9-8 bleiben übrig
orl A,B ;Bit5-0/K3 + Bit9-8/K4
inc DPTR
movx @DPTR,A ;speichern
mov A,1fh ;Bit9-2 erneut laden/K4
rl A
rl A
anl A,#11111100b ;Bit7-2 bleiben übrig
mov B,A ;Bit7-2 retten
mov A,20h ;Bit1-0 laden/K4
rl A
rl A
orl A,B ;Bit7-0/K4
inc DPTR
movx @DPTR,A ;speichern
mov A,#datend ;bis Speicher voll ist o.ä.
cjne A,DPH,Q000
ret ;sonst Rücksprung
Q000: ajmp _click
org 200h
_pause: djnz ACC,_pause
ret
org 280h
_ppause: mov A,#10
setb TR0
jnz $
clr TR0
reti
org 300h
_reti: reti
end
;****************************************************
;Programm läßt den AD-Wandler fast ohne Unterbrechung
;laufen, speichert die Resultate in 1fh/20h ab - muß
;sein, da sonst die Resultate "erschüttert" sind (der
;Monitor auf dem PC legt diesen Ausdruck nahe);
;während die nächste Wandlung läuft, wird das alte 10bit-
;Ergebnis redundanzfrei
;, d.h. ohne Speicherplatzverschwendung, abgespeichert;
;insgesamt werden bei einem U-Programm-Durchlauf 4 mal
;10bit-Resultate auf 5 mal 8bit -Speicherplätze abgespeichert
;(KGV von 8 und 10 ist 40);
;wer will, kann sich von mir das komplette Programm gegen
;eine Gebühr von Porto + Diskette (kann nicht viel sein)
;schicken lassen (erst mal umsonst, da ich nicht weiß, was
;ich selber bezahlen muß); dazu gehört jedoch noch Controller-
;seitig das Schnittstellen-Programm und zur grafischen Wieder-
;gabe ein PC-Programm (läuft unter DOS), das die Stichproben
;des AD-Wandlers auf dem Monitor anzeigt, d.h. auf 8bit reduziert
;bzw. mit Page-Wechsel auch 10bit; dieses Programm ist sicher
;noch verbesserungswürdig! der Code ist in jedem Fall free!
;zu erhalten bei Thomas Strauß
Landsberger Allee 81
10407 Berlin - Prenzlauer Berg
0175-254 80 83
Postkarte schicken!