PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Erläuterung von sbi/cbi etc.



Jacob2
19.07.2008, 10:20
Hallo,
Ich sehe häufiger in Codes Funktionen wie sbi cbi u.ä. Googlesuche bringt aber nicht viel! Gibts irgendwo eine Erklärung zu den funktionen oder kann sie mir erklären? sind sie nur eine alternative zu z.B. PORTA = ...; DDRA = ...; usw.?

PicNick
19.07.2008, 11:16
Ich kann die nur empfehlen, dir das "Instruction Set" von Atmel runterzuladen.
Da findest du das alles ganz genau

vklaffehn
19.07.2008, 11:25
Moin!
sbi und cbi sind Assemblerbefehle zum Setzen und Löschen einzelner Portbits, in C gibt es die eigentlich nicht, es werden aber häufig Makros verwendet, die dann, wie Du schon vermutest, sowas wie PORTA |= (1<<bit) machen.
MfG
Volker

Jacob2
19.07.2008, 14:31
Danke!
Kann mir jemand sagen was dann folgende Makros für cbi(...) und sbi(...) in einfachen PORTx-Zuweisungen etc. wäre ich blick die nämlich nicht :^o :

/* __cbi / __sbi require constant port < 0x20 and constant bit */

#define __cbi(port, bit) \
__asm__ __volatile__ ( \
"cbi %0,%1" \
: /* no outputs */ \
: "I" ((uint8_t)(port)), \
"I" ((uint8_t)(bit)) \
)

#define __sbi(port, bit) \
__asm__ __volatile__ ( \
"sbi %0,%1" \
: /* no outputs */ \
: "I" ((uint8_t)(port)), \
"I" ((uint8_t)(bit)) \
)

sternst
19.07.2008, 15:21
sbi(port, bit) -> port |= (1<<bit);
cbi(port, bit) -> port &= ~(1<<bit);