PIC Vietnam

Go Back   PIC Vietnam > Truyền thông > Giao tiếp USB, CAN, I2C, SPI, USART...

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Giao tiếp USB, CAN, I2C, SPI, USART... Những giao tiếp được tích hợp trên PIC

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 21-05-2011, 09:00 PM   #1
nakatatran
Nhập môn đệ tử
 
Tham gia ngày: Sep 2010
Bài gửi: 3
:
Giao tiếp one-wire ds18b20 đo nhiệt độ nhờ mọi người giúp mình

Mình viết chương trình sử dụng pic16f887 + ds18b20 xuất nhiệt độ ra lcd. (có gửi file đính kèm..)
link : http://www.mediafire.com/?z421gvz8h7k4b01
http://www.mediafire.com/?h85o48ee0yw5b2d
còn đây là có mình viết trên hitech C.
Do mình mới làm quen với pic nên gặp khó khăn nhờ các bạn xem giúp .Cám ơn!!
//
#include <htc.h>
#include<stdio.h>
#include "lcd.h"
__CONFIG(INTIO&WDTDIS&PWRTEN&MCLREN&UNPROTECT&DUNP ROTECT&BORDIS&IESODIS&FCMDIS&LVPDIS);
__CONFIG(BORV21);
#define _XTAL_FREQ 4000000
#define DQ RC0
//PORTC 0X07

unsigned char ow_reset(void)
// bit ow_reset(void)
{
unsigned char presence;
presence=1;
while(presence)
{
TRISC=0;
DQ = 0; //pull DQ line low
__delay_us(500); // leave it low for about 490us
DQ = 1; // allow line to return high
__delay_us(40); // wait for presence 55 uS
TRISC=1;
presence = DQ; // get presence signal
__delay_us(25); // wait for end of timeslot 316 uS
}
return(presence); // presence signal returned
} // 0=presence, 1 = no part
unsigned char read_bit(void)
{
//unsigned char i=0;
TRISC=0;
DQ = 0;
__delay_us(1);
TRISC=1;
__delay_us(15); // pull DQ low to start timeslot
// DQ=1;
// for (i=0; i<3; i++); // delay 17 us from start of timeslot
return(DQ); // return value of DQ line
}

void write_bit(char bitval)
{
TRISC=0;
DQ=0;
//DQ = Dbit;
__delay_us(15); // delay about 39 uS
if(bitval==1) TRISC=1;
__delay_us(50);
// DQ = 1;
}

// READ_BYTE - reads a byte from the one-wire bus.
//
unsigned char read_byte(void)
{
unsigned char i;
unsigned char value = 0;
for (i=0;i<8;i++)
{
if(read_bit()) value|=0x01<<i; // reads byte in, one byte at a time and then
// shifts it left
__delay_us(150); // wait for rest of timeslot
}
return(value);
}

void write_byte(char val)
{
unsigned char i;
unsigned char temp;
for (i=0; i<8; i++) // writes byte, one bit at a time
{
temp = val>>i; // shifts val right 'i' spaces
temp &= 0x01; // copy that bit to temp
write_bit(temp); // write bit in temp into
}
__delay_us(100);
}
void main (void)
{
unsigned char x;
TRISC=0;
RC0=0;
ANSEL=ANSELH=0;
ow_reset();
write_byte(0xCC); // skip ROM
write_byte(0x44); // Start conversion

__delay_us(100);
ow_reset();
write_byte(0xCC);
x = read_byte();
lcd_init();
lcd_gotoxy(2,1);
printf("temp = %u",x);


__delay_us(100000);

}

void putch(char c)
{
lcd_putc(c);
}
nakatatran vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 01:43 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam