PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ein paar kleine Fragen, für jeden was dabei :)



Goblin
23.09.2006, 18:14
Frage 1:

Ich habe ein Byte, z.B.



dim meinbyte as byte
meinbyte = &B1001


und ich will das Teil invertieren/negieren, wie auch immer. Sodass also &B0110 dabei herauskommt. Gibts da ne Bascom-Funktion für oder muss ich das manuell durchtogglen?


Frage 2:

Ein beliebiger AVR macht ja eine bestimmte Anzahl von MIPS, also MicroInstructions Per Second. Ist so eine "Microinstruction" ein einzelner Assemblerbefehl, oder nochwas kleineres? :)

Frage 3:

Wenn ich in Bascom kompiliere erstellt mir Bascom ja eine handvoll Dateien. Eine davon ist z.b. die Hexdatei. Aber ich find dabei keine Assembler-Datei. In einer Config-Datei (weiss ned mehr welche) fand ich allerdings eine Zeile, in der ein Wert für "Assembler-Datei machen" stand. War = 0, ich hab ne 1 dahinter geschrieben, hat nix gebracht. Also, wie bring ich Bascom dazu, nen Assembler-Code auszuspucken?

Frage 4:

Bedient sich der Hardware-Usart beim Atmega8 irgendwelcher Timer?

minium :)
23.09.2006, 18:23
Hi,

Habe auch noch ne Frage,
Auf dem Atmega8 ist ja ein Timer,oder ?
Wie programmiere ich den also wie starte ich ihn und wie stoppe ich ihn,... mit Bascom ?

Viele Grüße

rXenon
23.09.2006, 18:41
zu Frage 3: Es gibt Assembler Befehle, die nur eine MI brauchen, hingegen
auch welche die 3 verbrauchen. Ist also ganz unterschiedlich!
"sbi" z.B. 1 (glaub ich)
"rjmp" 3

MrNiemand
23.09.2006, 18:44
Frage1: meinbyte=not meinbyte und schon ist invertiert

linux_80
23.09.2006, 18:49
Hi,

zu Frage 2:
das heisst nicht Micro... sondern:
"Million Instructions per Second"
sonst könnte man das ja per Hand schneller schalten und bräuchte keinen µC ;-)
also soviel MHz, soviel Instruktionen beim AVR. siehe Datenblatt !


zu Frage 4:
nein, hat eigene Teiler, die nur für das UART zuständig sind, das macht aber das Bascom für einen, damit bei 8MHz auch 9600 baud rauskommen, wenn man das so haben will ($crystal, und $baud).

PicNick
23.09.2006, 18:55
Ad 1) meinbyte = NOT meinbyte
Ad 2) ein 8MHZ AVR macht 8 Mio. "Machine cycles" per sekunde, bei den meisten (assembler) Befehlen ist das 1:1. Das steht bei den Befehlen (übersicht) im Datenblatt dabei
Ad 3) Das tut Bascom nicht, egal was du ankreuzt.
Ad 4) Hw-USART braucht KEINEN Timer

Bascom Timer
https://www.roboternetz.de/wissen/index.php/Bascom_und_Timer

Goblin
23.09.2006, 19:29
erm danke leute! bin leicht überrascht, aber begeistert! :)

aber sicher dass bascom keinen asm erzeugt? müsste es doch sowieso. machen zumindest die meisten anderen basic-compiler. bascode->asm->maschinencode

PicNick
23.09.2006, 19:49
..aber sicher dass bascom keinen asm erzeugt..

*hehehe* todsicher. Da hat es schon Anfragen an die Bascommer gegeben, das war auch mal vorgesehen, man will sich aber lieber doch nicht in die Karten schauen lassen. *keinkommentardennderwirdjaautomatischzensiert"

linux_80
23.09.2006, 20:39
Zur Not kann man ja immernoch das HEX ins Studio laden, und schon hat mal Assembler.
Man mus sich allerdings selber raussuchen, was der wo macht.

Vitis
24.09.2006, 11:06
Genau, den Hex im AVR-Studio öffnen, schon haste die ASM Instructions, aber ganz ehrlich, der erzeugte Code ist mir persönlich schon reichlich suspekt sprich ich hab da nicht durchgeblickt. Kann aber auch damit zusammenhängen weil das eben gänzlich unkommentierter Code ist ... ziemlich undurchsichtig für mich.

Gento
24.09.2006, 22:06
Die *.bin Datei ist der reine Maschinencode .

Unter >Option > Compiler >Output (*)Binary Code wird der erzeugt.

Gento

-tomas-
25.09.2006, 14:38
@PicNick - Thema: ASM
Ich denke, besser als der OBJ-Code in AVR Studio geladen wird es nicht, da Bascom by design mit seinem vorkompilierten HEX-Bibliotheken sowieso den Pfad der Hochsprachen verlässt...

Viel spannender ist die Frage, wie man AVR-Studio überzeugt, an den Sprungstellen des HEX/Disassembler-Codes auch Labels zu setzen. Dann wäre der Code auch lesbar.

22: For I1 = 1 To 10
+0000005A: E081 LDI R24,0x01 Load immediate
+0000005B: 93800084 STS 0x0084,R24 Store direct to data space
+0000005D: 91000084 LDS R16,0x0084 Load direct from data space
+0000005F: 300A CPI R16,0x0A Compare with immediate
22: For I1 = 1 To 10
+00000060: F018 BRCS PC+0x04 Branch if carry set
+00000061: F011 BREQ PC+0x03 Branch if equal
22: For I1 = 1 To 10
+00000062: 940C0076 JMP 0x00000076 Jump
23: Print I1
+00000064: EEA0 LDI R26,0xE0 Load immediate
+00000065: E0B7 LDI R27,0x07 Load immediate
23: Print I1
+00000066: E8E4 LDI R30,0x84 Load immediate
+00000067: E0F0 LDI R31,0x00 Load immediate
23: Print I1
+00000068: 940E009B CALL 0x0000009B Call subroutine
23: Print I1
+0000006A: 940E007B CALL 0x0000007B Call subroutine
23: Print I1
+0000006C: 940E0083 CALL 0x00000083 Call subroutine
24: Next
+0000006E: E8A4 LDI R26,0x84 Load immediate
+0000006F: E0B0 LDI R27,0x00 Load immediate
24: Next
+00000070: 918C LD R24,X Load indirect
+00000071: 5F8F SUBI R24,0xFF Subtract immediate
24: Next
+00000072: 938C ST X,R24 Store indirect
+00000073: F410 BRCC PC+0x03 Branch if carry cleared
24: Next
+00000074: 940C005D JMP 0x0000005D Jump

aber wir hatten das hier schon mal diskutiert...