ds1820.c
资源名称:msp430.rar [点击查看]
上传用户:xs588588
上传日期:2021-03-30
资源大小:242k
文件大小:2k
源码类别:
DSP编程
开发平台:
C/C++
- #include <msp430x14x.h>
- #include "ds1820.h"
- #define DQ BIT0
- void Init_CLK(void)
- {
- unsigned int i;
- //将寄存器的内容清零
- //XT2震荡器开启
- //LFTX1工作在低频模式
- //ACLK的分频因子为1
- BCSCTL1 = 0X00;
- do
- {
- IFG1 &= ~OFIFG; // 清除OSCFault标志
- for (i = 0x20; i > 0; i--);
- }
- while ((IFG1 & OFIFG) == OFIFG); // 如果OSCFault =1
- BCSCTL2 = 0X00; //将寄存器的内容清零
- BCSCTL2 += SELM1; //MCLK的时钟源为TX2CLK,分频因子为1
- BCSCTL2 += SELS; //SMCLK的时钟源为TX2CLK,分频因子为1
- }
- void delay(int nUs)
- {
- int nCount;
- int i;
- int j;
- nCount = 3;
- for(i = nUs; i > 0; i--)
- {
- for(j = nCount;j > 0;j--) ;
- }
- return;
- }
- char DS1820_Reset(void)
- {
- char presence;
- // 设定管脚为输出方向
- P1DIR |= DQ;
- // 将DQ管脚拉低
- P1OUT &= ~(DQ);
- // 延时480微妙
- delay(480);
- // 将DQ管脚拉高
- P1OUT |= DQ;
- // 延时60微妙
- delay(60);
- // 设定管脚为输入方向
- P1DIR &= ~(DQ);
- // 读取数据
- presence = (char)(P1IN & DQ);
- // 延时60微妙
- delay(25);
- return(presence);
- }
- char DS1820_ReadByte(void)
- {
- char i;
- char value = 0;
- char presence;
- for (i = 8;i > 0;i--)
- {
- value >>= 1;
- // 设定管脚为输出方向
- P1DIR |= DQ;
- // 将DQ管脚拉低
- P1OUT &= ~(DQ);
- // 将DQ管脚拉高
- P1OUT |= DQ;
- // 延时1微妙
- delay(1);
- // 设定管脚为输入方向
- P1DIR &= ~(DQ);
- // 读取数据
- presence = (char)(P1IN & DQ);
- if(presence) value |= 0x80;
- // 延时1微妙
- delay(60);
- }
- return value;
- }
- void DS1820_WriteByte(char val)
- {
- char i;
- char nBit;
- for (i=8; i>0; i--)
- {
- // 设定管脚为输出方向
- P1DIR |= DQ;
- // 将DQ管脚拉低
- P1OUT &= ~(DQ);
- // 输出数据
- nBit = val & 0x01;
- if (nBit)
- {
- P1OUT |= DQ;
- }
- else
- {
- P1OUT &= ~(DQ);
- }
- // 延时50微妙
- delay(50);
- // 将DQ管脚拉高
- P1OUT |= DQ;
- val >>= 1;
- }
- // 延时5微妙
- delay(5);
- }
- char Read_Temperature(void)
- {
- union
- {
- char c[2];
- int x;
- } temp;
- // 复位
- DS1820_Reset();
- // Skip ROM
- DS1820_WriteByte(0xCC);
- // 开始转换
- DS1820_WriteByte(0x44);
- // Read Scratch
- DS1820_WriteByte(0xBE);
- //读取温度数据
- temp.c[1]=DS1820_ReadByte();
- temp.c[0]=DS1820_ReadByte();
- // 返回数据
- return temp.x;
- }