找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2390|回复: 1
收起左侧

关于proteus仿真的DS18B20的问题,求救

[复制链接]
ID:286243 发表于 2018-2-28 12:25 | 显示全部楼层 |阅读模式
在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
456.png
789.png
回复

使用道具 举报

ID:265915 发表于 2018-2-28 20:49 | 显示全部楼层
在数码管显示代码前加个清零,如P1=0xff。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表