我用proteus仿真的时候能达到12位
而我下载到实验板上做实验的时候只能达到9位;
怎么解决???????????
要用c语言,汇编我不懂;
下面是我的程序:
//P_one 数据通信端口
//TEMP 温度值的变量
//flag1 结果为负和正的标志位
//tmchange()开始温度转换
//delay() 延时
//tmp() 读取温度函数
//count 延时技术变量
//dsreset() 复位和初始化函数
//tmpread() 读取数据的一位
//tmpread2()读取数据的一个字节
//tmpwrite()写数据的一个字节
//rom() 读取器件的序列号
//dat 读取数据的临时变量
/*************************************************/
#include<reg52.h>
#include <intrins.h>
#include<absacc.h>
#include<stdio.h>
#include<math.h>
#include<string.h>
#define uchar unsigned char
//#define uint unsigned int
//sbit P_one=P3^4;
sbit P_one=P2^7;
uchar TEMP;
uchar flag1;
unsigned char data temp_data[2] = {0x00,0x00} ;
void delay (unsigned int count)//延时
{
unsigned int i;
while (count)
{
i=200;
while(i>0)i--;
count--;
}
}
void dsreset(void)//改善复位和初始化
{
unsigned int i;
P_one=0;
i=103;
while(i>0)i--;
P_one=1;
i=4;
while(i>0)i--;
}
bit tmpread(void)//读取数据的一位
{
unsigned int i;
bit dat;
P_one=0;i++;
P_one=1;i++;i++;
dat=P_one;
i=8;while(i>0)i--;
return(dat);
}
unsigned char tmpread2(void)
{
unsigned char i,j ,dat;
dat=0;
for (i=1;i<=8;i++)
{
j=tmpread();
dat=(j<<7)|(dat>>1);
}
return(dat);
}
void tmpwrite(unsigned char dat)
{
unsigned int i;
unsigned char j;
bit testb;
for (j=1;j<=8;j++)
{
testb=dat&0x01;
dat=dat>>1;
if (testb)
{
P_one=0; //写0
i++;i++;
P_one=1;
i=8;
while(i>0)i--;
}
else
{
P_one=0; //写0
i=8;
while(i>0)i--;
P_one=1;
i++;i++;
}
}
}
void tmpchange(void)
{
dsreset(); //复位
//tmpre(); //等待存在脉冲
delay(1);
tmpwrite(0xcc); //跟过读序列号命令
tmpwrite(0x44);//发转换命令44H
}
//void tmp(void)
unsigned char tmp(void)
{
dsreset();
delay(1);
tmpwrite(0xcc);
tmpwrite(0xbe);
temp_data[0]=tmpread2(); //读取温度低位
temp_data[1]=tmpread2(); //读取温度高位
flag1=(temp_data[1]>>4)&0x01; //若b为1则为负温
/*if(flag1)
{
temp_data[0]=~temp_data[0]+1; //如果为负温则去除其补码
}
else
{
temp_data[0]=temp_data[0];
}
return(temp_data[0]);*/
}
rom() //读取器件序列号
{
//uchar i;
uchar sn1;
uchar sn2;
dsreset();
delay(1);
tmpwrite(0x33);
sn1=tmpread();
sn2=tmpread();
}