微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > MSP430F149单片机驱动DS2762读写操作C语言程序

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

时间:12-01 来源:互联网 点击:
基于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);

}

}

/******************************************************************************

从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 (l

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top