编写ds18b20的感想
来源:互联网 发布:淘宝怎样刷收藏 编辑:程序博客网 时间:2024/09/21 08:56
#include "delay.h"
#include <reg51.h>
#include <intrins.h>
void delay_nus(unsigned char n) //延时n + 4 + 1 个周期
{
#pragma asm //第三方发送到发送到
DJNZ R7,$
#pragma endasm
}
/**********************************************
/对于DS18B20的读时隙是从主机把单总线拉低之后,
/在15秒之内就得释放单总线,以让DS18B20把数据
/传输到单总线上。DS18B20在完成一个读时序过程,
/至少需要60us才能完成
**********************************************/
unsigned char Read_Byte(void)
{
unsigned char dat;
unsigned char i;
dat = 0;
for (i = 0; i < 8; ++i)
{
dat >>= 1 ;
DQ = 0;
delay_nus(1);
DQ = 1;
_nop_();
if (DQ == 1)
{
dat |= 0x80;
}
DQ = 1;
delay_nus(50);
}
return dat;
}
/**********************************************
/对于DS18B20的读时隙是从主机把单总线拉低之后,
/DS18B20在15秒~60秒对I/O线采样, ,线上为1就写1
/为0则写0,总过程至少需要60us才能完成
**********************************************/
void Write_Byte(unsigned char dat)
{
unsigned char i;
DQ = 1;
for (i = 0; i < 8; ++i)
{
DQ = 0;
delay_nus(1);
DQ = dat & 0x01;
DQ = dat & 0x01;
delay_nus(40);
DQ = 1;
dat >>= 1;
}
}
今天花了两个多小时来写了这三个函数,之所以花那么多时间,一是因为对C嵌汇编不了解,为了写这个延时函数,花了不少时间. 二是对时序的理解能力还不够.
例如在写unsigned char Read_Byte(void)的时候开始以为是把总线拉低15秒,在这15秒内主机读I/O线.没有释放总线,使总线一直处于主机拉低状态.
现在完整的属于自己的程序还没写好,用来测试这三个函数的程序是已经可以使用的.写完在继续谈感想.不过语言太烂.
- 编写ds18b20的感想
- DS18B20驱动程序编写
- DS18B20 驱动编写
- DS18B20 驱动编写
- 关于程序编写的感想
- S3C2440 温度传感器ds18b20的驱动编写与测试
- Ubuntu下编写ds18b20驱动程序
- S3C2440 温度传感器ds18b20的驱动编写与测试--比较详细的1-wire
- DS18B20的温度测量
- DS18B20的驱动过程
- ds18b20的笔记
- ds18b20 控制的实现
- OK6410的ds18b20驱动
- DS18B20传感器的原理
- 温度传感器--DS18B20的使用
- DS18B20的具体操作流程
- Stm32-DS18B20的使用
- DS18b20温度传感器的使用
- ERP是什么(例子说明)^^^^
- 剖析IT男人很闷骚的四大原因
- CGI跟我学-转帖
- 国庆长假后的记事
- Windows XP 组策略之安全篇
- 编写ds18b20的感想
- 我们为什么这么容易受骗?
- 搭建开发环境
- Tomcat服务器下如何配置并使用可执行CGI,扩屏名是exe的。
- dbgrid中加入COMBOBOX
- DBGrid 应用全书
- 对水波特效实现原理的解释
- 好想快点毕业带父母去旅游一下
- 如何配置执行c写的cgi程序