Gast
#1940265
Hallo Fachkundige,
ich habe eine asm Anweisung geschrieben die man sicherlich noch
vereinfachen kann. Die Anweisung stellt eine 8 auf einer 7-Segment
Anzeige dar, welche mit einem 4511 Decodiert wird. Im Prinzip will ich
nur wissen wie ich zB. die Pins in DDRD alle auf einmal aktivieren kann
und nicht alle einzeln. Genauso wie alle Pins in PORT D Low setzten und
nicht einzeln.
Quellcode:
asm volatile (
"sbi %0, %1" "\n\t" /*Aktiviert den Pin2 (Enable)*/
"sbi %2, %3" "\n\t" /*Aktiviert den Pin3 (Input_A)*/
"sbi %4, %5" "\n\t" /*Aktiviert den Pin4 (Input B)*/
"sbi %6, %7" "\n\t" /*Aktiviert den Pin5 (Input_C)*/
"sbi %8, %9" "\n\t" /*Aktiviert den Pin6 (Input_D)*/
"cbi %10, %11" "\n\t" /*Setzt Input_A auf Low*/
"cbi %12, %13" "\n\t" /*Setzt Input_B auf Low*/
"cbi %14, %15" "\n\t" /*Setzt Input_C auf Low*/
"cbi %16, %17" "\n\t" /*Setzt Input_D auf Low*/
"sbi %18, %19" "\n\t" /*Setzt den Enable Pin auf
High*/
"sbi %20, %21" "\n\t" /*Setzt Input_D auf High*/
"cbi %22, %23" "\n\t" /*Setzt den Enable Pin auf Low*/
:
: "M" (_SFR_IO_ADDR (DDRD)), "i" (2)
, "M" (_SFR_IO_ADDR (DDRD)), "i" (3)
, "M" (_SFR_IO_ADDR (DDRD)), "i" (4)
, "M" (_SFR_IO_ADDR (DDRD)), "i" (5)
, "M" (_SFR_IO_ADDR (DDRD)), "i" (6)
, "M" (_SFR_IO_ADDR (PORTD)), "i" (3)
, "M" (_SFR_IO_ADDR (PORTD)), "i" (4)
, "M" (_SFR_IO_ADDR (PORTD)), "i" (5)
, "M" (_SFR_IO_ADDR (PORTD)), "i" (6)
, "M" (_SFR_IO_ADDR (PORTD)), "i" (2)
, "M" (_SFR_IO_ADDR (PORTD)), "i" (6)
, "M" (_SFR_IO_ADDR (PORTD)), "i" (2)
);
Danke im Voraus,
Gruß, Damien.