C----> Assembler

Gast #2712560
Lesenswert?

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
#2712583
Lesenswert?

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 #2712588
Lesenswert?

>;  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
Moderator #2712597
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren