ds1820-ví dụ cho c51 cần thiết!

O

onde

Guest
Xin chào,

Có ai biết một liên kết hoặc có cùng một ví dụ về lập trình các ds1820 trong c51???
cảm ơn trước,
onde

 
/ / DS1820 C51

/ / Sbit DQ = p2 ^ 1;

typedef unsigned char byte;
typedef unsigned int từ;

void chậm trễ (useconds từ)
(
cho (; useconds> 0; useconds -);
)

byte ow_reset (void)
(
byte hiện diện;
DQ = 0; / / DQ kéo dòng thấp
; Chậm trễ (29) / / để nó thấp cho 480us
DQ = 1; / / cho phép dòng để trở về cao
; Chậm trễ (3) / / chờ đợi sự hiện diện
sự hiện diện = DQ; / / nhận tín hiệu hiện diện
; Chậm trễ (25) / / đợi cuối khe thời gian
trở lại (hiện diện); / / hiện diện tín hiệu quay trở lại
) / / 0 = hiện diện, 1 = không có một phần

byte read_byte (void)
(
byte i;
byte giá trị = 0;
cho (i = 8; i> 0; i -)
(
giá trị>> = 1;
DQ = 0; / / kéo DQ thấp để bắt đầu khe thời gian
DQ = 1; / / sau đó quay trở lại cao
sự chậm trễ (1); / / for (i = 0; i <3; i );
if (DQ) giá trị | = 0x80;
; Trì hoãn (6) / / đợi phần còn lại của khe thời gian
)
trở lại (giá trị);
)void write_byte (char val)
(
byte i;
cho (i = 8; i> 0; i -) / / ghi byte, một bit tại một thời
(
DQ = 0; / / kéo DQ thấp để bắt đầu khe thời gian
DQ = val &0x01;
; Chậm trễ (5) / / giữ giá trị cho phần còn lại của khe thời gian
DQ = 1;
val = val / 2;
)
sự chậm trễ (5);
)char Read_Temperature (void)
(
(công đoàn
byte c [2];
int x;
) Temp;

ow_reset ();
write_byte (0xCC); / / Bỏ qua ROM
write_byte (0xBE); / / Đọc Scratch Pad
temp.c [1] = read_byte ();
temp.c [0] = read_byte ();
ow_reset ();
write_byte (0xCC); / / Bỏ qua ROM
write_byte (0x44); / / Bắt đầu chuyển đổi
trở về temp.x / 2;
)

 

Welcome to EDABoard.com

Sponsor

Back
Top