feat: onewire and ds18b20 driver
This commit is contained in:
58
lib/onewire/onewire.c
Normal file
58
lib/onewire/onewire.c
Normal file
@ -0,0 +1,58 @@
|
||||
//
|
||||
// Created by 5ANK41 on 2024/11/28.
|
||||
|
||||
#include "onewire.h"
|
||||
|
||||
uchar OneWire_init(void) {
|
||||
uchar i;
|
||||
ONE_WIRE_P = 1;
|
||||
ONE_WIRE_P = 0;
|
||||
i = 247;
|
||||
while (--i);
|
||||
ONE_WIRE_P = 1;
|
||||
i = 32;
|
||||
while (--i);
|
||||
uchar ack = ONE_WIRE_P;
|
||||
i = 247;
|
||||
while (--i);
|
||||
return ack;
|
||||
}
|
||||
|
||||
void OneWire_writeBit(uchar _bit) {
|
||||
uchar i;
|
||||
ONE_WIRE_P = 0;
|
||||
i = 4;
|
||||
while (--i);
|
||||
ONE_WIRE_P = _bit;
|
||||
i = 24;
|
||||
while (--i);
|
||||
ONE_WIRE_P = 1;
|
||||
}
|
||||
|
||||
void OneWire_writeByte(uchar _byte) {
|
||||
for (uchar i = 0; i < 8; i++) {
|
||||
OneWire_writeBit(_byte & 0x01 << i);
|
||||
}
|
||||
}
|
||||
|
||||
uchar OneWire_readBit(void) {
|
||||
uchar i, _bit;
|
||||
ONE_WIRE_P = 0;
|
||||
i = 2;
|
||||
while (--i);
|
||||
ONE_WIRE_P = 1;
|
||||
i = 2;
|
||||
while (--i);
|
||||
_bit = ONE_WIRE_P;
|
||||
i = 24;
|
||||
while (--i);
|
||||
return _bit;
|
||||
}
|
||||
|
||||
uchar OneWire_readByte(void) {
|
||||
uchar _byte = 0x00;
|
||||
for (uchar i = 0; i < 8; i++) {
|
||||
if (OneWire_readBit()) { _byte |= 0x01 << i; }
|
||||
}
|
||||
return _byte;
|
||||
}
|
Reference in New Issue
Block a user