/* 2線式通信(送信)Ver2.0 [Open_D Contlor] PIC12F629 Config=0x31c4 M.Kikuchi 2011/1/14 Last 1/15 Used ROM (program words): 94 (9%) Free ROM (program words): 930 (90%) */ sbit T_MCL at TRISIO4_bit; sbit T_MDA at TRISIO5_bit; sbit MCL at GP4_bit; sbit MDA at GP5_bit; void M_TX(char DATA){ char i; T_MCL=0; T_MDA=0; MCL=0; // Start MDA=0; for (i=0 ;i<8 ;i++){ if ((DATA & 0x80)==0x80) T_MDA=1; //input else T_MDA=0; //output T_MCL=1; //set of MCL Clock Delay_us(9); //Delay 8over 7=NG T_MCL=0; DATA <<= 1; //Down } T_MCL=1; // T_MDA=1; } void main() { char T_data=5; // TRISIO = 0b00111000; GPIO = 0b00001000; // while(1){ M_TX(T_data); //Test Send Delay_ms(1000); T_data=~T_data; } } // 以下 AVR AT90S2313 ------------------------------- /* MRX 2線式 通信 AVR AT90S2313 2011/1/17 4MHz Last mod LED on-off By M.K */ sbit MCL at PIND0_bit; sbit MDA at PIND1_bit; char M_RX(){ char i,DATA; DATA = 0; while (MCL | MDA); //Start (MCL MDA)=0 for (i=0;i<8;i++){ while(~MCL); //0 to 1 DATA <<= 1; //in if (MDA == 1) DATA ++; while(MCL); //1 to 0 } while (~MCL | ~MDA); //End return(DATA); } void main() { DDRB = 0xFF; // Set direction to be output DDRD = 0x0; // Set direction to be intput PORTB = 1; // All off test // while(1){ PORTB = M_RX(); //in DATA Delay_100ms(); } }