云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > MSP430G2553 - DS18B20 - 串口通信

MSP430G2553 - DS18B20 - 串口通信

  • 62 次阅读
  • 3 次下载
  • 2025/6/16 19:50:28

//****************************************************************************** // 功能描述:该程序以msp430 launchpad为平台,用ds18b20单总线测量温度,通过串口可 // 可以显示在串口助手上,注意要发送一个数据就会开始显示。 // DZX

// February 2015

// Built with IAR Embedded Workbench Version: 5.50

//****************************************************************************** #include \

typedef unsigned char uchar; typedef unsigned int uint;

#define DQ1 P2OUT |= BIT4 #define DQ0 P2OUT &= ~BIT4 #define DQ_in P2DIR &= ~BIT4 #define DQ_out P2DIR |= BIT4 #define DQ_val (P2IN & BIT4)

#define CPU_F ((double)1000000)

#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

/******************************************************************************* 函数名称:Init_18B20

功 能:对DS18B20进行复位操作 参 数:无

返回值 :初始化状态标志:1--失败,0--成功

*******************************************************************************/ uchar Init_18B20(void) {

uchar Error; DQ_out; DQ0;

delay_us(500); DQ1;

delay_us(55); DQ_in;

if(DQ_val) {

Error = 1; //初始化失败 } else {

Error = 0; //初始化成功

}

DQ_out; DQ1;

delay_us(400);

return Error; }

/******************************************************************************* 函数名称:Write_18B20

功 能:向DS18B20写入一个字节的数据 参 数:wdata--写入的数据 返回值 :无

*******************************************************************************/ void Write_18B20(uchar wdata) {

uchar i;

for(i = 0; i < 8;i++) {

DQ0;

delay_us(6); //延时6us if(wdata & 0X01) DQ1; else DQ0; wdata >>= 1;

delay_us(50); //延时50us DQ1;

delay_us(10); //延时10us } }

/******************************************************************************* 函数名称:Read_18B20

功 能:从DS18B20读取一个字节的数据 参 数:无

返回值 :读出的一个字节数据

*******************************************************************************/ uchar Read_18B20(void) {

uchar i;

uchar temp = 0;

for(i = 0;i < 8;i++) {

temp >>= 1; DQ0;

delay_us(6); //延时6us DQ1;

delay_us(8); //延时9us DQ_in;

if(DQ_val) temp |= 0x80;

delay_us(45); //延时45us DQ_out; DQ1;

delay_us(10); //延时10us }

return temp; }

/******************************************************************************* 函数名称:Skip

功 能:发送跳过读取产品ID号命令 参 数:无 返回值 :无

*******************************************************************************/ void Skip(void) {

Write_18B20(0xcc); }

/******************************************************************************* 函数名称:Convert

功 能:发送温度转换命令 参 数:无 返回值 :无

*******************************************************************************/ void Convert(void) {

Write_18B20(0x44); }

/******************************************************************************* 函数名称:Read_SP

功 能:发送读ScratchPad命令 参 数:无 返回值 :无

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

void Read_SP(void) {

Write_18B20(0xbe); }

/******************************************************************************* 函数名称:ReadTemp

功 能:从DS18B20的ScratchPad读取温度转换结果 参 数:无

返回值 :读取的温度数值

*******************************************************************************/ uint ReadTemp(void) {

uchar temp_low; uint temp;

temp_low = Read_18B20(); //读低位 temp = Read_18B20(); //读高位 temp = (temp<<8) | temp_low;

return temp; }

/******************************************************************************* 函数名称:Do1Convert

功 能:控制DS18B20完成一次温度转换 参 数:无

返回值 :测量的温度数值

*******************************************************************************/ uint Do1Convert(void) {

uchar i; do {

i = Init_18B20(); }

while(i); Skip(); Convert();

delay_ms(1000); do {

i = Init_18B20();

}

while(i); Skip(); Read_SP();

return ReadTemp()*0.0625; }

/******************************************************************************* 函数名称:void main( void ) 功 能:主函数

*******************************************************************************/ void main( void ) {

WDTCTL = WDTPW + WDTHOLD; // Stop WDT if(CALBC1_1MHZ==0xFF) // If calibration constant erased {

while(1); // do not load, trap CPU!! }

DCOCTL = 0; // Select lowest DCOx and MODx settings BCSCTL1 = CALBC1_1MHZ; // Set DCO DCOCTL = CALDCO_1MHZ;

P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD P1SEL2 = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD UCA0CTL1 |= UCSSEL_2; // SMCLK UCA0BR0 = 104; // 1MHz 9600 UCA0BR1 = 0; // 1MHz 9600

UCA0MCTL = UCBRS0; // Modulation UCBRSx = 1

UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine** IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt

__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled }

// Echo back RXed character, confirm TX buffer is ready first #pragma vector=USCIAB0RX_VECTOR __interrupt void USCI0RX_ISR(void) {

while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready? UCA0TXBUF = Do1Convert(); // TX -> RXed character }

搜索更多关于: MSP430G2553 - DS18B20 - 串口通信 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

//****************************************************************************** // 功能描述:该程序以msp430 launchpad为平台,用ds18b20单总线测量温度,通过串口可 // 可以显示在串口助手上,注意要发送一个数据就会开始显示。 // DZX // February 2015 // Built with IAR Embedded Workbench Version: 5.50 //****************************************************************************** #include \ typedef unsigned char uchar; typedef

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com