// transmit and receive (working) #include <16F628.h> #device adc=8 #use delay(clock=4000000) #fuses PUT, XT, NOMCLR, NOWDT, NOLVP, NOBROWNOUT #use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8) // --------------------- // Port B // --------------------- //#define TRW_CLK2 PIN_B0 // #define TRW_CLK1 PIN_B5 // #define TRW_CS PIN_B7 // #define TRW_CE PIN_B3 // //#define TRW_DOUT2 PIN_B4 // #define TRW_DATA PIN_B4 // #define TRW_DR1 PIN_B6 // //#define TRW_DR2 PIN_B7 // // 0-out 1-in 0b76543210 #define B_TRIS 0b11110000 inline initPorts() { port_b_pullups(FALSE); disable_interrupts(INT_RB); // SET_TRIS_A( A_TRIS ); // SET_TRIS_B( B_TRIS ); // SET_TRIS_C( C_TRIS ); } // ======================================================================== // Timing // #define XTAL 4000000 #define IPS (XTAL/4) // Master tick clock is 8bit with no prescaler //> 20kHz , 50us = RTCC_TICKS_PER_MS) { time50us = 0; tMs = !tMs; } } #define BUF_MAX 6 byte buf[BUF_MAX]; #define CLKDELAY() //delay_us(5) #define CSDELAY() //delay_us(10) #define PWUPDELAY() delay_us(999) void putByte( byte b ) { //msb bit first int8 i; int8 p = 7; for(i=0 ; i < 8 ; i++) { output_low(TRW_CLK1); if( bit_test(b,p--) ) { output_high(TRW_DATA); }else{ output_low(TRW_DATA); } CLKDELAY(); output_high(TRW_CLK1); // clock out on rising edge CLKDELAY(); } } byte getByte() { //msb bit first int8 i , b = 0; int8 p = 7; for(i=0 ; i < 8 ; i++) { output_low(TRW_CLK1); CLKDELAY(); output_high(TRW_CLK1); CLKDELAY(); // read before falling edge if( input(TRW_DATA) ) { bit_set(b,p--); }else{ bit_clear(b,p--); } } return b; } void trwConfig() { output_low(TRW_CE); output_low(TRW_CS); output_low(TRW_CLK1); output_low(TRW_DATA); PWUPDELAY(); output_high(TRW_CS); CSDELAY(); //msb byte first putByte(DATA2_W); putByte(DATA1_W); putByte(ADDR2_4); putByte(ADDR2_3); putByte(ADDR2_2); putByte(ADDR2_1); putByte(ADDR2_0); putByte(ADDR1_4); putByte(ADDR1_3); putByte(ADDR1_2); putByte(ADDR1_1); putByte(ADDR1_0); putByte(ADDR_W | CRC_L | CRC_EN); putByte(RX2_EN | CM | RFDR_SB | XO_F | RF_PWR); putByte(RF_CH | RXEN); //lsb byte last output_float(TRW_DATA); output_low(TRW_CE); output_low(TRW_CS); output_low(TRW_CLK1); } void trwSetTxByte() { output_low(TRW_CE); output_high(TRW_CS); CSDELAY(); putByte(RF_CH); output_low(TRW_CS); output_low(TRW_CLK1); } void trwSetTx() { output_low(TRW_CE); //output_low(PIN_C0); output_high(TRW_CS); CSDELAY(); output_low(TRW_DATA); output_high(TRW_CLK1); CLKDELAY(); output_low(TRW_CLK1); CLKDELAY(); output_low(TRW_CS); output_low(TRW_CLK1); } void trwSetRxByte() { output_low(TRW_CE); output_high(TRW_CS); CSDELAY(); putByte(RF_CH | RXEN); output_low(TRW_CS); output_float(TRW_DATA); output_low(TRW_CLK1); output_high(TRW_CE); } void trwSetRx() { output_low(TRW_CE); //output_low(PIN_C0); output_high(TRW_CS); CSDELAY(); output_high(TRW_DATA); output_high(TRW_CLK1); CLKDELAY(); output_low(TRW_CLK1); CLKDELAY(); output_low(TRW_CS); output_float(TRW_DATA); output_low(TRW_CLK1); output_high(TRW_CE); //output_high(PIN_C0); } void putBuf() { int8 i; output_high(TRW_CE); //output_high(PIN_C0); CSDELAY(); putByte(ADDR1_1); putByte(ADDR1_0); for( i=0; i