#include #include #define _XTAL_FREQ 4000000 // Fuse bity __CONFIG(FOSC_INTOSCIO & WDTE_OFF & PWRTE_OFF & MCLRE_OFF & BOREN_OFF & LVP_OFF & CPD_OFF & CP_OFF); // Inicializace void init() { OPTION_REG = 0b01111111; TRISB = 0b11000000; } // 1-Wire: RESET char oneWireReset() { char b; TRISB6 = 0; RB6 = 0; __delay_us(480); TRISB6 = 1; __delay_us(70); b = RB6; __delay_us(410); return b; } // 1-Wire: READ BIT char oneWireReadBit() { char b; TRISB6 = 0; RB6 = 0; __delay_us(6); TRISB6 = 1; __delay_us(9); b = RB6; __delay_us(55); return b; } // 1-Wire: READ BYTE char oneWireReadByte() { char byte = 0; TRISA6 = 0; for(char i = 0; i < 8; i++) { byte >>= 1; if (oneWireReadBit() == 1) { byte |= 0b10000000; } } return byte; } // 1-Wire: WRITE BIT void oneWireWriteBit(char b) { TRISA6 = 0; RB6 = 0; if (b != 0) { __delay_us(6); TRISB6 = 1; __delay_us(64); } else { __delay_us(60); TRISB6 = 1; __delay_us(10); } } // 1-Wire: WRITE BYTE void oneWireWriteByte(char byte) { for (char i = 0; i < 8; i++) { oneWireWriteBit(byte & 0b00000001); byte >>= 1; } } // Hlavni program void main() { unsigned char byteL, byteH; unsigned char string[16]; if (oneWireReset()) { printString(1,"DS18B20: X"); } else { printString(1,"DS18B20: OK"); } oneWireReset(); oneWireWriteByte(0xCC); oneWireWriteByte(0x44); __delay_ms(250); __delay_ms(250); __delay_ms(250); oneWireReset(); oneWireWriteByte(0xCC); oneWireWriteByte(0xBE); byteL = oneWireReadByte(); byteH = oneWireReadByte(); oneWireReset(); sprintf(string,"%X %X",byteL,byteH); printString(2,string); while (1) { } }