PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : probleme in assembler



Simon1990
08.06.2005, 16:28
hallo zusammen,
ich hätte da mal ne frage. und zwar bin ich grad dabei mir das programmieren von pics in assembler an zu lernen. dazu lese ich mich grad fleißig durch sprut.de.

aber ich versteh da eins noch nicht so ganz. letzendlich kann man da ja eigentlich nur einzelne bits verschieben. aber wie kann ich jetzt so ne art if-Abfrage machen?
ich hab da so ne idee im kopf, ich will an einen pin einen taster anschließen und an drei andere pins ein paar leds. jetzt will ich mit hilfe des tasters die led's durchschalten. da dachte ich jetzt, dass wenn der taster gedrückt wird in eine speicherzelle eine 1 geschrieben wird. wird er nochmal gedrückt soll die speicherzelle um 1 inkrementiert werden. aber jetzt muss ich doch 1. eine abrage wie "if (speicherzelle=2) then" machen können und 2. wenn der wert gleich 3 ist wieder bei 0 anfangen können. aber das würde ja auch mit so einer if-abfrage gehen. könnt ihr mir bitte erklären, wie ich sowas in assembler machen kann.

und dann hab ich da noch eine frage. ich will nämlich nicht nur eine led pro pin anschließen sondern ein paar. aber wie mach ich das? der pin kann doch nur bis 20mA oder so belastet werden, oder? ich hab mal was gehört, das müsste ich mit nem relais oder so machen. aber wie geht das genau.

vielen dank für jede antwort im vorraus.


mfg Simon

TomHumpen
09.06.2005, 11:35
Das mit den Led's würd ich mit einem Transistor machen, ist aber bei Sprut auch erklärt. Zum Thema ASM:

BTFSC oder BTFSS sind da deine Befehle. Dahinter ein Sprung mit goto sollte am einfachsten sein. Lese Dir da bei Sprut die Erklärung durch.

BSP (auf die schnelle)


BTFSS PORTB , 0
GOTO Sprung1
GOTO Sprung2

Sprung2 ;Rücksprung und weiter im Hauptprogramm
....
....
....

Sprung1 ;wenn der PORT B 0 eins ist
...
...
GOTO Sprung2



Zwar nicht die beste Lösung, aber für den Anfang reichts wohl.

So long...

Simon1990
09.06.2005, 13:12
ok. danke. falls doch noch ne frage kommt, kann ich's ja nochmal hier reinschreiben.

Simon1990
09.06.2005, 21:21
tja, jetzt hab ich doch noch mal ne frage. ich hab jetzt mit mplab den folgenden code geschrieben:


list p=16f628
include "p16f628.inc"
org 0x00
goto main
org 0x04


main

; Zuordnung der 2 Speicherzellen
sp2 Equ 0x10
sp3 Equ 0x11

; RB5,RB6,RB7 auf Ausgang setzten
bsf STATUS, RP0 ; auf Bank 1 umschalten
movlw B'11111000' ; RB5,RB6,RB7 auf Ausgang setzten (erst nur in W)
movwf TRISB ; Verschieben von W nach Speicherzelle TRISB
bcf STATUS, RP0 ; auf Bank 0 schalten
clrf PORTB ; alle LEDs ausschalten

; LED1 einschalten
bsf PORTB,5 ; LED1 an RB5 einschalten

Abfrage
btfss PORTB,0 ; Überspringe nächsten Befehl, wenn RB0 high
goto Abfrage ; Zurück zur Marke Abfrage

; Taster wurde gedrückt
btfsc sp2,0 ; Wenn sp2=0 dann übergehe den nächsten Befehl
goto LED2 ; Weiter zur Marke LED2

btfsc sp3,0 ; Wenn sp3=0 dann übergehe den nächsten Befehl
goto LED3 ; Weiter zur Marke LED3

goto LED1 ; Wenn weder sp2=0 noch sp3=0 dann weiter zur Marke LED1

LED2
bcf PORTB,5 ; LED1 an RB5 ausschalten
bsf PORTB,6 ; LED2 an RB6 einschalten
bcf sp2,0 ; sp2 auf 0 setzen
bsf sp3,0 ; sp3 auf 1 setzen
goto Abfrage ; Zurück zur Marke Abfrage

LED3
bcf PORTB,6 ; LED2 an RB6 ausschalten
bsf PORTB,7 ; LED3 an RB7 einschalten
bcf sp3,0 ; sp3 auf 0 setzen
goto Abfrage ; Zurück zur Marke Abfrage

LED1
bcf PORTB,7 ; LED3 an RB7 ausschalten
bsf PORTB,5 ; LED1 an RB5 einschalten
bsf sp2,0 ; sp2 auf 1 setzen
goto Abfrage ; Zurück zur Marke Abfrage

end


wenn ich den jetzt assemblieren will, kommt immer die folgende fehlermeldung, die ich leider nicht ganz verstehe.

Make: The target "C:\Eigene Dateien\Pics\Assembler Programme\LED-Durchschaltung\LED-Durchschaltung.o" is out of date.
Executing: "C:\Programme\Microchip\MPASM Suite\MPAsmWin.exe" /q /p18F452 "LED-Durchschaltung.asm" /l"LED-Durchschaltung.lst" /e"LED-Durchschaltung.err"
Warning[215] C:\EIGENE DATEIEN\PICS\ASSEMBLER PROGRAMME\LED-DURCHSCHALTUNG\LED-DURCHSCHALTUNG.ASM 1 : Processor superseded by command line. Verify processor symbol.
Message[301] C:\PROGRAMME\MICROCHIP\MPASM SUITE\P16F628.INC 35 : MESSAGE: (Processor-header file mismatch. Verify selected processor.)
Warning[207] C:\EIGENE DATEIEN\PICS\ASSEMBLER PROGRAMME\LED-DURCHSCHALTUNG\LED-DURCHSCHALTUNG.ASM 11 : Found label after column 1. (sp2)
Warning[207] C:\EIGENE DATEIEN\PICS\ASSEMBLER PROGRAMME\LED-DURCHSCHALTUNG\LED-DURCHSCHALTUNG.ASM 12 : Found label after column 1. (sp3)
Warning[205] C:\EIGENE DATEIEN\PICS\ASSEMBLER PROGRAMME\LED-DURCHSCHALTUNG\LED-DURCHSCHALTUNG.ASM 56 : Found directive in column 1. (end)
Error[173] C:\EIGENE DATEIEN\PICS\ASSEMBLER PROGRAMME\LED-DURCHSCHALTUNG\LED-DURCHSCHALTUNG.ASM 57 : Source file path exceeds 62 characters (C:\EIGENE DATEIEN\PICS\ASSEMBLER PROGRAMME\LED-DURCHSCHALTUNG\LED-DURCHSCHALTUNG.ASM)
Halting build on first failure as requested.
BUILD FAILED: Thu Jun 09 21:18:58 2005

könnt ihr mir vielleicht sagen, was ich falsch gemacht hab?

mfg simon

TomHumpen
09.06.2005, 23:26
Error[173] C:\EIGENE DATEIEN\PICS\ASSEMBLER PROGRAMME\LED-DURCHSCHALTUNG\LED-DURCHSCHALTUNG.ASM 57 : Source file path exceeds 62 characters (C:\EIGENE DATEIEN\PICS\ASSEMBLER
Steht da doch. SourceFile Pfad länger als 62 Zeichen. [-X
mach mal einen Ordner unter C:\PIc oder so!

Arexx-Henk
10.06.2005, 10:47
Hallo,


Make: The target "C:\Eigene Dateien\Pics\Assembler Programme\LED-Durchschaltung\LED-Durchschaltung.o" is out of date.
weiss nicht mehr, ist mir auch mal passiert, zuerst mal andere sachen losen



Warning[215] C:\EIGENE DATEIEN\PICS\ASSEMBLER PROGRAMME\LED-DURCHSCHALTUNG\LED-DURCHSCHALTUNG.ASM 1 : Processor superseded by command line. Verify processor symbol.
Message[301] C:\PROGRAMME\MICROCHIP\MPASM SUITE\P16F628.INC 35 : MESSAGE: (Processor-header file mismatch. Verify selected processor.)

Im program sollte irgendwo stehen (16F84 = beispiel)
PROCESSOR 16F84
Im MPLAB menu 'Configure | Select Device' muss die gleiche processor gewahlt sein


Warning[207] C:\EIGENE DATEIEN\PICS\ASSEMBLER PROGRAMME\LED-DURCHSCHALTUNG\LED-DURCHSCHALTUNG.ASM 11 : Found label after column 1. (sp2)
Warning[207] C:\EIGENE DATEIEN\PICS\ASSEMBLER PROGRAMME\LED-DURCHSCHALTUNG\LED-DURCHSCHALTUNG.ASM 12 : Found label after column 1. (sp3)

ein label soll ganz links stehen (1e kolom)
da wird vielleicht ein unbekantes assembler code in kolom 2 gefunden und wird dann als ein (falsches) label interpretiert


Error[173] C:\EIGENE DATEIEN\PICS\ASSEMBLER PROGRAMME\LED-DURCHSCHALTUNG\LED-DURCHSCHALTUNG.ASM 57 : Source file path exceeds 62 characters (C:\EIGENE DATEIEN\PICS\ASSEMBLER PROGRAMME\LED-DURCHSCHALTUNG\LED-DURCHSCHALTUNG.ASM)

da hat TomHumpen schon geantwortet:
dass complete 'path'

C:\EIGENE DATEIEN\PICS\ASSEMBLER PROGRAMME\LED-DURCHSCHALTUNG\LED-DURCHSCHALTUNG.ASM
von deinem datei ist grosser als 62 karakters
dass ist so eine MPLAB einschrankung.

Da sind 4 losungen:
1. die datei in einen anderen folder plazieren
2. die namen der folders einschranken
3. die datei folder als netzwerk folder teilen z.B. als 'X:\\' damit steht die datei in 'drive' X:\\
4. im einem DOS batch file einstellen (und ausfuhren):
SUBST X: C:\EIGENE DATEIEN\PICS\ASSEMBLER PROGRAMME\LED-DURCHSCHALTUNG
damit wird dasselbe erreicht wie im punkt 3 ist aber altmodisch aber functioniert meiner meinung nach besser/einfacher

hoffe schon einige fehler sind damit erledigt,

gruss

Henk

Simon1990
10.06.2005, 18:44
auf das mit den 62 Zeichen bin ich auch noch gekommen. aber den rest hatte ich halt nicht kapiert. also dann danke.

TomHumpen
10.06.2005, 20:37
Naja, der Rest waren auch nur warnings, deshalb war dein Programm ja nicht falsch. Also weiter viel Erfolg.

So long...