SUBROUTINE_BLOCK SBR_0:SBR0
TITLE=BITSUM
// 2005 by André Räppel
// [url]www.sps-concept.de[/url]
VAR_INPUT
IN:BYTE; // Eingangsvariable fuer Zaehlung
END_VAR
VAR_OUTPUT
OUT:INT; // Anzahl gesetzter Bits
END_VAR
VAR
tmp_byte:BYTE; // temp. Byte fuer Zaehlung
tmp_anzahl:INT; // temp. Anzahl gesetzter Bits
END_VAR
BEGIN
Network 1 // Init Anzahl
LD SM0.0
MOVW 0, LW4
Network 2 // IN auf temp schieben
LD SM0.0
MOVB LB0, LB3
Network 3 // Sprungmarke fuer Ruecksprung Zaehlung
LBL 1
Network 4 // Vergleich auf 0 -> Ende
LDB= LB3, 0
JMP 2
Network 5 // 1 Stelle nach rechts schieben
LD SM0.0
SRB LB3, 1
Network 6 // Anzahl erhoehen wenn ausgeschobenes Bit = 1
LD SM1.1
+I +1, LW4
Network 7 // Ruecksprung -> naechstes Bit
LD SM0.0
JMP 1
Network 8 // Ende Zaehlen
LBL 2
Network 9 // Anzahl ausgeben
LD SM0.0
MOVW LW4, LW1
END_SUBROUTINE_BLOCK