Mình đang làm giao tiếp PSOC với DS1820
2 ngày nay vất vả với đoạn CODE đọc và ghi BYTE đến DS1820
Bác nào đã làm xin xem giúp đoạn CODE với, không hiểu sao làm mãi mà nó vẫn không nhận được giá trị nhiệt độ đúng
Đây là đoạn CODE đọc BYTE
BYTE Read()
{
BYTE i, value, trung_gian;
for (i = 8; i > 0; i--)
{
value >>=1; //Dich bit phai
value |= 0x80; //set bit value.7
PRT0DM0 |= DQ; //Dat P0.5 = output (Strong mode)
PRT0DM1 &= ~DQ; //
P0 &= ~DQ; //P0.5 = DQ = 0, pull down DQ to start Timelost
//DelayuFunction(0);
PRT0DM0 &= ~DQ; //Set DQ = input (High Z analog)
PRT0DM1 |= DQ;
DelayuFunction(4); //Delay 12 - 13us < 15us
trung_gian = P0 | DQ;
if (trung_gian == 0) value &= ~0x80; //neu DQ = 1 thi set bit nhan duoc
DelayuFunction(24); //Delay 50us for thoi gian nghi
}
return(value);
}
Xin nhờ các bác chỉ giùm
2 ngày nay vất vả với đoạn CODE đọc và ghi BYTE đến DS1820
Bác nào đã làm xin xem giúp đoạn CODE với, không hiểu sao làm mãi mà nó vẫn không nhận được giá trị nhiệt độ đúng
Đây là đoạn CODE đọc BYTE
BYTE Read()
{
BYTE i, value, trung_gian;
for (i = 8; i > 0; i--)
{
value >>=1; //Dich bit phai
value |= 0x80; //set bit value.7
PRT0DM0 |= DQ; //Dat P0.5 = output (Strong mode)
PRT0DM1 &= ~DQ; //
P0 &= ~DQ; //P0.5 = DQ = 0, pull down DQ to start Timelost
//DelayuFunction(0);
PRT0DM0 &= ~DQ; //Set DQ = input (High Z analog)
PRT0DM1 |= DQ;
DelayuFunction(4); //Delay 12 - 13us < 15us
trung_gian = P0 | DQ;
if (trung_gian == 0) value &= ~0x80; //neu DQ = 1 thi set bit nhan duoc
DelayuFunction(24); //Delay 50us for thoi gian nghi
}
return(value);
}
Xin nhờ các bác chỉ giùm
Comment