MMU对DS18b20温度采集程序的影响
如题,FL2440开发板自带的,ADS程序,在实现18b20温度显示的时候发现温度根本全部都是乱码,但是程序跟Test.bin 里面是一样的,只是因为MMU吗?有人知道MMU对这个有什么影响吗,谢谢了顶 楼主是怎么使用这段程序的呢,在串口里显示还是什么地方显示温度呢 飞凌-peacelove 发表于 2013-10-8 10:07 static/image/common/back.gif
楼主是怎么使用这段程序的呢,在串口里显示还是什么地方显示温度呢
就是把文件编译成bin格式后,下载到Myapp分区,然后运行,温度从串口显示出来 贴上源码 :/*******************************************************/
// 公司名称 :保定飞凌嵌入式技术有限公司
// 描 述 :温度传感器试验,由串口打印采集数据
// 版 权 :保定飞凌嵌入式技术有限公司
// 网 址 :www.witech.com.cn
/***************************************************************/
/*-------------------------地址声明----------------------------*/
#define GPGCON (*(volatile unsigned *)0x56000060) //18b20寄存器设置
#define GPGDAT (*(volatile unsigned *)0x56000064)
#define GPGUP (*(volatile unsigned *)0x56000068)
#define UFCON0 (*(volatile unsigned *)0x50000008) //串口寄存器设置
#define UMCON0 (*(volatile unsigned *)0x5000000c)
#define ULCON0 (*(volatile unsigned *)0x50000000)
#define UCON0 (*(volatile unsigned *)0x50000004)
#define UBRDIV0 (*(volatile unsigned *)0x50000028)
#define UTRSTAT0 (*(volatile unsigned *)0x50000010)
#define UTXH0 (*(volatile unsigned*)0x50000020)
#define URXH0 (*(volatile unsigned*)0x50000024)
/*-------------------------变量定义----------------------------*/
unsigned char wd;
unsigned int sdata; //测量到的温度的整数部分
unsigned char xiaoshu1; //小数第一位
unsigned char xiaoshu2; //小数第二位
unsigned char xiaoshu; //两位小数
/*-------------------------函数声明----------------------------*/
void zh(void);
void Delay(unsigned int x) ;
void uart(void);
void DS18B20PRO(void);
void dmsec (unsigned int t);
void tmreset (void);
unsigned char tmrbit (void);
unsigned char tmrbyte (void) ;
void tmwbyte (unsigned char dat);
void tmstart (void) ;
void tmrtemp (void) ;
/*-------------------------------------------------------------/
函数名称: Main
功能描述: 入口函数
不停循环检测温度值,并转换为asc||码,通过串口传出来
传 参: 无
返 回 值: int
--------------------------------------------------------------*/
int Main(void)
{
while(1)
{
DS18B20PRO();
zh();
uart();
Delay(30);
}
return(0);
}
/*-------------------------------------------------------------/
函数名称: dmsec
功能描述: 精确延时函数
传 参: unsigned int t
返 回 值: 无
--------------------------------------------------------------*/
void dmsec(unsigned int t) //精确延时函数
{
unsigned int i;
unsigned int j;
j = 1 * t;
for(i=0; i<j; i++);
}
/*-------------------------------------------------------------/
函数名称: tmreset
功能描述: 18b20初始化
传 参: 无
返 回 值: 无
--------------------------------------------------------------*/
void tmreset(void)
{
unsigned int i;
GPGCON &= 0xfffffffc; //设置寄存器对18b20进行写操作
GPGCON |= 0x01;
GPGDAT |= 0x01;
dmsec(100);
GPGDAT &= 0xfffe;
dmsec(600);
GPGDAT |= 0x01;
dmsec(100);
GPGCON &= 0xfffffffc; //设置寄存器对18b20进行读操作
i = GPGDAT;
}
/*-------------------------------------------------------------/
函数名称: Delay
功能描述: 延时函数
传 参: int x
返 回 值: 无
--------------------------------------------------------------*/
unsigned char tmrbyte (void) //读一个字节函数
{
unsigned int j;
unsigned char i, u=0;
for (i=1; i<=8; i++)
{
GPGCON &= 0xfffffffc;
GPGCON |= 0x01; //GPG0设为输出
GPGDAT &= 0xfffe;
u >>= 1;
GPGCON &= 0xfffffffc; //设为输入口
j = GPGDAT;
if (j & 0x01)
u |= 0x80;
dmsec(46);
GPGDAT |= 0x01;
}
return (u);
}
/*-------------------------------------------------------------/
函数名称: tmwbyte
功能描述: 写一个字节函数
传 参: unsigned char dat
返 回 值: 无
--------------------------------------------------------------*/
void tmwbyte (unsigned char dat) //写一个字节函数
{
unsigned char j;
GPGCON &= 0xfffffffc;
GPGCON |= 0x01;
for (j=1; j<=8; j++)
{
GPGDAT &= 0xfffe;
dmsec(1);
GPGDAT |= (dat & 0x01);
dmsec(47);
GPGDAT |= 0x01;
dat = dat >> 1;
}
}
/*-------------------------------------------------------------/
函数名称: tmstart
功能描述: 发送ds1820 开始转换
传 参: 无
返 回 值: 无
--------------------------------------------------------------*/
void tmstart (void)
{
tmreset(); //复位
dmsec(120); //延时
tmwbyte(0xcc); //跳过序列号命令
tmwbyte(0x44); //发转换命令 44H,
}
/*-------------------------------------------------------------/
函数名称: tmrtemp
功能描述: 读取温度
传 参: 无
返 回 值: 无
--------------------------------------------------------------*/
void tmrtemp (void)
{
unsigned char a,b;
tmreset(); //复位
dmsec(2000); //延时
tmwbyte(0xcc); //跳过序列号命令
tmwbyte(0xbe); //发送读取命令
a = tmrbyte(); //读取低位温度
b = tmrbyte(); //读取高位温度
sdata = a / 16 + b * 16; //整数部分
xiaoshu1 = (a&0x0f) * 10 / 16; //小数第一位
xiaoshu2 = (a&0x0f) * 100 / 16 %10;//小数第二位
xiaoshu = xiaoshu1*10 + xiaoshu2; //小数两位
}
/*-------------------------------------------------------------/
函数名称: zh
功能描述:
传 参: 无
返 回 值: 无
--------------------------------------------------------------*/
void zh(void)
{
unsigned int wdata;
wdata = sdata;
wd = wdata / 10 + 0x30;
wd = wdata % 10 + 0x30;
wd = xiaoshu / 10 + 0x30;
wd = xiaoshu % 10 + 0x30;
}
/*-------------------------------------------------------------/
函数名称: DS18B20PRO
功能描述:
传 参: 无
返 回 值: 无
--------------------------------------------------------------*/
void DS18B20PRO(void)
{
tmstart(); //uart(10);
dmsec(5); //如果是不断地读取的话可以不延时
tmrtemp(); //读取温度,执行完毕温度将存于TMP
}
/*-------------------------------------------------------------/
函数名称: uart
功能描述: 串口函数用于发送温度值
传 参: 无
返 回 值: 无
--------------------------------------------------------------*/
void uart(void)
{
UFCON0 = 0x0;
UMCON0 = 0x0;
ULCON0 = 0x3;
UCON0= 0x245;
UBRDIV0=( (int)(50000000/16/115200+0.5) -1 );
while(!(UTRSTAT0 & 0x2));
UTXH0='\n';
while(!(UTRSTAT0 & 0x2));
UTXH0='\r';
while(!(UTRSTAT0 & 0x2));
UTXH0=wd;
while(!(UTRSTAT0 & 0x2));
UTXH0=wd;
while(!(UTRSTAT0 & 0x2));
UTXH0=46;
while(!(UTRSTAT0 & 0x2));
UTXH0=wd;
while(!(UTRSTAT0 & 0x2));
UTXH0=wd;
while(!(UTRSTAT0 & 0x2));
UTXH0=39;
while(!(UTRSTAT0 & 0x2));
UTXH0=67;
}
/*-------------------------------------------------------------/
函数名称: Delay
功能描述: 延时函数
传 参: int x
返 回 值: 无
--------------------------------------------------------------*/
void Delay(unsigned int x)
{
unsigned int i, j, k;
for(i=0; i<=x; i++)
for(j=0; j<0xff; j++)
for(k=0; k<0xff; k++);
}
这个18b20的程序跟启动代码编译成bin文件下载到分区运行,显示的温度完全是乱码,但是你们Test.bin 那个文件里也是有18b20的程序,而且两个程序都一样,那个可以,这个单独就不可以 飞凌-peacelove 发表于 2013-10-8 10:07 static/image/common/back.gif
楼主是怎么使用这段程序的呢,在串口里显示还是什么地方显示温度呢
程序的话就是你们test文件夹中的温度采集程序,但是单独编译成bin文件下载到分区运行就不行了,是什么原因呢? 看看输出串行温度数据的那块有没有问题 飞凌-peacelove 发表于 2013-10-9 14:46 static/image/common/back.gif
看看输出串行温度数据的那块有没有问题
那块是没有问题的,源程序都是你们附带的,我也试过,是可以的,就是温度不对,好像跟18B20通讯不上 要不单步调试看看读取18b20数据那儿是怎么操作的吧 飞凌-peacelove 发表于 2013-10-10 08:50 static/image/common/back.gif
要不单步调试看看读取18b20数据那儿是怎么操作的吧
单步调试过,也不行的,网上查了资料,类似的情况很多,你们有没有什么解决的办法啊, 那我们先看看程序调一下 飞凌-peacelove 发表于 2013-10-10 11:30 static/image/common/back.gif
那我们先看看程序调一下
好吧,等着你的好消息 楼主试试给他顶一个分频的频率试试呢!!! 飞凌-路飞 发表于 2013-10-16 10:09 static/image/common/back.gif
楼主试试给他顶一个分频的频率试试呢!!!
什么意思?不太明白,在启动代码里Fclk、Pclk这些频率都已经设置好了啊
页:
[1]