当前位置:首页 > 单片机 > 单片机
[导读]这是我在16F877,18F1320,18F1220上通过的18B20程序,18B20主要是延时问题,这个解决了,什么都可以通过。[原作者没有提供所使用的编译器,由于是C程序,所以大同小异,建议使用时,确认是否与你的编译器兼容] C程序

这是我在16F877,18F1320,18F1220上通过的18B20程序,18B20主要是延时问题,这个解决了,什么都可以通过。

[原作者没有提供所使用的编译器,由于是C程序,所以大同小异,建议使用时,确认是否与你的编译器兼容]

 

 

C程序

 

#include <pic18f1220.h>

#define uch unsigned char

#define unint unsigned int

#define DQ RB3 //定义18B20数据端口

#define DQ_DIR TRISB3 //定义18B20D口方向寄存器

#define W1_INPUT 1

#define W1_OUTPUT 0

#define FALSE 0

#define TRUE !FALSE

#define DQ_HIGH() DQ_DIR = W1_INPUT

#define DQ_LOW() DQ = 0; DQ_DIR = W1_OUTPUT

void delay(unint x)

{

unint d;

d=x;

while(--d)

{;}

}

bit reset(void) //初始化18B20

{

static bit presence; //定义一个应答信号

DQ_LOW();

delay(70); //置总线为低电平并保持至少480us

DQ_HIGH(); //等电阻拉高总线并保持15-60us

delay(5);

presence=DQ; //接受应答信号

delay(20); //延时60-240us

return(presence); //返回应答信号

}

//*************** 读一位函数******************//

bit read_bit(void)

{

static bit i;

DQ_LOW();

DQ_LOW();

DQ_HIGH();

asm("nop");

asm("nop");

asm("nop");

i=DQ;

delay(3);

return(i);

}

//*********************写一位函数****************//

void write_bit(uch bitval)

{

DQ_LOW();

delay(1);

if (bitval==1)

{

DQ_HIGH();

}

delay(3);

DQ_HIGH();

}

//************** 从18B20中读一个字节**************//

uch read_byte(void)

{

uch i;

uch j;

uch value=0;

for (i=0;i<8;i++)

{

j=read_bit(); //调读位函数

if (j) //如果是 1 置1

{

value|=(0x01<<i); //先读低位,再读高位

asm("nop");

asm("nop");

asm("nop");

}

} //否则置 0

return(value);

}

//*********************向18B20中 写一个字节**************//

void write_byte(uch val)

{

uch i;

uch temp;

for (i=0;i<8;i++)

{

temp=val>>i;

temp&=0x01;

write_bit(temp); //调写位函数

}

asm("nop");

asm("nop");

asm("nop");

}

main()

{

uch teml,temh;

GIE=0;

OSCCON=0X6E; //这是18F1320的频率选择寄存器

ADCON1=0X7F;

do{

;

}while (reset()) ; //复位等待从机应答

write_byte(0XCC); //忽略ROM匹配

write_byte(0X44); //发送温度转化命令

delay(25000); //延时100-300us

do

{

;

}while( reset()); //再次复位,等待从机应答

write_byte(0XCC); //忽略ROM匹配

write_byte(0XBE); //发送读温度命令

teml =read_byte(); //读出温度低8

temh=read_byte(); //读出温度高8位

DQ_HIGH(); //释放总线

}

 
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

以科技创新力量,重新定义产业办公及产业洞察视角 成都2023年8月16日 /美通社/ -- 由仲量联行(纽交所代码:JLL)主办的睿见论坛之"REDEFINE 焕新成都产链 · 重构城市价值&q...

关键字: 数据分析 楼宇 BSP DEFINE

那么用户下载到的就是该系统的所有源代码,并且可以随意修改。这也是解释型语言本身的特性,想要运行程序就必须有源代码。

关键字: python 源代码 C/C++程序

武汉2022年12月20日 /美通社/ -- 12月14日,"2022全国网民网络安全感满意度调查报告发布周"《网络安全行业发展专题报告》发布会成功举办,面向全社会正式发布了报告,其中重点关...

关键字: 开源 数据库 核心技术 源代码

独立的 IDE 插件使开发人员能够检测源代码和开源依赖项中的安全漏洞

关键字: 新思科技 IDE 插件 源代码

(全球TMT2021年12月7日讯)开放原子开源基金会(简称“开源基金会”)作为中国首个以开源为主题的基金会,是开源项目的孵化器、连接器和倍增器,致力于为全球开发者搭建可持续的开源合作平台,OpenHarmony、op...

关键字: 开源 PEN 开发者 源代码

3个SystemVerilog新特性!01`begin_keyword`end_keyword硬件描述语言中有很多特殊的编译或者综合等工具的预执行指令,在某些场景下我们可以利用一下HDL之外的语法去指导工具,而不是信马由...

关键字: SYSTEMVERILOG DEFINE PACKAGE 编译

点击上方「嵌入式云IOT技术圈」,选择「置顶公众号」第一时间查看嵌入式笔记!最近两个月MBA美帝在职研的课程即将结束,经过个人的努力,目前两门课:全球商务、定量决策均分绩点如下,基本上逼近满分(凡尔赛了,哈哈哈),光鲜亮...

关键字: 源代码 学习笔记

击上方“嵌入式云IOT技术圈”,选择“置顶/星标公众号”干货福利,第一时间送达!1、Marlin2.0参数存储M命令Marlin2.0的存储功能主要依靠EEPROM来进行,Marlin也提供了相应的M代码来协助3D打印爱...

关键字: 固件 源代码 3D打印

在英特尔架构、图形和软件集团副总裁兼中国区总经理谢晓清看来,开源已成为软件的存在方式之一,未来的软件发展一定会越来越多以开源的方式存在。“这肯定是一个趋势。”

关键字: 软件 源代码 英特尔

新衍生产品将为JES3plus®、JES3和JES2增加新功能 加利福尼亚州埃尔塞贡多, Dec. 12, 2020 (GLOBE NEWSWIRE) -- Phoenix Software I

关键字: Software 源代码 Phoenix
关闭
关闭