#include near unsigned char byte1; near unsigned char byte2; near unsigned char counter; long x; #define STR 0x01; #define DAT 0x02; #define CLK 0x04; void clock(void) { PAOUT |= CLK; PAOUT &= ~CLK; } void strobe(void) { PAOUT |= STR; PAOUT &= ~STR; } void clock2(void) { PCOUT |= CLK; PCOUT &= ~CLK; } void out_LEDs(void) { asm("ld _counter,#16"); asm("back:"); PAOUT &= ~DAT; asm("rlc _byte1"); asm("rlc _byte2"); asm("jr nc,clkin"); PAOUT |= DAT; asm("clkin:"); clock(); asm("dec _counter"); asm("jr nz,back"); strobe(); } void read_LEDs(void) { PCOUT &= ~STR; clock2(); PCOUT |= STR; asm("ld _counter,#16"); asm("back2:"); if(PCIN & 0x02) asm("rcf"); else asm("scf"); asm("rlc _byte2"); asm("rlc _byte1"); asm("clkin2:"); clock2(); asm("dec _counter"); asm("jr nz,back2"); } void init_gpio(void) { PADD = 0x00; PCDD = DAT; } void main(void) { DI(); init_gpio(); back: read_LEDs(); out_LEDs(); goto back; }