首先easy kit的软件环境应用这里就不多说了,论坛里的很多童鞋都积极发言为大家提供服务,这里我就手头现有器件DS1821通过富士通mb95264单片机进行控制,主要进行DS1821工作模式设置,温度读取.尤其对一线制时序进行了仔细的跟踪调试,目的对我的试用手记负责,需要的童鞋可以借鉴,不多说了上图:
对DS1821温度传感器Reset操作抓图:
运行代码:
int8 DS1821_Reset(void)
{ int8 d;
DS1821DQ =0;// reset pulse
DQ_DDR = 1;//设置p01为输出状态
delay(60);// 600us
DQ_DDR = 0;//设置p01为输入状态
delay(1);// 20us
while(!DS1821DQ);
return (int8)DS1821DQ;
}
先看看图片能否上传!
共10条
1/1 1 跳转至页
基于富士通mb95264单片机控制DS1821可编程数字温度传感器的试用手记
2楼
对DS1821温度传感器write操作抓图:
写入数据为:0x0C
a-->h方向是从低位到高位。
代码: void DS1821_WriteByte(uint8 dat) { uint8 i,nop; for(i=0;i<8;i++){ DS1821DQ=0; if (dat&0x01) { // bit = 1 LSB first DQ_DDR = 1;//设置p01为输出状态 DQ_DDR = 0;//设置p01为输入状态 } else { // bit = 0 DQ_DDR = 1;//设置p01为输出状态 } dat >>= 1; delay(5); // wait 110us DQ_DDR = 0;//设置p01为输出状态 } DQ_DDR = 0;//设置p01为输入状态 } 对DS1821温度传感器read操作抓图: 下图是读到状态寄存器(0xAC)的值为0x50 代码: int8 DS1821_ReadByte(void) { uint8 dat,i,nop; dat=0; for(i=0;i<8;i++) { dat >>= 1; DS1821DQ=0; // 送出 1us pulse DQ_DDR = 1;//设置p01为输出状态 DQ_DDR = 0;//设置p01为输入状态 asm ("\tNOP"); asm ("\tNOP"); if(DS1821DQ) { dat|=0x80; // msb 優先 } delay(2);//等40us, 加上其它程式碼, 每個bit有80us } return (int8)dat; }
代码: void DS1821_WriteByte(uint8 dat) { uint8 i,nop; for(i=0;i<8;i++){ DS1821DQ=0; if (dat&0x01) { // bit = 1 LSB first DQ_DDR = 1;//设置p01为输出状态 DQ_DDR = 0;//设置p01为输入状态 } else { // bit = 0 DQ_DDR = 1;//设置p01为输出状态 } dat >>= 1; delay(5); // wait 110us DQ_DDR = 0;//设置p01为输出状态 } DQ_DDR = 0;//设置p01为输入状态 } 对DS1821温度传感器read操作抓图: 下图是读到状态寄存器(0xAC)的值为0x50 代码: int8 DS1821_ReadByte(void) { uint8 dat,i,nop; dat=0; for(i=0;i<8;i++) { dat >>= 1; DS1821DQ=0; // 送出 1us pulse DQ_DDR = 1;//设置p01为输出状态 DQ_DDR = 0;//设置p01为输入状态 asm ("\tNOP"); asm ("\tNOP"); if(DS1821DQ) { dat|=0x80; // msb 優先 } delay(2);//等40us, 加上其它程式碼, 每個bit有80us } return (int8)dat; }
3楼
下图是读状态寄存器(0xAC)的值为0x50的完整图片抓图:
代码:
int8 TemperatureRead(void)
{
DS1821_Reset();
DS1821_WriteByte(0xAC);
return DS1821_ReadByte();
}
下图是读温度值(0xAA)的值为0x16(22摄氏度)的完整图片抓图:
代码:
int8 TemperatureRead(void)
{
DS1821_Reset();
DS1821_WriteByte(0xAA);
return DS1821_ReadByte();
}
放到笔记本表面连续抓图:温度30左右
5楼
完整代码如下(测试通过):
#include "..\MB95200_IO\mb95200.h"
#define DS1821DQ PDR0_P01
#define DQ_DDR DDR0_P01
typedef unsigned char uint8;
typedef char int8;
void Clock_Init(void);
void delay(uint8 data);
void DS1821_Init(void);
int8 DS1821_Reset(void);
void DS1821_WriteByte(uint8);
int8 DS1821_ReadByte(void);
int8 TemperatureRead(void);
void uart_Init(void);
void send(int8 TempD);
int8 TempD=1;
void main(void)
{
uint8 j=0;
Clock_Init();
DS1821_Init();
while(1){
TempD=TemperatureRead();
delay(100);
}
}
void Clock_Init(void)
{
SYCC_DIV0 = 1;
SYCC_DIV1 = 0;
AIDRL_P01=1;
}
int8 DS1821_Reset(void)
{ int8 d;
DS1821DQ =0;// reset pulse
DQ_DDR = 1;//设置p01为输出状态
delay(60);// 600us
DQ_DDR = 0;//设置p01为输入状态
delay(1);// 20us
while(!DS1821DQ);
return (int8)DS1821DQ;
}
void DS1821_Init(void)
{
DQ_DDR = 0;//设置p01为输出状态
DS1821_Reset();
DS1821_WriteByte(0x0C);
delay(1);
DS1821_WriteByte(0x00);
DS1821_Reset();
DS1821_WriteByte(0xEE);
delay(1);
}
void DS1821_WriteByte(uint8 dat)
{
uint8 i,nop;
for(i=0;i<8;i++){
DS1821DQ=0;
if (dat&0x01) { // bit = 1 LSB first
DQ_DDR = 1;//设置p01为输出状态
DQ_DDR = 0;//设置p01为输入状态
} else { // bit = 0
DQ_DDR = 1;//设置p01为输出状态
}
dat >>= 1;
delay(5); // wait 110us
DQ_DDR = 0;//设置p01为输出状态
}
DQ_DDR = 0;//设置p01为输入状态
}
int8 DS1821_ReadByte(void)
{
uint8 dat,i,nop;
dat=0;
for(i=0;i<8;i++) {
dat >>= 1;
DS1821DQ=0; // 送出 1us pulse
DQ_DDR = 1;//设置p01为输出状态
DQ_DDR = 0;//设置p01为输入状态
asm ("\tNOP");
asm ("\tNOP");
if(DS1821DQ) {
dat|=0x80; // msb 優先
}
delay(2);//等40us, 加上其它程式碼, 每個bit有80us
}
return (int8)dat;
}
int8 TemperatureRead(void)
{
DS1821_Reset();
DS1821_WriteByte(0xAA);
return DS1821_ReadByte();
}
void delay(uint8 data)
{
for(;data>0;data--);
}
void uart_Init(void)
{
}
void send(int8 TempD)
{
}
后续,可以将得到的温度通过串口发送出去,或者显示……
9楼
一线制的时序基本都是一样的,读、写、复位过程不能被中断,时序要求较严格。换个一线制外设芯片无非就是操作寄存器的地址不同方式不同需要根据手册要求去设计,读(DS1821_ReadByte)、写(DS1821_WriteByte)、复位(DS1821_Reset)函数在富士通这个系列单片机上是通用的。
共10条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】智能可穿戴设备AR/VR如何引领科技新潮流! | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
【有奖活动】震撼来袭!这场直播将直击工程师的心灵! | |
“我想要一部加热台”活动,不花钱赢取开发好工具!活动开始了哦 | |
【有奖活动】伙伴们:您的“需求”解决了吗? |
打赏帖 | |
---|---|
【换取手持数字示波器】N32G430点亮数码管与串口打印、ADC被打赏40分 | |
老胖子聊电路--分析一个反馈电路被打赏50分 | |
【换取手持数字示波器】+点亮WS2812RGB灯被打赏50分 | |
【换取手持数字示波器】+线性调整器理论知识分享被打赏40分 | |
放大↔震荡被打赏50分 | |
【换取手持数字示波器】RTduino驱动ssd1306+sht31温湿度计被打赏40分 | |
【换取手持数字示波器】称植国产开源TobudOS到雅特力AT32F425被打赏40分 | |
【分享评测,赢取加热台】+Telink-泰凌微电子B91点灯篇被打赏20分 | |
【换取手持数字示波器】+精英板驱动LCD屏被打赏50分 | |
【换取手持数字示波器】+DFR0216全彩灯带WS2812示例分享被打赏50分 |