同样的程序,使用单片机是MSP430F247,就没有问题。硬件问题不太可能,不知道是不是F5525的IO还需要配置些什么?希望大神帮忙指导下。
DS18B20为一线式温度传感器,单片机用一个I/O口与其通信采集数据,这是一个51单片机的仿真例程可以参考一下。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P1^4; //ds18b20与单片机连接口
unsigned char code str[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40} ; //共阴数码管字码表
unsigned char code str1[]={0x0bf,0x86,0x0db,0x0cf,0x0e6,0x0ed,0x0fd,0x87,0x0ff,0x0ef}; //个位带小数点字码表
unsigned char code wei[]={0x0fe,0x0fd,0x0fb,0x0f7};
uchar data disdata[5];
uint tvalue; //温度值
uchar tflag; //温度正负标志
/**********ds1820程序************/
void delay_18B20(unsigned int i) //延时1微秒
{
while(i--);
}
void ds1820rst() /*ds1820复位*/
{
unsigned char x=0;
DQ = 1; //DQ复位
delay_18B20(4); //延时
DQ = 0; //DQ拉低
delay_18B20(100); //精确延时大于 480us
DQ = 1; //拉高
delay_18B20(40);
}
uchar ds1820rd() /*读数据*/
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; //给脉冲信号
dat>>=1;
DQ = 1; //给脉冲信号
if(DQ) dat|=0x80;
delay_18B20(10);
}
return(dat);
}
void ds1820wr(uchar wdata) /*写数据*/
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = wdata&0x01;
delay_18B20(10);
DQ = 1;
wdata>>=1;
}
}
read_temp() /*读取温度值并转换*/
{
uchar a,b;
ds1820rst();
ds1820wr(0xcc); // 跳过读序列号
ds1820wr(0x44); // 启动温度转换
ds1820rst();
ds1820wr(0xcc); // 跳过读序列号
ds1820wr(0xbe); // 读取温度
a=ds1820rd();
b=ds1820rd();
tvalue=b;
tvalue<<=8;
tvalue=tvalue|a;
if(tvalue<0x0fff)
tflag=0;
else
{
tvalue=~tvalue+2; tflag=1; //负温度
}
tvalue=tvalue*(0.625); //温度值扩大10倍,精确到1位小数
return(tvalue);
}
/*********************************/
void ds1820disp() //温度值显示
{
uchar i;
disdata[0]=tvalue/1000; //百位数
disdata[1]=tvalue%1000/100; //十位数
disdata[2]=tvalue%100/10; //个位数
disdata[3]=tvalue%10; //小数位
if(tflag==0)
{
if(disdata[0]==0x00)
{
disdata[0]=0x0a; //百位数位为0不显示
if(disdata[1]==0x00) disdata[1]=0x0a; //十位数位为0不显示
}
}
else //负温度
{
disdata[0]=0x0b; //负温度百位显示负号:-
if(disdata[1]==0x00) disdata[1]=0x0a; //十位数位为0不显示
}
for(i=0;i<150;i++)
{
P2=wei[0];
P0=str[disdata[0]];
delay_18B20(20);
P2=wei[1];
P0=str[disdata[1]];
delay_18B20(20);
P2=wei[2];
P0=str1[disdata[2]];
delay_18B20(20);
P2=wei[3];
P0=str[disdata[3]];
delay_18B20(20);
}
}
/************主程序**********/
void main()
{
ds1820rst(); //初始化显示
while(1)
{
read_temp(); //读取温度
ds1820disp(); //显示
}
}
我要用DS18B20测量温度,大约1分钟测一次,而同时还要保持没10ms发送一...
我的基本思路是,DS18B20的延时不要用delay,用定时器延时,定时器可以设置5us中断,然后中断里加个标志位,在DS18B20里判断标志位就可以,这样就可以1820延时的同时定时器是工作的,当然在哪开定时器哪关定时器很重要。
MSP430内部温度传感器怎么使用的?
通常情况下拥有ADC模块的430都有内部温度传感器;我以msp430fe425为例:1.传感的温度系数为:1.32v\/K 2.最终的计算公式为:DegC=(ADC采样值*9090)\/65536-2730 3.功能程序模块为:...SD16CTL=SD16REFON+SD16VMIDON+SD16SSEL0;\/\/开启内部1.2v的基准源,开启缓冲器,ADC时钟选SMCLK SD16CCTL...
我是新手,想学习单片机。请问哪款开发板性价比好呢?网友介绍济南博芯电 ...
12、板子上有一个无源蜂鸣器,可以用来做音乐输出实验让你充分了解生日贺卡的工作原理。13、板子上集成一个DS18B20温度传感器,用来学习实现数字温度计。14、板子上集成一个红外接收管,用来学习红外通信的原理。15、板子上共4个74HC595芯片,用来驱动16个LED,8个数码管,74HC595在工控领域的显示很常用,可以...