MSP430F149单片机驱动DS2762读写操作C语言程序

发布者:Meilin8888最新更新时间:2015-05-15 来源: 51hei关键字:MSP430F149  单片机驱动  DS2762  读写操作 手机看文章 扫描二维码
随时随地手机看文章
基于MSP430F149单片机驱动DS2762读写操作C语言程序,能够对按键或着其他信号响应,读出电流以及电压量,并进行相应处理。
//#include
#define uchar unsigned char
#define uint  unsigned int
uint A,B,C,D,E,F,G,H,I,J;//此处对io430x14x中的宏定义C进行了注释,需注意
#define IO_OUT P3DIR |= BIT0;
#define IO_INP P3DIR &= ~BIT0;
uint data;
/******************************************************************************
对读写时间进行规范化
初始调试采用standard=1的参数
// Pause for exactly 'tick' number of ticks = 0.25us
实际测的A延时14Us
B125US
******************************************************************************/
void SetSpeed(uint standard)
{
        // Adjust tick values depending on speed
        if (standard)
        {
                // Standard Speed
                A = 6 * 4 / 2;
                B = 64 * 4 / 2;
                C = 60 * 4 / 2;
                D = 10 * 4 / 2;
                E = 9 * 4 / 2;
                F = 55 * 4 / 2;
                G = 0 / 2;
                H = 480 * 4 / 2;
                I = 70 * 4 / 2;
                J = 410 * 4 / 2;
        }
        else
        {
                // Overdrive Speed
                A = 1.5 * 4;
                B = 7.5 * 4;
                C = 7.5 * 4;
                D = 2.5 * 4;
                E = 0.75 * 4;
                F = 7 * 4;
                G = 2.5 * 4;
                H = 70 * 4;
                I = 8.5 * 4;
                J = 40 * 4;
        }
}
/******************************************************************************
延时程序
注意,需要选用8M晶振,时钟周期125ns
******************************************************************************/
void tickDelay(uint tick) // Implementation is platform specific
{
  for(;tick>0;tick--);
}
/******************************************************************************
主机复位脉冲
当接收结果result为0时,表明从机应答
******************************************************************************/
uchar OWTouchReset(void)
{
        uchar result;
        IO_OUT;
        tickDelay(G);
        P30 = 0; // Drives DQ low
        tickDelay(H);
        P30 = 1; // Releases the bus
        tickDelay(I);
        IO_INP;
        result = P3IN & 0X01; // Sample for presence pulse from slave
        tickDelay(J); // Complete the reset sequence recovery
        return result; // Return sample presence pulse result
}
/******************************************************************************
像写DS2762写入一位
Send a 1-Wire write bit. Provide 10us recovery time.
******************************************************************************/
void OWWriteBit(uchar bit)
{
        if (bit)
        {
                // Write '1' bit
                P30 = 0; // Drives DQ low
                tickDelay(A);
                P30 = 1; // Releases the bus
                tickDelay(B); // Complete the time slot and 10us recovery
        }
        else
        {
                // Write '0' bit
                P30 = 0; // Drives DQ low
                tickDelay(C);
                P30 = 1; // Releases the bus
                tickDelay(D);
        }
}[page]
/******************************************************************************
从DS2762读出一位
Read a bit from the 1-Wire bus and return it. Provide 10us recovery time.
******************************************************************************/
uchar OWReadBit(void)
{
        uchar result;
 
        P30 = 0; // Drives DQ low
        tickDelay(A);
        P30 = 1; // Releases the bus
        tickDelay(E);
        result = P3IN & 0X01; // Sample the bit value from the slave
        tickDelay(F); // Complete the time slot and 10us recovery
 
        return result;
}
/******************************************************************************
像写DS2762写入一个字节
Send a 1-Wire write . Provide 10us recovery time.
DS2762特性发送所有的命令和数据都是字节的低位在前,这与多数串行通信格式相反
******************************************************************************/
void OWWriteByte(uchar data)
{
        uchar loop;
 
        // Loop to write each bit in the byte, LS-bit first
        for (loop = 0; loop < 8; loop++)
        {
                OWWriteBit(data & 0x01);
 
                // shift the data byte for the next bit
                data >>= 1;
        }
}
/******************************************************************************
从DS2762中读一个字节
 
******************************************************************************/
uchar OWReadByte(void)
{
        uchar loop, result=0;
 
        for (loop = 0; loop < 8; loop++)
        {
                // shift the result to get it ready for the next bit
                result >>= 1;
 
                // if result is one, then set MS bit
                if (OWReadBit())
                        result |= 0x80;
        }
        return result;
}
/******************************************************************************
发送字符函数
按照论文图时序进行的操作
目前不清楚连续读需要通过测试进行优化。
方案一:发出读命令 发出一个地址 读两次   应该是正确的
方案二:发出读命令 发出两个地址 读两次
******************************************************************************/
uint readvoltage(void)
{
         uchar j = 1;
         unsigned char volhigh,vollow;
         while(j)    //检查2762是否应答
         {
            j = OWTouchReset();
         }
OWWriteByte(0xcc); //
         OWWriteByte(0x69);
         OWWriteByte(0x0c);
         vollow = OWReadByte();
         volhigh = OWReadByte();
         return ((volhigh<<8)|(vollow)); //将两个字节进行合并
}
/******************************************************************************
时钟初始化
注意,需要选用8M晶振,时钟周期125ns
******************************************************************************/
void Init_clk(void)
{unsigned char i; 
 //时基模块的时钟设置 
 //单片机上电时,MCLK主时钟的源默认选择为DCO提供.F1系列DCO默认800KHZ. 
 //ACLK辅助时钟默认为XT1,XT1一般接32768HZ晶体. 
 //SMCLK子时钟默认为DCO,同样是800KHZ. 
 //XT2需要人为开启,并要检测其开启是否成功. 
 BCSCTL1 &= ~(XT2OFF + XTS);   //启动XT2高速时钟模块 
 BCSCTL2 |= SELM1;            //MCLK主时钟选XT2为时钟源.TX2输入不分频. 
 BCSCTL2 &= ~SELS;            //SMCLK选为DCO为时钟源.(参考) 
  
 //刚才开启了XT2,需要一定时间XT2才进入稳定状态.所以需要等待并检测稳定状态. 
 //通常采用do...for语法,这是TI推荐的程序写法 
 do 
 { 
  IFG1 &=~OFIFG;              //清OSCFault 标志 
  for(i=0xff;i>0;i--)         //延时等待其开启稳定 
    ; 
 } 
 while((IFG1 & OFIFG) !=0);   //检查OSCFault标志位是否为0,若为0则表示XT2开启稳定. 
                            //否则一直等下去... 
}
/******************************************************************************
主函数
注意,需要选用8M晶振,时钟周期125ns
******************************************************************************/
void main()
{
  WDTCTL = WDTPW | WDTHOLD;            //  停止看门狗
  Init_clk();
  SetSpeed(1);
  while(1)
  {
    data = readvoltage();
  }
 
}
关键字:MSP430F149  单片机驱动  DS2762  读写操作 引用地址:MSP430F149单片机驱动DS2762读写操作C语言程序

上一篇:第2章 一些数据单位(X86汇编教程)
下一篇:回溯算法1

推荐阅读最新更新时间:2024-03-16 14:02

STM8单片机定时器驱动的深度解析
上一节给大家介绍了基于标准库STM8单片机GPIO的驱动,本节课主要给大家介绍一下STM8定时器的驱动。 我们先打开STM8L10x单片机的规格书,简单的了解一下STM8L10X单片机的定时器功能。 如果所示,STM8L10x单片机共有3个定时器,分别是TIM2、TIM3、TIM4. 其中TIM2和TIM3是16位的基本定时器,TIM4是8位定时器。 因TIM2和TIM3是16位,所以定时时间更长,功能更加强大,所以我们今天主要给大家介绍一下TIM2和TIM3; 我们以TIM2为例给大家介绍一下定时器功能。 STM8打开标准库文件夹,打开定时器例程 如上图所示,是标准库中定时器2的例程。 我们打开TIM2文件夹
[单片机]
STM8<font color='red'>单片机</font>定时器<font color='red'>驱动</font>的深度解析
Lcd.h头文件下载-字符型液晶LCD的AVR单片机驱动程序头文件
/***************************************************************************** 单 位:广西民族大学物理与电子工程学院07物本班 文件名称:Lcd.h 文件标识:_LCD_H_ 摘 要:字符型液晶LCD的AVR单片机驱动程序头文件 当前版本:V2.0 *****************************************************************************/ #ifndef _LCD_H_ #define _LCD_H_ #include BaiYuAvrKuD
[单片机]
基于MSP430F149的智能火灾报警系统的设计
  0 引言   火灾严重威胁着人类的生命财产安全,每年我国由火灾引起的灾难数不胜数,然而,准确、及时的对火灾进行预测已成为迫在眉睫的事情。目前,火灾探测技术是预防火灾发生的最有效的手段,根据火灾发生初期的迹象来判断并进行预测,从而使人们在第一时间对这些迹象进行处理,有效的减少了火灾的发生。   普通可燃物燃烧的表现形式是:首先产生燃烧气体和烟雾,在氧气供应充足的条件下才能达到完全燃烧,产生火焰并发出一些可见光与不可见光,同时释放大量的热,使得环境温度升高。普通可燃物由初起阴燃阶段开始,到火焰燃烧、火势渐大,最终酿成火灾的起火过程。在该系统中我们以环境温度、烟雾浓度作为判断火灾的依据。   传统火灾报警系统有结构简单、准确度
[单片机]
基于<font color='red'>MSP430F149</font>的智能火灾报警系统的设计
基于MSP430F149操作数字电位器ISL23425WFVZ
本文主要讲述基于MSP430F149操作数字电位器ISL23425WFVZ,包含引脚功能、数据结构分析、编写代码、测试验证结果。 一、硬件连接 1.数字电位器ISL23425WFVZ的引脚功能如表1所示; Table 1 ISL23425WFVZ的引脚功能表 2.根据数据手册中的引脚功能描述表,连接该电位器与MCU,连接示意图如图1所示; Figure 1 电位器ISL23425WFVZ与MCU连接示意图 二、数据结构分析 1.根据该数字电位器的数据手册可知,该电位器与MCU的通信方式为:SPI。 2.根据该数字电位器的数据手册可知,该电位器内部寄存器的结构如表2所示。 Table 2 ISL234525WFVZ内部寄存器的结
[单片机]
基于<font color='red'>MSP430F149</font><font color='red'>操作</font>数字电位器ISL23425WFVZ
基于MSP430F149的数据转发器设计
概述 目前大量存在的人工抄表的方法已远不能适应现代化管理的需要,并由此带来的线损率的增高也必然影响电力行业的发展。线损率较高的主要原因之一就是抄表、计算和管理手段的落后,管理损耗增大。如果采用电能表自动抄收系统,不仅可以大大提高电网运行的可靠性,而且可以充分利用现有设备的能力,降低劳动强度。该系统主要由电表抄表器(数据采集)、数据转发器(数据传输)和主机(数据处理)三大部分组成。本文主要设计其中数据转发器部分。 通常电表采用的有红外通信、RS485通信或无线射频通信三种通信方式,而普通的电表抄表器一般只带有上述三种通信接口的其中一种通信接口。为了能适用于常见的这三种电表抄表器,方便有效地把抄表器的数据传输到主机,数据转发
[单片机]
51单片机驱动点阵16*16左移
这个点阵左移,曾经让我......如今在朋友指导下.........主要部分在红色部分,请大家理解那里就行了!会了也没有什么!硬件:行采用74HC154+S8550,列采用74HC595! #include reg52.h #define uchar unsigned char #define uint unsigned int #define LINE P0//定义行线IO口,即74HC154控制端 #define shudu 20//字移动的速度 sbit DATA=P1^4;//74HC595数据端 sbit CLK=P1^5;//74HC595移位脉冲端 sbit CLKR=P1^6;//74HC595数据锁存端 u
[单片机]
51<font color='red'>单片机</font><font color='red'>驱动</font>点阵16*16左移
初识畅学系列MSP430F149单片机开发板
1、畅学MSP430单片机核心板 畅学系列六合一MSP430单片机核心板板载贴片封装的MSP430F149单片机芯片,芯片IO全部引出2组,既可以直接插到畅学系列多功能开发学习板/实验箱底板直接扩展为多功能开发学习板,也可以单独作为一个MSP430最小系统核心板使用。 畅学系列六合一MSP430单片机核心板-标配一个MSP 430149单片机,核心板集成BSL下载器,一条USB线即可实现供电和BSL方式程序下载,还可以通过USB线实现串口通讯。。 板载BSL下载模块,可以方便的直接通过USB线在供电同时还可以下载程序。 板载BSL下载模块,还可以作为串口通讯模块使用,可以通过USB供电同时和PC机进行串口通
[单片机]
初识畅学系列<font color='red'>MSP430F149</font><font color='red'>单片机</font>开发板
MSP430F149学习之路——LED
1 #include msp430x14x.h 2 3 void int_clk(); 4 void delay(int i); 5 void main() 6 { 7 WDTCTL = WDTPW + WDTHOLD; 8 int_clk(); 9 P6DIR = 0XFF; 10 P6OUT = 0Xff; 11 while(1) 12 { 13 P6OUT = 0XFF; 14 delay(20000); 15 P6OUT = 0x00; 16 delay(20000); 17 } 18 } 19 20 void int_clk() 21 { 22 BCSCTL1 &= ~X
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved