Environment: MPLAB X IDE + HI TECH Compiler for PIC16
#define OW_TRIS TRISA0 //Port mode register, 1=input,0=output #define OW_PORT RA0 //Pin connected to 1-wire bus int owReset(void) { char state = 0; OW_TRIS = 0; //Set as output OW_PORT = 0; //Drive Low __delay_us(480); OW_TRIS = 1; //Release, Set back as input __delay_us(70); state = !OW_PORT; //If devices are present, it will keep the pin low //! will invert 1=0, 0=1 __delay_us(410); return state; //Returns 1 if devices are present }
int owReadByte(void) { int loop, result = 0; for(loop = 0; loop < 8; loop++) { result >>= 1; if(owReadBit()) result |= 0x80; } return result; }
int owReadBit(void) { unsigned int iReadState = 0; OW_TRIS = 0; //Set as output OW_PORT = 0; //Drive low __delay_us(4); OW_TRIS = 1; //Release, set as input __delay_us(8); iReadState = OW_PORT; return iReadState; }
void owWriteByte(unsigned int data) { int loop; for(loop = 0; loop < 8; loop++) { owWriteBit(data &0x01); data >>= 1; } }
void owWriteBit(unsigned int b) { OW_TRIS = 0; //Set as output OW_PORT = 0; //Drive low if(b==1) { __delay_us(3); OW_TRIS = 1; //Release, set as input __delay_us(62); } else { __delay_us(57); OW_TRIS = 1; //Release, set as input __delay_us(7); } }
void owMatchRom(unsigned int * id) { owReset(); owWriteByte(0x55); //Send command Match ROM //Send adress for(int i = 0;i<8;i++) { owWriteByte(id[i]); } }