i2c_start() { ci_clkl(); ci_out(1); ci_clkh(); ci_out(0); } i2c_stop() { ci_clkl(); ci_out(0); ci_clkh(); ci_out(1); } i2c_rd(a,p,d) char a,p,d; { if (i2c_wr(a,p,d)) return 1; i2c_start(); if (i2c_tx(a|p|1)) return 1; return 0; } i2c_wr(a,p,d) char a,p,d; { i2c_start(); if (i2c_tx(a|p)) return 1; if (i2c_tx(d)) return 1; return 0; } i2c_tx(d) char d; { char i; for (i=0;i<8;i++) { ci_clkl(); ci_out(d>>(7-i)); ci_clkh(); } ci_clkl(); ci_out(1); ci_clkh(); return ci_in(); } i2c_tx_s(d) char d; { char i; i=i2c_tx(d); i2c_stop(); return i; } i2c_rx(d) char *d; { char i; for (i=0;i<8;i++) { ci_clkl(); ci_out(1); ci_clkh(); *d<<=1; *d|=ci_in(); } } i2c_rx_s(d) char *d; { i2c_rx(d); i2c_stop(); } i2c_rx_a(d) char *d; { i2c_rx(d); ci_clkl(); ci_out(0); ci_clkh(); }