C----> Assembler

Gast #2712560
1
# include <avr /io.h>
2
int main ( void )
3
{
4
DDRB |= (1 << 0); // Set LED as output
5
TCCR1B |= (1 << CS10 ); // Set up timer
6
for (;;)
7
{
8
// Check timer value in if statement , true when count matches 1/20 of a second
9
if ( TCNT1 >= 49999)
10
{
11
PORTB ^= (1 << 0); // Toggle the LED
12
// TODO : Reset timer value
13
}
14
}
15
}
ich möchte gerne diesen Code in Assembler übersetzen kann mir vlt einer 
helfen?
1
nolist
2
.include  "m8def.inc"
3
.list
4

5
main:
6

7
sbi    DDRB,  PB1
8

9
ldi    r16,  (1<<CS10)
10

11
;  if  (TCNT1 >= 49999) ??????????? wie schreibt man sowas in Assembler
12

13
sbi    PORTB,  PBI
14

15
rjmp    main
Wenn du aus den "|=" Operatoren jeweils einen direkt Zuweisungsoperator 
("=") machst, dann, so behaupte ich einfach mal, dürfte der entstehende 
C Code ziemlich perfekt sein. Das einzige Optimierungspotential das ich 
hier sehe, ist es, den Toggle mittels "PINB" Register durchzuführen. Das 
geht aber nur bei "neueren" Controllern und erspart auch nur eine 
Einleseoperation.

Wieso nimmst du nicht die während der Kompilierung entstehende *.lss 
Datei als Vorlage für dein Assembler-Programm?
Gast
>;  if  (TCNT1 >= 49999) ??????????? wie schreibt man sowas in Assembler

Ist eine Idee länger:
1
  in r16,TCNT1L
2
  in r17,TCNT1H
3
  
4
  ldi r18, High(49999)
5
  cpi r16, Low(49999)
6
  cpc r17,r18
7

8
  breq ....
9
oder
10
  brne ....

MfG Spess
Gast
>;  if  (TCNT1 >= 49999) ??????????? wie schreibt man sowas in Assembler

Man nimmt einen Compiler, der kann es.

Oder man macht einen simplen Größenvergleich.
Moderator
Azubi schrieb:
> ich möchte gerne diesen Code in Assembler übersetzen kann mir vlt einer
> helfen?

Ja, der C-Compiler.

Schau dir einfach den vom Compiler generierte Code an. Der ist schon mal
gar nicht so schlecht. Evtl. stellst du fest, dass du an der einen oder
anderen Stelle etwas geschickter als der Compiler gewesen wärst. Dann
kannst du das ja noch ändern.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.