Softwareprogramm

Gast #933302
Hallo an Alle,

Ich bin ein absoluter Anfänger auf dem Gebiet der μ-Controllertechnik. 
Habe lediglich bisher ein paar kleinere Programme geschrieben (Timer0, 
AD-Wandlung)
Muss als Abschlussarbeit nicht desto trotz ein kleineres Projekt 
realisieren, was mich vor größere Probleme stellt.

Ich habe ein Projekt mit 2 Poti´s. Diese Potis sollen testweise LED´s 
ansprechen. und zwar 3 für den einen Poti und 3 für den anderen Poti.
Ich weiß das ich für diese Schaltung eine AD-Wandlung brauche und den 
Poti´s die jeweiligen LED´s zuweisen muss, allerdings weiß ich nicht wie 
ich die beiden Potis miteinander verknüpfen kann. Bisher funktioniert 
immer nur der eine oder der andere Poti.
Wie kann ich diese beiden Funktionen zusammenführen???

Geht das über MX0?
Gast #933332
Hallo,

also ich habe den 8051VC_2, will mit Keil (microvision) programmieren in 
Assembler.

Ich will mit den Potis die LED´s zum leuchten bringen, also mit dem 
langsamen aufdrehen des oberen Potis sollen die oberen 3 angehen (erst 
die erste, dann die ersten beiden und bei vollem Anschlag des Potis alle 
3).

Das gleiche mit dem unteren Poti und den unteren 3 Led´s.
Gast #933375
Hi,

also das ist mal der aktuelle Quellcode. Unser Problem ist es momentan 
beide Poti`s miteinander zu verknüpfen, so dass wir z.B. Poti 1 
aufdrehen und die linken LED`s (je nach Potistellung) leuchten und dann 
z.B. Poti 2 auf die gewünschte Stellung bringen und das gleiche 
passiert, nur eben für die anderen LED`s.

;----------------------------------------------------------------------- 
-
;Initialisierungsteil fuer allgemeine Konstanten
;----------------------------------------------------------------------- 
-


CSEG AT 0H              ;Legt absolute Codesegmentadresse auf 0h
jmp INIT
;
;----------------------------------------------------------------------- 
-
;Interrupt-Vektoren
;----------------------------------------------------------------------- 
-
;ORG

;----------------------------------------------------------------------- 
-
;Initialisierungsteil fuer On-Chip Peripherie
;----------------------------------------------------------------------- 
-
ORG 100H                ;Programmstart bei 100H
INIT:
mov ADCON,#10000000B  ;Kanal AN0 angewaehlt, Stop nach der Wandlung

;----------------------------------------------------------------------- 
-
;Programmschleife
;----------------------------------------------------------------------- 
-
SCHLEIFE:
jnb MX0,ABFRAGE_POTI2
jnb MX0,ABFRAGE_POTI2
jmp SCHLEIFE

clr P2.3                ;Leuchte 1 Port 3.2 ruecksetzen, Programm laeuft
ABFRAGE_POTI1:
clr MX0          ;Setzt MX0 auf 1
mov DAPR,#0             ;A/D Wandlung wird durch schreiben in das 
DAPR-Register ausgelöst.
jb  BSY,$               ;Warten bis A/D Wandlung stop, BSY beendet die 
A/D Wandlung
mov A,ADDAT             ;Das Ergebnis der A/D Wandlung befindet sich im 
ADDAT-Register
clr C                   ;Carry loeschen
subb A,#103             ;entspricht U>2V
jc LED4_GREEN_1         ;Sprung da U<=2V
subb A,#51              ;entspricht U>3V
jc LED5_GREEN           ;Sprung da U<=3V
subb A,#51              ;entspricht U>4V
jc LED6_YELLOW          ;Sprung da U<=4V
setb P2.3        ;Schaltet LED4_GREEN aus
setb P2.4        ;Schaltet LED5_GREEN aus
setb P2.5        ;Schaltet LED6_YELLOW aus
clr P2.6                ;Schaltet LED7_RED ein
reti
jmp ABFRAGE_POTI1       ;Sprung zum Programmbeginn

LED4_GREEN_1:
clr P2.3        ;Schaltet LED4_GREEN ein
setb P2.4               ;Schaltet LED5_GREEN aus
setb P2.5               ;Schaltet LED6_YELLOW aus
setb P2.6        ;Schaltet LED7_RED aus
reti
jmp ABFRAGE_POTI1    ;Sprung zum Programmbeginn

LED5_GREEN:
setb P2.3        ;Schaltet LED4_GREEN aus
clr P2.4                ;Schaltet LED5_GREEN ein
setb P2.5               ;Schaltet LED6_YELLOW aus
setb P2.6        ;Schaltet LED7_RED aus
reti
jmp ABFRAGE_POTI1    ;Sprung zum Programmbeginn

LED6_YELLOW:
setb P2.3        ;Schaltet LED4_GREEN aus
setb P2.4        ;Schaltet LED5_GREEN aus
clr P2.5                ;Schaltet LED6_YELLOW ein
setb P2.6               ;Schaltet LED7_RED aus
reti
jmp ABFRAGE_POTI1    ;Sprung zum Programmbeginn


clr P2.3                ;Leuchte 1 Port 3.2 ruecksetzen, Programm laeuft
ABFRAGE_POTI2:
setb MX0        ;Setzt MX0 auf 0
mov DAPR,#0             ;A/D Wandlung wird durch schreiben in das 
DAPR-Register ausgelöst.
jb  BSY,$               ;Warten bis A/D Wandlung stop, BSY beendet die 
A/D Wandlung
mov A,ADDAT             ;Das Ergebnis der A/D Wandlung befindet sich im 
ADDAT-Register
clr C                   ;Carry loeschen
subb A,#103             ;entspricht U>2V
jc LED4_GREEN_2         ;Sprung da U<=2V
subb A,#51              ;entspricht U>3V
jc LED3_GREEN           ;Sprung da U<=3V
subb A,#51              ;entspricht U>4V
jc LED2_YELLOW          ;Sprung da U<=4V
setb P2.3        ;Schaltet LED4_GREEN aus
setb P2.2        ;Schaltet LED3_GREEN aus
setb P2.1        ;Schaltet LED2_YELLOW aus
clr P2.0                ;Schaltet LED1_RED ein
reti
jmp ABFRAGE_POTI2       ;Sprung zum Programmbeginn

LED4_GREEN_2:
clr P2.3        ;Schaltet LED4_GREEN ein
setb P2.2               ;Schaltet LED3_GREEN aus
setb P2.1               ;Schaltet LED2_YELLOW aus
setb P2.0        ;Schaltet LED1_RED aus
reti
jmp ABFRAGE_POTI2    ;Sprung zum Programmbeginn

LED3_GREEN:
setb P2.3        ;Schaltet LED4_GREEN aus
clr P2.2                ;Schaltet LED3_GREEN ein
setb P2.1               ;Schaltet LED2_YELLOW aus
setb P2.0        ;Schaltet LED1_RED aus
reti
jmp ABFRAGE_POTI2    ;Sprung zum Programmbeginn

LED2_YELLOW:
setb P2.3        ;Schaltet LED4_GREEN aus
setb P2.2        ;Schaltet LED3_GREEN aus
clr P2.1                ;Schaltet LED2_YELLOW ein
setb P2.0               ;Schaltet LED1_RED aus
jmp ABFRAGE_POTI2    ;Sprung zum Programmbeginn

end
Gast #933387
da hab ich nur rumgebastelt und wollte sehn was passiert. kommt 
natürlich raus. hier ist mal das geänderte: die schleife ganz am anfang 
hab ich auch raus, da ich nur schnell testen wollte ob auch die A/D 
Wandlung mit dem zweiten Poti funktioniert.

;----------------------------------------------------------------------- 
-
;Initialisierungsteil fuer allgemeine Konstanten
;----------------------------------------------------------------------- 
-


CSEG AT 0H              ;Legt absolute Codesegmentadresse auf 0h
jmp INIT
;
;----------------------------------------------------------------------- 
-
;Interrupt-Vektoren
;----------------------------------------------------------------------- 
-
;ORG

;----------------------------------------------------------------------- 
-
;Initialisierungsteil fuer On-Chip Peripherie
;----------------------------------------------------------------------- 
-
ORG 100H                ;Programmstart bei 100H
INIT:
mov ADCON,#10000000B  ;Kanal AN0 angewaehlt, Stop nach der Wandlung

;----------------------------------------------------------------------- 
-
;Programmschleife
;----------------------------------------------------------------------- 
-

clr P2.3                ;Leuchte 1 Port 3.2 ruecksetzen, Programm laeuft
ABFRAGE_POTI1:
clr MX0          ;Setzt MX0 auf 1
mov DAPR,#0             ;A/D Wandlung wird durch schreiben in das 
DAPR-Register ausgelöst.
jb  BSY,$               ;Warten bis A/D Wandlung stop, BSY beendet die 
A/D Wandlung
mov A,ADDAT             ;Das Ergebnis der A/D Wandlung befindet sich im 
ADDAT-Register
clr C                   ;Carry loeschen
subb A,#103             ;entspricht U>2V
jc LED4_GREEN_1         ;Sprung da U<=2V
subb A,#51              ;entspricht U>3V
jc LED5_GREEN           ;Sprung da U<=3V
subb A,#51              ;entspricht U>4V
jc LED6_YELLOW          ;Sprung da U<=4V
setb P2.3        ;Schaltet LED4_GREEN aus
setb P2.4        ;Schaltet LED5_GREEN aus
setb P2.5        ;Schaltet LED6_YELLOW aus
clr P2.6                ;Schaltet LED7_RED ein
jmp ABFRAGE_POTI1       ;Sprung zum Programmbeginn

LED4_GREEN_1:
clr P2.3        ;Schaltet LED4_GREEN ein
setb P2.4               ;Schaltet LED5_GREEN aus
setb P2.5               ;Schaltet LED6_YELLOW aus
setb P2.6        ;Schaltet LED7_RED aus
jmp ABFRAGE_POTI1    ;Sprung zum Programmbeginn

LED5_GREEN:
setb P2.3        ;Schaltet LED4_GREEN aus
clr P2.4                ;Schaltet LED5_GREEN ein
setb P2.5               ;Schaltet LED6_YELLOW aus
setb P2.6        ;Schaltet LED7_RED aus
jmp ABFRAGE_POTI1    ;Sprung zum Programmbeginn

LED6_YELLOW:
setb P2.3        ;Schaltet LED4_GREEN aus
setb P2.4        ;Schaltet LED5_GREEN aus
clr P2.5                ;Schaltet LED6_YELLOW ein
setb P2.6               ;Schaltet LED7_RED aus
jmp ABFRAGE_POTI1    ;Sprung zum Programmbeginn


clr P2.3                ;Leuchte 1 Port 3.2 ruecksetzen, Programm laeuft
ABFRAGE_POTI2:
setb MX0        ;Setzt MX0 auf 0
mov DAPR,#0             ;A/D Wandlung wird durch schreiben in das 
DAPR-Register ausgelöst.
jb  BSY,$               ;Warten bis A/D Wandlung stop, BSY beendet die 
A/D Wandlung
mov A,ADDAT             ;Das Ergebnis der A/D Wandlung befindet sich im 
ADDAT-Register
clr C                   ;Carry loeschen
subb A,#103             ;entspricht U>2V
jc LED4_GREEN_2         ;Sprung da U<=2V
subb A,#51              ;entspricht U>3V
jc LED3_GREEN           ;Sprung da U<=3V
subb A,#51              ;entspricht U>4V
jc LED2_YELLOW          ;Sprung da U<=4V
setb P2.3        ;Schaltet LED4_GREEN aus
setb P2.2        ;Schaltet LED3_GREEN aus
setb P2.1        ;Schaltet LED2_YELLOW aus
clr P2.0                ;Schaltet LED1_RED ein
jmp ABFRAGE_POTI2       ;Sprung zum Programmbeginn

LED4_GREEN_2:
clr P2.3        ;Schaltet LED4_GREEN ein
setb P2.2               ;Schaltet LED3_GREEN aus
setb P2.1               ;Schaltet LED2_YELLOW aus
setb P2.0        ;Schaltet LED1_RED aus
jmp ABFRAGE_POTI2    ;Sprung zum Programmbeginn

LED3_GREEN:
setb P2.3        ;Schaltet LED4_GREEN aus
clr P2.2                ;Schaltet LED3_GREEN ein
setb P2.1               ;Schaltet LED2_YELLOW aus
setb P2.0        ;Schaltet LED1_RED aus
jmp ABFRAGE_POTI2    ;Sprung zum Programmbeginn

LED2_YELLOW:
setb P2.3        ;Schaltet LED4_GREEN aus
setb P2.2        ;Schaltet LED3_GREEN aus
clr P2.1                ;Schaltet LED2_YELLOW ein
setb P2.0               ;Schaltet LED1_RED aus
jmp ABFRAGE_POTI2    ;Sprung zum Programmbeginn

end
Persönliche Seite #933432
Theoretisch sollte jetzt nur Poti1 funktionieren

>>>hier das was meiner Meinung nach zu ändern ist

ABFRAGE_POTI1:
clr MX0          ;Setzt MX0 auf 1

.
.
.

clr P2.6                ;Schaltet LED7_RED ein
>>>jmp ABFRAGE_POTI2       ;Sprung zum Programmbeginn

genauso

ABFRAGE_POTI2:
.
.
.
>>>jmp ABFRAGE_POTI1       ;Sprung zum Programmbeginn

Gehts jetzt? Wenn nein, was passiert?
Gast #933457
wir haben das jetzt mit einer zusatzschleife gelöst. also so 
funktioniert es eben wenn P0.0 oder P0.1 kommt.
deine lösung ist auch nicht schlecht, aber im debugmodus kommt er nur 
"in einer" stellung zu deiner jmp Abfrage, nämlich wenn die spannung 
4.1V (glaube ich, im AINO) gegeben ist. aber das soll immer abgefragt 
werden. so wie es jetzt steht funktioniert es.

;----------------------------------------------------------------------- 
-
;Initialisierungsteil fuer allgemeine Konstanten
;----------------------------------------------------------------------- 
-

CSEG AT 0H              ;Legt absolute Codesegmentadresse auf 0h
jmp INIT
;
;----------------------------------------------------------------------- 
-
;Interrupt-Vektoren
;----------------------------------------------------------------------- 
-
;ORG

;----------------------------------------------------------------------- 
-
;Initialisierungsteil fuer On-Chip Peripherie
;----------------------------------------------------------------------- 
-
ORG 100H                ;Programmstart bei 100H
INIT:
mov ADCON,#10000000B  ;Kanal AN0 angewaehlt, Stop nach der Wandlung

;----------------------------------------------------------------------- 
-
;Programmschleife
;----------------------------------------------------------------------- 
-
SCHLEIFE:
jnb P0.0,ABFRAGE_POTI1  ;Abfrage von Poti 1 Stellung
jnb P0.1,ABFRAGE_POTI2  ;Abfrage von Poti 2 Stellung
jmp SCHLEIFE      ;Sprung zum Programmbeginn

ABFRAGE_POTI1:
clr MX0          ;Setzt MX0 auf 1
mov DAPR,#0             ;A/D Wandlung wird durch schreiben in das 
DAPR-Register ausgelöst.
jb  BSY,$               ;Warten bis A/D Wandlung stop, BSY beendet die 
A/D Wandlung
mov A,ADDAT             ;Das Ergebnis der A/D Wandlung befindet sich im 
ADDAT-Register
clr C                   ;Carry loeschen
subb A,#103             ;entspricht U>2V
jc LED4_GREEN_1         ;Sprung da U<=2V
subb A,#51              ;entspricht U>3V
jc LED5_GREEN           ;Sprung da U<=3V
subb A,#51              ;entspricht U>4V
jc LED6_YELLOW          ;Sprung da U<=4V
setb P2.3        ;Schaltet LED4_GREEN aus
setb P2.4        ;Schaltet LED5_GREEN aus
setb P2.5        ;Schaltet LED6_YELLOW aus
clr P2.6                ;Schaltet LED7_RED ein
jmp SCHLEIFE          ;Sprung zum Programmbeginn

LED4_GREEN_1:
clr P2.3        ;Schaltet LED4_GREEN ein
setb P2.4               ;Schaltet LED5_GREEN aus
setb P2.5               ;Schaltet LED6_YELLOW aus
setb P2.6        ;Schaltet LED7_RED aus
jmp SCHLEIFE      ;Sprung zum Programmbeginn

LED5_GREEN:
setb P2.3        ;Schaltet LED4_GREEN aus
clr P2.4                ;Schaltet LED5_GREEN ein
setb P2.5               ;Schaltet LED6_YELLOW aus
setb P2.6        ;Schaltet LED7_RED aus
jmp SCHLEIFE      ;Sprung zum Programmbeginn

LED6_YELLOW:
setb P2.3        ;Schaltet LED4_GREEN aus
setb P2.4        ;Schaltet LED5_GREEN aus
clr P2.5                ;Schaltet LED6_YELLOW ein
setb P2.6               ;Schaltet LED7_RED aus
jmp SCHLEIFE      ;Sprung zum Programmbeginn



ABFRAGE_POTI2:
setb MX0        ;Setzt MX0 auf 0
mov DAPR,#0             ;A/D Wandlung wird durch schreiben in das 
DAPR-Register ausgelöst.
jb  BSY,$               ;Warten bis A/D Wandlung stop, BSY beendet die 
A/D Wandlung
mov A,ADDAT             ;Das Ergebnis der A/D Wandlung befindet sich im 
ADDAT-Register
clr C                   ;Carry loeschen
subb A,#103             ;entspricht U>2V
jc LED4_GREEN_2         ;Sprung da U<=2V
subb A,#51              ;entspricht U>3V
jc LED3_GREEN           ;Sprung da U<=3V
subb A,#51              ;entspricht U>4V
jc LED2_YELLOW          ;Sprung da U<=4V
setb P2.3        ;Schaltet LED4_GREEN aus
setb P2.2        ;Schaltet LED3_GREEN aus
setb P2.1        ;Schaltet LED2_YELLOW aus
clr P2.0                ;Schaltet LED1_RED ein
jmp SCHLEIFE          ;Sprung zum Programmbeginn

LED4_GREEN_2:
clr P2.3        ;Schaltet LED4_GREEN ein
setb P2.2               ;Schaltet LED3_GREEN aus
setb P2.1               ;Schaltet LED2_YELLOW aus
setb P2.0        ;Schaltet LED1_RED aus
jmp SCHLEIFE      ;Sprung zum Programmbeginn

LED3_GREEN:
setb P2.3        ;Schaltet LED4_GREEN aus
clr P2.2                ;Schaltet LED3_GREEN ein
setb P2.1               ;Schaltet LED2_YELLOW aus
setb P2.0        ;Schaltet LED1_RED aus
jmp SCHLEIFE      ;Sprung zum Programmbeginn

LED2_YELLOW:
setb P2.3        ;Schaltet LED4_GREEN aus
setb P2.2        ;Schaltet LED3_GREEN aus
clr P2.1                ;Schaltet LED2_YELLOW ein
setb P2.0               ;Schaltet LED1_RED aus
jmp SCHLEIFE      ;Sprung zum Programmbeginn

end

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.