|
You last visited: Today at 20:19
Advertisement
Hilfe bei Assembler
Discussion on Hilfe bei Assembler within the General Coding forum part of the Coders Den category.
01/04/2015, 22:03
|
#1
|
elite*gold: 0
Join Date: Feb 2010
Posts: 620
Received Thanks: 92
|
Hilfe bei Assembler
So ich hab ein Problem, ich muss für die Schule ein Programm schreiben
Dieses Programm und ich habe keine Ahnung wie ich das anstellen muss.
Eine Weihnachtbaumbeleuchtung soll über einen Mikrocontroller angesteuert werden. Es müssen 8 Leuchtmittel angesteuert werden. Das Leuchtmuster muss mit Hilfe von zwei Schaltern seriell eingelesen werden.
Entwickeln Sie das entsprechende Programm. Beachten Sie dabei folgendes:
1. Das Leuchtmuster wird seriell ausgewählt, wenn „Schalter PB.2“ = 0 ist.
Details:
Liefert „Schalter PB.0“ eine H/L Flanke, wird der von „Schalter PB.1“ gelieferte Wert als „Bit x“ des Musters genommen (0..7, beginnend mit dem MSB "most significant bit").
Nach acht eingegebenen Bits ist das Muster komplett.
2. Schreiben Sie ein Unterprg. für eine Zeitverzögerung. Die Zeit wird vom Lehrer vorgegeben. Die Rechnung ist im Unterprogrammkopf darzustellen.
3. Wurde das Leuchtmuster eingegeben und liefert „Schalter PB.2“ = 1, wird das Muster ausgegeben.
Mit zwei Schaltern (PB.4, PB.3) lässt sich die Ausgabeart umschalten. Es gilt:
00 = statische Anzeige, 01 = blinken, 10 = rechts rotierend, 11 = von außen nach innen aufbauend .
Zwischen jeder Ausgabe muss das Unterprogramm “Delay“ aufgerufen werden.
Nutzen Sie die Dokumentationen und die zur Verfügung gestellte Simulatorsoftware.
Ich bedanke mich für jegliche Hilfe
|
|
|
01/04/2015, 22:05
|
#2
|
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
|
Welcher Assembler? Und welchen Ansatz hast du?
|
|
|
01/05/2015, 17:37
|
#3
|
elite*gold: 0
Join Date: Feb 2010
Posts: 620
Received Thanks: 92
|
Ich habe null Ahnung wie ich das auf die Reihe bekommen soll, ich weiß nicht mal wie ich die H/L Flanke abfragen kann
list p=18f4550
;************************************************* ****
; Lauflicht V3
;************************************************* ****
#include <P18f4550.INC>
;************************************************* ****
; Interruptvektoren
; 0x800 Offset bei Verwendung des USB Bootloaders auf dem
; Board
ORG 0x800 ; Reset Einsprung
goto initmain
ORG 0x808 ; HP-Interrupt Einsprung
goto initmain
ORG 0x818 ; LP-Interrupt Einsprung
goto initmain
;************************************************* ****
; Initialisierung
ORG 0x828
initmain
movlw B'11111111' ; PortB auf Eingang
movwf TRISB
movlw B'00000000' ; PortD auf Ausgang
movwf TRISD
movlw H'0D' ; Alle optionalen Analogeingänge mit Ausnahme von AN0,AN1 (PA0,PA1)
movwf ADCON1 ; werden auf digital In/Out initialisiert
bcf INTCON2,7 ; PortB mit Pull up Widerstaenden
;************************************************* ****
|
|
|
01/06/2015, 00:47
|
#4
|
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
|
Die Flanke erwischt du in deinem Hauptprogramm. In der Hauptschleife den Port abfragen und den Wert speichern. Ist er bei der nächsten Abfrage vom gespeicherten Wert verschieden -> Flanke.
|
|
|
01/06/2015, 03:36
|
#5
|
elite*gold: 0
Join Date: Feb 2010
Posts: 620
Received Thanks: 92
|
Das habe ich jetzt zustande gekriegt, aber habe keinen Plan ob es richtig ist oder wie ich das Leuchten von Außen nach Innen machen soll.
;************************************************* ****
#include <P18f4550.INC>
;************************************************* ****
; Variablen deklarieren (RAM)
bitposition EQU 0x0A
zaehler EQU 0x0B
flanke EQU 0x0C
wert EQU 0x0D
;************************************************* ****
; Interruptvektoren
; 0x800 Offset bei Verwendung des USB Bootloaders auf dem
; Board
ORG 0x800 ; Reset Einsprung
goto initmain
ORG 0x808 ; HP-Interrupt Einsprung
goto initmain
ORG 0x818 ; LP-Interrupt Einsprung
goto initmain
;************************************************* ****
; Initialisierung
ORG 0x828
initmain
movlw B'11111111' ; PortB auf Eingang
movwf TRISB
movlw B'00000000' ; PortD auf Ausgang
movwf TRISD
movlw H'0D' ; Alle optionalen Analogeingänge mit Ausnahme von AN0,AN1 (PA0,PA1)
movwf ADCON1 ; werden auf digital In/Out initialisiert
bcf INTCON2,7 ; PortB mit Pull up Widerstaenden
;************************************************* ****
; Hauptprogramm
mainloop
btfss PORTB,2
goto einlesen
goto modis
einlesen
clrf WREG,0
clrf LATD,0
bsf bitposition,7
goto wohinistegal
wohinistegal
btfsc PORTB,0
goto flankenhigh ;=1
goto wohinistegal
flankenhigh
movlw B'0001'
movwf flanke,0
movf PORTB,WREG
cpfseq flanke,0
goto flankenlow
goto flankenhigh
flankenlow
clrf flanke
movf PORTB,WREG
cpfseq flanke,0
goto trolololo
goto flankenlow
trolololo
addlw B'0001'
addwf zaehler,1,0
btfsc zaehler,3
goto mainloop
btfss PORTB,1 ;Abfrage von PB.1
goto einlesenlow ;Wenn 0 dann Sprung zu "einlesenlow"
goto einlesenhigh
einlesenhigh ;Abfrage welches Bit als 1 eingelesen werden soll
btfsc bitposition,7 ;Abfrage von LATD.7
bsf wert,7 ;Wenn LATD.7 gesetzt dann muster.7 auf 1 setzen
btfsc bitposition,6 ;Abfrage von LATD.6
bsf wert,6 ;Wenn LATD.6 gesetzt dann muster.6 auf 1 setzen
btfsc bitposition,5 ;Abfrage von LATD.5
bsf wert,5 ;Wenn LATD.5 gesetzt dann muster.5 auf 1 setzen
btfsc bitposition,4 ;Abfrage von LATD.4
bsf wert,4 ;Wenn LATD.4 gesetzt dann muster.4 auf 1 setzen
btfsc bitposition,3 ;Abfrage von LATD.3
bsf wert,3 ;Wenn LATD.3 gesetzt dann muster.3 auf 1 setzen
btfsc bitposition,2 ;Abfrage von LATD.2
bsf wert,2 ;Wenn LATD.2 gesetzt dann muster.2 auf 1 setzen
btfsc bitposition,1 ;Abfrage von LATD.1
bsf wert,1 ;Wenn LATD.1 gesetzt dann muster.1 auf 1 setzen
btfsc bitposition,0 ;Abfrage von LATD.0
bsf wert,0 ;Wenn LATD.0 gesetzt dann muster.0 auf 1 setzen
rrncf bitposition,1 ;Rotieren von LATD um 1 nach rechts
goto trolololo ;Sprung zu "hlschleife"
einlesenlow
btfsc bitposition,7 ;Abfrage von LATD.7
bcf wert,7 ;Wenn LATD.7 gesetzt dann muster.7 auf 1 setzen
btfsc bitposition,6 ;Abfrage von LATD.6
bcf wert,6 ;Wenn LATD.6 gesetzt dann muster.6 auf 1 setzen
btfsc bitposition,5 ;Abfrage von LATD.5
bcf wert,5 ;Wenn LATD.5 gesetzt dann muster.5 auf 1 setzen
btfsc bitposition,4 ;Abfrage von LATD.4
bcf wert,4 ;Wenn LATD.4 gesetzt dann muster.4 auf 1 setzen
btfsc bitposition,3 ;Abfrage von LATD.3
bcf wert,3 ;Wenn LATD.3 gesetzt dann muster.3 auf 1 setzen
btfsc bitposition,2 ;Abfrage von LATD.2
bcf wert,2 ;Wenn LATD.2 gesetzt dann muster.2 auf 1 setzen
btfsc bitposition,1 ;Abfrage von LATD.1
bcf wert,1 ;Wenn LATD.1 gesetzt dann muster.1 auf 1 setzen
btfsc bitposition,0 ;Abfrage von LATD.0
bcf wert,0 ;Wenn LATD.0 gesetzt dann muster.0 auf 1 setzen
rrncf bitposition,1 ;Rotieren von LATD um 1 nach rechts
goto trolololo ;Sprung zu "hlschleife"
modis
btfss PORTB,3
goto firstway
goto secondway
firstway
btfss PORTB,4
goto statisch
goto rotate
secondway
btfss PORTB,4
goto blinken
goto außeninnen
statisch
btfss PORTB,3
movff wert,LATD
goto modis
rotate
movff wert,LATD
btfss PORTB,4
goto modis
rrncf LATD
call Delay
goto rotate
blinken
movff wert,LATD
call Delay
btfss PORTB,3
goto modis
clrf LATD
call Delay
goto blinken
;****************************************
; Warteschleife für 250ms bei tm = 250ns
; (2+[2+{2+(8*215-1)}*142-1]*9-1)mz = 2.199.448 mz
; 2.199.448 * 250ns = 549.862.000ns ~ 549ms
;****************************************
loopzaehler1 EQU H'00'
loopzaehler2 EQU H'01'
loopzaehler3 EQU H'02'
Delay
bcf STATUS, C
movlw D'009' ; (1)
movwf loopzaehler3,0 ; (1)
Wait1msa movlw D'142' ; (1)
movwf loopzaehler2,0 ; (1)
Wait1msb movlw D'215' ; (1)
movwf loopzaehler1,0 ; (1)
Wait1msc nop ; (1) x 5
nop
nop
nop
nop
decfsz loopzaehler1,1,0 ; (1)/(2)
goto Wait1msc ; (2)
decfsz loopzaehler2,1,0 ; (1)/(2)
goto Wait1msb ; (2)
decfsz loopzaehler3,1,0 ; (1)/(2)
goto Wait1msa ; (2)
return
END
|
|
|
|
Similar Threads
|
[AutoIt & Assembler] Assembler lernen und in AutoIt benutzen
01/12/2021 - Coding Tutorials - 18 Replies
1. Vorwort
1.1. Vorraussetzungen für das Programmieren mit Assembler
1.2. Ein paar Fakten zu Assembler/Computern
1.3. Warum Assembler benutzen
2. Assembler Allgemein
2.1. Arbeitsweise von Assembler
2.2. Syntax und Semantik
2.3. Register
3. Erste Assembler Schritte
3.1. Mov
|
ASM Assembler Hilfe varialble und tasten druck problem/frage
12/14/2014 - General Coding - 3 Replies
Hallo leute,
beschäftige mich neuerdings mit assembler und habe da ein kleines problem,
kurz vor ab, ich arbeite mit windows 2000 unter virtalbox mit WinAsm.
Aber nun zu meiner frage.
Ich habe ein kleines cookie programm geschrieben, wenn ich eins drücke, soll da stehen "you got 1 cookie" bis hin zu vier, "you got 4 cookies". Aber wenn ich eins drücke wird die nachricht für zwei angezeigt, bei 2 für drei und bei drei für vier. F1 als exit taste funktioniert, doch ist eigentlich die taste 1...
|
baruche hilfe mit assembler!
06/18/2008 - General Coding - 9 Replies
hi ich wollte meinen Hack heute UD machen mit assembler aber ich check nicht wie ich das machen soll. Kann mir einer helfen?
|
All times are GMT +2. The time now is 20:19.
|
|