airland 发表于 2009-8-28 20:52:04

为什么我的18b20用protues仿真能通过,但用硬件仿真时没反应啊?

下面是我写的18b20程序,protues仿真能通过,但用硬件仿真时没反应啊?调了好久还是不知什么原因,请各位帮帮我,谢谢!

#include "mega16.h"
#include "1602yejing.c"
#include "delay.h"

#define date_out PORTD.3             //数据通信线
#define date_en DDRD.3            
#define date_in PIND.3   
      
void reset(void);            //复位18b20
void write(unsigned char date);//写数据到18B20
unsigned char read(void);      //读数据到18b20   
void start_T(void);            //启动温度转换
int read_T(void);            //读取转换值
/*复位1——wire总线 */
void reset(void)
{
date_en=1;          //置位输出状态
date_out=1;

date_out=0;          //拉低总线
delay_us(490);   //延迟480~960us,
#asm("cli");   //下面这一段对时间要求严格 为保险起见 关中断
date_out=1;      //释放总线
date_en=0;       //置位为输入状态 检测总线上是否有器件   
delay_us(68);    //最佳时间 60+8us(忙延时只是一种策略)
while(date_in);         
#asm("sei");
date_en=1;               
date_out=1;
delay_us(490-68);   //保证释放总线时间不小于480um即可,这一时间从读总线状态之前就开始,这里把这
                   // 个时间也算在内
}   
void write(unsigned char date)
{
char i;
for(i=0;i<8;i++)
{
   #asm("cli");      //保证绝对不会发生中断
   date_out=0;         //设置低电平总线
   delay_us(2);
   date_out=date&1;
   delay_us(62);
   date_out=1;
   date>>=1;
   #asm("sei");
   delay_us(2);
   }
   date_out=1;
}
unsigned char read(void)
{
unsigned char i,date;
date=0x00;//数据接收准备
date_en=1;
for(i=0;i<8;i++)
{
   #asm("cli");
   date_out=0;
   delay_us(2);
   date_out=1;
   date_en=0;          //下一步读取总线电平 设置为输入   
   if(date_in)
   date|=(1<<i);
   #asm("sei");
   delay_us(62); //60~120us
   date_en=1;
}
return date;
}
void start_T(void)
{
reset();
write(0xcc);   //跳过多器件识别
write(0x44);   //启动温度转换
}
int read_T(void)
{
int temp=0;
reset();
write(0xcc);   //跳过多器件识别
write(0xbe);   //发出读取命令
temp=read();   // 读出温度低八位
temp|=(((int)read())<<8);//读出温度高八位
return temp;
}
void main()
{
   float w=0.0;
   //xianshi(123);
   //delay_ms(1000);
   while(1)
   { reset();
   delay_ms(50);
   start_T();
   delay_ms(50);
   w=(float)read_T();
   w/=15.5;
   xianshi(w*1000);
   delay_ms(30);
}
   
}

airland 发表于 2009-8-28 20:55:21

这是CVAVR编译环境下的工程文件,里面有仿真文件ourdev_475747.rar(文件大小:47K) (原文件名:18b20.rar)

fjcqv 发表于 2009-8-28 20:59:32

去年做过,
改这里 delay_us(490);   //延迟480~960us,
这里根据实际情况调节。仿真的兼容性很好,但实际这里必须适当调节。没仿真那么好
页: [1]
查看完整版本: 为什么我的18b20用protues仿真能通过,但用硬件仿真时没反应啊?