历史上的今天
今天是:2025年03月12日(星期三)
2020年03月12日 | MSP430F149的DS18B20C语言程序
2020-03-12 来源:eefocus
#include "msp430x14x.h" // Standard Equations
//-------------------------I/O口定义------------------------------------
#define DS_DIR P6DIR
#define DS_OUT P6OUT
#define DS_IN P6IN
#define DS18B20 BIT4
#define W18BUS_1 {DS_DIR |= DS18B20;DS_OUT |= DS18B20;_NOP();DS_DIR &= ~DS18B20;}
//DS18B20总线写"1"
#define W18BUS_0 {DS_DIR |= DS18B20;DS_OUT &= ~DS18B20;_NOP();}
//DS18B20总线写"0"
#define SF18BUS (DS_DIR &= ~DS18B20) //释放DS18B20总线
#define R18BUS (DS_IN & DS18B20)
#define FLAG_TEMP_RET 0x01 //DS18B20复位OK
#define FLAG_TEMP_OK 0x02 //DS18B20 传感器OK
#define FLAG_TEMP_OVER 0x04 //搜索DS18B20结束
#define WDT_CLR (WDTCTL = WDTPW + WDTCNTCL + WDTSSEL + WDTIS0) //看门狗清零
//----------------------------------------------------------------------
void Delay(unsigned int x); //延时程序
void Temp(void);
//-----------------------全局变量定义------------------------------
unsigned char ID[5][8]; //ID[5][8]为检索到的地址
unsigned char TEMP_NUMBER; //温度传感器数量
unsigned int TEMP[5]; //温度值
float fT[5];
//-----------------------软件标志定义------------------------------
unsigned int FLAG; //软件标志
//FLAG.0--DS18B20复位OK FLAG.1--温度传感器OK FLAG.2--搜索温度结束
//****************************************************************************
//模块名:Init_DS18B20
//描述: 初试化DS18B20子程序。
//****************************************************************************
void Init_DS18B20(void)
{
DS_DIR = DS18B20;
DS_OUT = 0;
}
void main(void)
{
unsigned int iq0;
WDTCTL = WDTPW +WDTHOLD; //停看门狗
//---------------------------系统时钟定义---------------------
BCSCTL1&=~XT2OFF; //打开XT2振荡器
do
{
IFG1 &= ~OFIFG; // 清除振荡器失效标志
for (iq0 = 0xFF; iq0 > 0; iq0--); // 延时,等待XT2起振
}
while ((IFG1 & OFIFG) != 0); // 判断XT2是否起振
BCSCTL2 =SELM_2+DIVS_0+SELS; //选择MCLK、SMCLK为XT2
Init_DS18B20();
_EINT();
while (1)
{
Temp();
for (iq0 = 5; iq0 != 0; iq0--)
{
fT[iq0-1] = 0.0625 * TEMP[iq0-1];
}
_NOP();
}
}
//****************************************************************************
//模块名:Rst_DS18B20
//描述: 复位温度传感器DS18B20子程序。
//****************************************************************************
void Rst_DS18B20(void)
{
unsigned int I;
FLAG |= FLAG_TEMP_RET; //预设ds18b20复位OK
W18BUS_0; //拉低总线
Delay(960); //延时480uS
SF18BUS; //释放总线
Delay(50); //延时15-60uS
I = 890;
while (/*(R18BUS) && */(I != 0)) I--; //循环条件:ds18b20总线不为“0”
//并且延时总时间不够4mS
if (I != 0)
{
_NOP();
while(!(R18BUS));
}
else
{
FLAG &= ~FLAG_TEMP_RET;
}
}
//****************************************************************************
//模块名:Read_BUS_bit
//描述: 从单总线读一位数据子程序。
//功能: DATA右移一位,从单总线读一位数据到DATA的最高位,
//****************************************************************************
unsigned char Read_BUS_bit (unsigned char DATA)
{
unsigned char I;
DATA >>= 1;
SF18BUS; //释放总线
I = 30;
while (I != 0) I--;
_DINT();
W18BUS_0; //拉低总线2uS
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
W18BUS_1; //拉高总线
I = 20;
while (I != 0) I--;
if (R18BUS != 0)
DATA |= 0X80;
_NOP();
_EINT();
I = 25; //延时45uS
while (I != 0) I--;
return (DATA);
}
//****************************************************************************
//模块名:Write_BUS_bit
//描述: 向单总线写一位数据子程序。
//功能: 把DATA的最低一位数据写到单总线上,DATA右移一位
//****************************************************************************
unsigned char Write_BUS_bit (unsigned char DATA)
{
unsigned char I;
_DINT();
W18BUS_1;
if (DATA&0X01)
{
DS_DIR |= DS18B20;
DS_OUT &= ~DS18B20;
_NOP();
_NOP();
DS_OUT |= DS18B20;
}
else
{
W18BUS_0;
}
_EINT();
I = 16; //延时15uS
while (I != 0) I--;
DATA >>= 1;
I = 80;
while (I != 0) I--;
W18BUS_1;
_NOP();
_NOP();
return (DATA);
}
//****************************************************************************
//模块名:Read_BUS_Byte
//描述: 从单总线读一个字节数据子程序。
//功能: 返回从单总线读出的一个字节数据,调用了Read_BUS_bit
//****************************************************************************
unsigned char Read_BUS_Byte (void)
{
unsigned char I;
unsigned char DATA;
for (I = 8;I != 0;I--)
{
DATA = Read_BUS_bit(DATA);
}
return (DATA);
}
//****************************************************************************
//模块名:Write_BUS_Byte
//描述: 向单总线写一个字节数据子程序。
//功能: 调用Write_BUS_bit,把DATA数据写到单总线上
史海拾趣
|
一.添加设置过孔 在DXP 中添加布线过孔(Via)可以直接利用热键TAB,在Layer 中设置不同的走线层即可自动添加过孔,务必在先确定一点并且在不同的层面上,自动添加的过孔会以浮动的形式根据需要确定位置!连接布线的焊盘的移动式和光标 ...… 查看全部问答> |
|
小弟毕业设计就快完了,搞的是PPC2003软件设计。在开发过程中,现在还留了点问题下来。 一、有没有能够实现将某个文件中所有的EXE文件,文件名及文件路径存入一个表中的操作或是函数; 二、我用的是VS2005自带的仿真上的数据库,没有另外安装 ...… 查看全部问答> |
|
我使用sim3000的gprs模块,昨天已经可以用ip地址访问我在花生壳上注册的地址了.然后我尝试用域名的形式访问网络.先 at+cipshut,关闭连接 然后 配置dns服务器 at+cdnscfg=\"202.96.128.56\" 然后设置为域名访问方式at+cdnsorip=1 最后使用域名访 ...… 查看全部问答> |
|
急求:北京 C++/C# 日文项目 (日语能读,英语能写) 月给8K (高分帮顶) 日文项目:C++/C#均可 2年以上开发经验 外语要求:能读懂式样书,读懂日文技术文章。 英文要求:日常email通信 月薪给予:6K~8K,亦可面谈 工作地点:微软 联系方式:dexin.yang@hisoft.com … 查看全部问答> |
|
菜鸟提问:如何用应用程序修改WINCE的DEFAULT LANGUAGE 如何用应用程序修改WINCE的DEFAULT LANGUAGE呢? 我写了程序如下: unsigned short SLANGID = MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED); wprintf(L\"langid = %d,slangid = ...… 查看全部问答> |
|
冰天雪地×体跪问,驱动程序安装问题(如果问题解决,100分送) 冰天雪地×体跪问,驱动程序安装问题(如果问题解决,100分送) 我的驱动程序开发环境为WINNT4+VC6+NT4DDK+DriverStudio2.5,用DriverStudio2.5生成驱动程序框架,驱动程序开发完编译后,在我的开发机上安装运行,一切正常,但是当我把驱动程序拷 ...… 查看全部问答> |
|
最近在学linux驱动开发,在做中断程序的时候不知道为什么就是进不了中断服务函数,下面贴出源码,希望各位大侠们给点帮助,不胜感激~ //s3c2440_key.c(底层驱动程序) //#include #include #include #include #include //#include # ...… 查看全部问答> |




