标题: 关于proteus仿真的DS18B20的问题,求救 [打印本页]

作者: 权威的艰苦撒旦    时间: 2018-2-28 12:25
标题: 关于proteus仿真的DS18B20的问题,求救
在PROTEUS仿真中,用了数码管去读取温度,但是发现有些特定的温度,数据很稳定,有些温度会跳动,有些直接显示乱码


以下是仿真的18b20的代码。请问是什么问题,我用的是12MHZ的内部晶振

void delay_us(uint i)
{
while(i--);
}
void dschushihua()
{
zong=1;
delay_us(2);
zong=0;
delay_us(100);
zong=1;
delay_us(15);
}
bit dsrebit()
{
bit dat;
zong=0;
_nop_();
_nop_();
zong=1;
_nop_();
_nop_();
_nop_();
_nop_();
dat=zong;
delay_us(37);
return (dat);
}
void dsshuju(uchar dat)//Êý¾Ý
{
  uchar i=0;
  for(i=0;i<8;i++)
{
   zong=0;
   _nop_();
  _nop_();
  _nop_();
  _nop_();
  zong=dat&0x01;
  delay_us(10);
  zong=1;
  dat>>=1;
}
}
int dsminging()
{
uchar i,j,dat;
dat=0;
for(i=1;i<=8;i++)
{
  j=dsrebit();
  dat=(j<<7)|(dat>>1);
}
return (dat);
}
void dszhuanhuan()//×&ordf;&raquo;&raquo;,&Oacute;&Atilde;&micro;&frac12;&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;&pound;&not;&Egrave;&raquo;&ordm;ó&Ograve;&ordf;&Ouml;&cedil;&Aacute;&icirc;
{
  dschushihua();
  delay_us(1);
  dsshuju(0xcc);//&iquest;&Eacute;&Ograve;&Ocirc;&Igrave;&oslash;&sup1;&yacute;ROM
  dsshuju(0x44);//&Icirc;&Acirc;&para;&Egrave;×&ordf;&raquo;&macr;&Atilde;ü&Aacute;&icirc;
}
void dsdu()
{
dschushihua();
delay_us(1);
dsshuju(0xcc);
dsshuju(0xbe);//&para;&Aacute;&Egrave;&iexcl;&Atilde;ü&Aacute;&icirc;
}
int dsre()
{
int temp=0;
uchar tmh,tml;//&cedil;&szlig;&micro;&Iacute;&Icirc;&raquo;
dszhuanhuan();//×&ordf;&raquo;&raquo;
dsdu();//&para;&Aacute;&Egrave;&iexcl;
tml=dsminging();//&Ograve;ò&Icirc;&ordf;&para;&Aacute;&Egrave;&iexcl;&micro;&Auml;&Icirc;&Acirc;&para;&Egrave;&Oacute;&ETH;16&Icirc;&raquo;//×&cent;&Ograve;&acirc;
tmh=dsminging();
temp=tmh;//·&Aring;&cedil;&szlig;&Icirc;&raquo;
temp<<=8;
temp|=tml;
return temp;
}

123.png (51.25 KB, 下载次数: 37)

123.png

456.png (34.77 KB, 下载次数: 43)

456.png

789.png (33.65 KB, 下载次数: 44)

789.png

作者: 372438dfs    时间: 2018-2-28 20:49
在数码管显示代码前加个清零,如P1=0xff。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1