資源簡介
基于mega128的ds18b20+串口程序 實測通過,通過串口1上傳至上位機

代碼片段和文件信息
//溫度加串口程序//
?
//初始化定義
#include
#include
#define ?F_CPU 8000000
#define?fosc?8000000?//晶振?8MHZ
#define?baud?9600?//波特率
#define?DQ_IN ????????DDRE?&=?~(1?<#define?DQ_OUT ????????DDRE?|=?(1?<#define?DQ_CLR ????????PORTE?&=?~(1?<#define?DQ_SET ????????PORTE?|=?(1?<#define?DQ_R ????????PINE?&?(1?<unsigned?int?temp_valuetemp_htemp_l;
unsigned?int?tempA1A2A3;A4;
//?延時程序??10倍
void?delay_us(unsigned?int?i)
{
??????unsigned?int?j;
??????for(;i!=0;i--)
??????????{_delay_us(10);
???????????}
}
//*************************************************************************?
// DS18B20初始化
//*************************************************************************
unsigned?char?DS18B20_Reset(void)?????????????????//初始化和復位
{
unsigned?char?i;
????DQ_OUT;
DQ_CLR;
delay_us(50); //延時500uS(480-960)
DQ_SET;
DQ_IN;
delay_us(8); //延時80uS
i?=?DQ_R;
delay_us(50); //延時500uS(保持>480uS)
if?(i)?
????????{
return?0x00;
????????}
else?
????????{
return?0x01;
????????}
}
//*************************************************************************?
// DS18B20讀一個字節函數
//*************************************************************************?
???
unsigned?char?ds1820_read_byte(void)?
{
unsigned?char?i;
unsigned?char?value?=?0;
for?(i?=?8;?i?!=?0;?i--)?
????????{
value?>>=?1;
DQ_OUT;
DQ_CLR;
????????delay_us(1); //*延時4uS
DQ_SET;
DQ_IN;
????????delay_us(1); //*延時10uS
if?(DQ_R)?
????????????????{
value|=0x80;
????????????????}
delay_us(6); ???????//*延時60uS
????????}
return(value);
}
//*************************************************************************?
// 向18B20寫一個字節函數
//*************************************************************************??
/*DS18B20字節寫入函數*/
void?ds1820_write_byte(unsigned?char?value)?
{
unsigned?char?i;
for?(i?=?8;?i?!=?0;?i--)?
????????{
DQ_OUT;
DQ_CLR;
????????delay_us(1); //延時4uS
if?(value?&?0x01)?
????????????????{
DQ_SET;
????????????????}
delay_us(8); //延時80uS
DQ_SET; ????????//位結束
value?>>=?1;
????????}
}
//*************************************************************************
// 發送溫度轉換命令
//*************************************************************************?
/*啟動ds1820轉換*/
void?ds1820_start(void)?{
DS18B20_Reset();
ds1820_write_byte(0xCC); //勿略地址
ds1820_write_byte(0x44); //啟動轉換
}
//*************************************************************************
// DS8B20讀取溫度信息
//*************************************************************************?
unsigned?int?ds1820_read_temp(void)?
{
unsigned?int?i;
unsigned?char?buf[9];
DS18B20_Reset();
ds1820_write_byte(0xCC); //勿略地址
ds1820_write_byte(0xBE); //讀取溫度
for?(i?=?0;?i?9;?i++)?
?????{
? ??buf[i]?=?ds182
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????5392??2013-04-18?15:44??uart3.c
評論
共有 條評論