BT2k
LOGO

Mikrocontroller VIII
Eingaben

Digitaleingänge
Die interne RAM-Adresse 90h entspricht im Sios dem Digitaleingang. Der Zustand dieses Speichers kann man mit MOV A,DIN in den Akku laden. In diesem einfachen beispiel wird lediglich das Eingangsbyte negiert (Complement: CPL A) und wieder an die Digitalausgänge geschickt (MOV DOUT,A). Somit erscheint an den Digitalausgängen das invertierte Eingangssignal.

0001   0000             DOUT  .equ 0E8H ;D-Ausgang
0002   0000             DIN   .equ 090H ;D-Eingang
0003   0000 
0004   8100             .org 8100H
0005   8100 E5 90       start     mov a,DIN
0006   8102 F4                    cpl a
0007   8103 F5 E8                 mov DOUT,a
0008   8105 80 F9                 sjmp start
0009   8107             .end
tasm: Number of errors = 0


Analogeingänge
Das Einlesen der Analogeingänge erfolgt über ein Unterprogramm im ROM. Die entsprechende Routine steht an Adresse 0177h und erwartet im Akku eine Zahl zwischen 0 bis 3, entsprechend den vier Analogeingängen A bis D. Das Beispielprogramm gibt am Digitalausgang das Ergebnis der AD-Wandlung von Eingang 0 (A) aus.

0001   0000             DOUT  .equ 0E8H  ;D-Ausgang
0002   0000             DIN   .equ 090H  ;D-Eingang
0003   0000             AIN   .equ 0177h ;Analog 0..3
0004   0000 
0005   8100             .org 8100H
0006   8100 74 00       start     mov  A,#00 
0007   8102 12 01 77              LCALL AIN 
0008   8105 F5 E8                 mov  DOUT,A 
0009   8107 80 F7                 sjmp start
0010   8109             .end
tasm: Number of errors = 0


Vergleich und Sprung
Es soll nun am Digitalausgang 00001111b erscheinen, wenn der Analogeingang 0 kleiner als 128 ist, sonst soll 11111111b ausgegeben werden. Der 80535 kennt den Befehl CMP A ,#data (Vergleiche Akku mit Konstante) nicht. Darum wird auf eine Subtraktion zurückgegriffen, die das Überlauf-Flag (Carry) beeinflußt. Da der Subtraktionsbefehl SUBB auch noch das Carry-Flag mit abzieht, wird mit CLR C vorher das Carry-Bit zurückgesetzt. Mit dem Jump Carry (JC) wird nun verzweigt und die entsprechende Digitalausgabe realisiert. In einer Hochsprache würde dieses Problem wie folgt formuliert werden:

If AIN < 128 Then DOUT 15 Else DOUT 255

0001   0000             DOUT  .equ 0E8H  ;D-Ausgang
0002   0000             DIN   .equ 090H  ;D-Eingang
0003   0000             AIN   .equ 0177h ;Analog 0..3
0004   0000 
0005   8100             .org 8100H
0006   8100 74 00       start     mov  A,#00 
0007   8102 12 01 77              LCALL AIN
0008   8105 C3                    clr c
0009   8106 94 80                 subb a,#128
0010   8108 40 05                 jc   less
0011   810A 75 E8 FF              mov  DOUT,#255
0012   810D 80 F1                 sjmp start
0013   810F 75 E8 0F    less      mov  DOUT,#15 
0014   8112 80 EC                 sjmp start
0015   8114             .end
tasm: Number of errors = 0


Analog-Eingang direkt
Wurde bisher eine Rom-Routine benutzt, um einen Analogeingang zu lesen, wird diese Routine nun selbst nachgebildet. Dazu muss der Hardwareaufbau bekannt sein. Das Betriebssystem des Entwicklungssystems ES535 ist in [3] auf Seite 223ff abgedruckt. Mit Hilfe der im Anhang 12.3 angegebenen Include-Datei 80535.SFR kann die Routine MESSEN nachgebildet werden. 

0001   0000             DOUT  .equ 0E8H ;D-Ausgang
0002   0000             DIN   .equ 090H ;D-Eingang
0003   0000             ADCON .equ 0D8H ;AD-CONTROL
0004   0000             DAPR  .equ 0DAH ;D/A Program
0005   0000             BSY   .equ 0DCH ;ADCON.4 Busy-Flag
0006   0000             ADDAT .equ 0D9H ;A/D Data
0007   0000 
0008   8100             .org 8100H
0009   8100 74 00       start     mov  A,#00     ;Eingang A
0010   8102 44 80                 orl  a,#80h    ;BD=1
0011   8104 F5 D8                 mov  ADCON,a   ;Einstellen
0012   8106 75 DA 00              mov  DAPR,#00h ;5 Volt
0013   8109 20 DC FD    busy      jb   BSY,busy  ;Nicht fertig
0014   810C E5 D9                 mov a,ADDAT    ;Holen
0015   810E F5 E8                 mov  DOUT,a    ;Ausgabe
0016   8110 80 EE                 sjmp start
0017   8112             .end
tasm: Number of errors = 0


Mikrocontroller IX
.
Startseite Bücher Software SatTV Musik Kontakt

Für Inhalt und weitere Verzweigung externer Links sind die Betreiber der dortigen Seiten verantwortlich - H.-J. Berndt