打印

麻烦各位帮小弟看下18B20程序错在哪 读数值错误 而且没变化

[复制链接]
1051|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 清风萧瑟无眠 于 2014-3-17 11:13 编辑

#include <MSP430G2553.h>
#include <definetion.h>
#include <12864show.h>

void io_init();
void lcdshow_init();
void write_com(uchar com);      
void write_data(uchar data);
void write_show(uchar x,uchar y);
uint read_temperature();
void lcd_show();        
void delay_us(uint us);
void ds18b20(void);
void temperature_show(uint temp);

uint a,b,c,temperature,error;

uchar first_line[]="当前温度:00. 00";



void delay_ms(uint ms)
{
uint i,j;
for(i=ms;i>0;i--)
    for(j=125;j>0;j--);
}



//***************us级延时函数**********************//

void delay_us(uint us) //   2/3=12us  1=20us  5=35  10=50    15=141   80=500
{
uint i;
for(i=us;i>0;i--);
}

/*******************I0_point_init(I0引脚初始化)*******************/
void io_init()
{
WDTCTL=WDTPW+WDTHOLD;
P1DIR|=a_output;
P2DIR|=BIT0+BIT1+BIT2+BIT3;
}

/******************************12864show_procedure(12864显示程序)******************************/
/*******************LCDshow_init(12864显示初始化)*******************/
void lcdshow_init()
{
en_0;
rw_0;
psb_1;
write_com(0x01);
write_com(0x30);
write_com(0x0c);
}
/*******************LCD_Write_command(12864写指令)*******************/
void write_com(uchar com)
{
rs_0;
P1OUT=com;
delay_ms(2);
en_1;
delay_ms(5);
en_0;
}
/*******************LCD_Write_data(12864写数据)*******************/
void write_data(uchar data)
{
rs_1;
P1OUT=data;
delay_ms(2);
en_1;
delay_ms(5);
en_0;
}
/*******************LCD_Write_show(显示位置坐标)*******************/
void write_show(uchar x,uchar y)
{
uchar pos;
if(x==0)
x=0x80;
if(x==1)
x=0x90;
if(x==2)
x=0x88;
if(x==3)
x=0x98;
pos=x+y;
write_com(pos);
}
/*******************LCD_show(内容显示)*******************/
void lcd_show()
{
uint i;
i=0;
write_show(0,0);
while(first_line!='\0')
{
  write_data(first_line);
  i++;
}

}
//******************************DS18B20程序*******************************//

//***************复位时序************************//

void reset()                    //************复位
{
P2DIR|=BIT4;
DQ_1;
_NOP();
DQ_0;
delay_us(170);
DQ_1;
delay_us(10);
P2DIR&=~BIT4;
_NOP();
if(P2IN&BIT4)
error=1;
else
error=0;
P2DIR|=BIT4;
delay_us(40);
}

//***************写时序************************//

void write(uchar date)         //************写时序
{
   uint i;
  P2DIR|=BIT4;
for(i=0;i<8;i++)              //***********循环8次
{
   DQ_0;
  delay_us(1/3);
    if (date&0x01==0x01)       //************如果写1
    {
        DQ_1;                  //***************拉高
    }
    else                       //************如果写0
    {
        DQ_0;                  //*****继续保持低电平
    }
  _NOP();
   DQ_1;
   date>>=1;                   //**字节右移继续判断                  
}
}


//***************读时序************************//

uchar read()                   //*******带返回值函数
{
uint i,temp=0;
for(i=0;i<8;i++)               //*************循环8次
{                      //************字节右移
DQ_0;
temp>>=1;
DQ_1;
delay_us(1);
P2DIR&=~BIT4;
    if(P2IN&BIT4)
    {
    temp|=0x80;
    }
    P2DIR|=BIT4;
delay_us(4);
}
return temp;
}

//***************读温度值***********************//

uint read_temperature()
{   
    reset();
    write(0xcc);
    write(0x44);
    delay_us(100);
    reset();
    write(0xcc);
    write(0xbe);
    a=read();
    b=read();
    reset();
    b<<=8;
    c=a|b;
    return (c*0.0625);
}
            
//***************温度计算***********************//

void temperature_count(uint wei,uint num)
{
  uint ge , shi ;
  write_com(0x80+wei);
  ge=num/10;
  shi=num%10;
  write_data(0x30+ge);
  write_data(0x30+shi);
}

//***************温度显示***********************//

void temperature_show(uint temp)
{
uint zheng,xiao;
zheng = temp/1000 ;
temperature_count(5,zheng);
xiao = temp%1000/10;
temperature_count(7,xiao);
}

void main()
{
io_init();
lcdshow_init();
lcd_show();
while(1)
{
temperature=read_temperature();
temperature_show(temperature);
delay_us(50);
}
}

相关帖子

沙发
mmuuss586| | 2014-3-17 20:05 | 只看该作者

太多了

使用特权

评论回复
板凳
dirtwillfly| | 2014-3-17 22:56 | 只看该作者
慢慢调试,用示波器或逻辑分析仪看下时序是否正确

使用特权

评论回复
地板
shenmu2012| | 2014-3-18 17:37 | 只看该作者
读数值错误,且没有变化,该数值是多少呢?

使用特权

评论回复
5
shenmu2012| | 2014-3-18 17:37 | 只看该作者
根据该现实的数值的分析也可以帮着找出问题的

使用特权

评论回复
6
shenmu2012| | 2014-3-18 17:40 | 只看该作者
是液晶显示啊,,,一般的读出来的原始数值有可能为0xff的,这个需要检查下你的硬件连接部分跟18B20温度芯片的通讯的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

10

帖子

1

粉丝