Versuch mal die Schreibweise des Wertes zu ändern:
Code:$regfile = "m32def.dat" $crystal = 16000000 $framesize = 30 $hwstack = 30 $swstack = 30 $asm ldi r16, &hFF Out Ddrc , R16 ldi r16, &b11110000 Out Portc , R16 Lop: rjmp lop $end Asm End
Hallo liebe Leute,
nach einer Weile des grübelns und überlegens hab ich mich dazu entschieden, ein bischen Assembler zu "lernen".
So weit, so gut.
Allerdings macht mir mein erstes Programm schon Probleme
Hier mal der Code:
Nach meinem Verständnis sollten jetzt ja 4 leds leuchten und die anderen 4 nicht. Jedoch leuchtet keine!Code:$regfile = "m32def.dat" $crystal = 16000000 $framesize = 30 $hwstack = 30 $swstack = 30 $asm ldi r16, 0xFF Out Ddrc , R16 ldi r16, 0b11110000 Out Portc , R16 Lop: rjmp lop $end Asm End
Hier mal der Code, der meiner Meinung nach genau das selbe macht:
Dieser Code funktioniert.Code:$regfile = "m32def.dat" $crystal = 16000000 $framesize = 30 $hwstack = 30 $swstack = 30 DDRC = 255 PORTC = &b11110000 Do Loop End
Könnt ihr mir sagen, wo mein Fehler ist?
Vielen Dank
Gruß
Chris
Versuch mal die Schreibweise des Wertes zu ändern:
Code:$regfile = "m32def.dat" $crystal = 16000000 $framesize = 30 $hwstack = 30 $swstack = 30 $asm ldi r16, &hFF Out Ddrc , R16 ldi r16, &b11110000 Out Portc , R16 Lop: rjmp lop $end Asm End
Wenn das Herz involviert ist, steht die Logik außen vor! \/
Hallo peterfido,
vielen dank, jetzt funzts
Aber kannst du mir erklären, warum das so gemacht werden muss??
Gruß
Chris
Hallo,
das DDRC bestimmt welche Ports am Port C als Eingänge und welche als Ausgänge verwendet werden sollen. Erst wenn man dann auf den Port schreibt, steht ein Wert an.
In Deinem Fall waren die Port-Ausgänge auf Low nachdem das DDRC gesetzt wurde. Deine LED's sind vermutlich vom Port über Vorwiderstand auf Masse geschaltet.
Mitch.
Hi, Che !
vielleicht magst du gucken :
http://www.rn-wissen.de/index.php/As...Cr_Bascom-User
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Vielen Dank für eure Antworten,
aber ich meinte eigentlich, worin der Unterschied besteht, wenn ich astatt
dieses schreibe:Code:0xFF
??Code:&hFF
Das sind doch eigentlich die gleichen Werte, oder nicht?
Gruß
Chris
"&H" ist das, was Bascom versteht, "0x" ist was für "C" und diverse andere Sprachen.
Da is wohl noch jeder schon mal ins Schleudern gekommen *g*
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Vielen Dank, jetzt weis ich das auch
Jetzt habe ich aber wieder mal eine Frage:
Mit folgendem Code möchte ich bei Tastendruck (Pina.0) eine Led an Portc.0 toggeln.
Allerdings wird diese nicht getoggelt, sondern sie leuchtet nur solange, solange ich den Taster drücke.
Hier der Code:
Warum wird die Led immer wieder ausgeschaltet (also 0 = ein und 1 = aus)??Code:$regfile = "m32def.dat" $crystal = 16000000 $framesize = 30 $hwstack = 30 $swstack = 30 $asm .def Null = R20 .def Eins = R21 .def K = R22 .def I = R23 .def J = R24 ldi null, &b00000000 ldi eins, &b11111111 ldi r16, &b11111111 Out Ddrc , R16 ldi r16, &b00000000 Out Ddra , R16 ldi r16, &b11111111 Out Portc , R16 ldi r16, &b11111111 Out Porta , R16 Lop: sbis pina , 0 rjmp taster_an rjmp lop Taster_an: ldi r16, &b00000000 sbis pinc , 0 ldi r16, &b11111111 cpi r16 , &b00000000 breq led_ein sbi portc,0 rjmp ende_taster_an Led_ein: cbi portc,0 Ende_taster_an: 'rcall wait ret Wait: ldi k,10 loop_k: nop nop dec k cpi k,0xFF brne loop_k dec j cpi j,0xFF brne Wait dec i cpi i,0xFF brne Wait ret $end Asm End
Gruß
Chris
Du setzt r16 auf 1 und vergleichst im nächsten Schritt auf 0.. Das Ergebnis wird immer 1 sein...
Hier mal ein Wechsellicht zwischen PortD 5 und PortD 6. Der Taster liegt auf PinD2, Pulldown, geschlossen auf High:
Code:$regfile = "m32def.dat" $crystal = 8000000 $framesize = 30 $hwstack = 30 $swstack = 30 $asm ldi r16, &b01100000 Out Ddrd , R16 ldi r16, &b01000000 Out Portd , R16 Lop: sbic Pind , 2 rcall Invled rjmp lop Invled: ldi r16, &b00100000 sbis pind,6 ldi r16, &b01000000 Out Portd , R16 Loslassen: sbic pind,2 rjmp Loslassen ret $end Asm End
Wenn das Herz involviert ist, steht die Logik außen vor! \/
Hallo Leute,
erstmal vielen Dank für eure Antworten.
Aber ich hab mich grad soooo stark aufgeregt!
Der einzige Fehler in meinem Programm ist der, dass ich im Mainloop (lop)
anstattCode:Lop: sbis pina , 0 rjmp taster_an rjmp lop
geschrieben habe.Code:Lop: sbis pina , 0 rcall taster_an rjmp lop
Der einzige Fehler war also das "RJMP" ...
Kann mir jemand erklären, warum ich hier "RCALL" benutzen muss??
Gruß
Chris
Lesezeichen