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.
;************************************************* ****
; 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
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.
;************************************************* ****
; 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
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"
[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?