微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > NIOS II软件编写的DS18B20采温程序不能正常采集,求大神指点。

NIOS II软件编写的DS18B20采温程序不能正常采集,求大神指点。

时间:10-02 整理:3721RD 点击:
sopc搭建方面:


这边添加了一个Bidir类型的PIO口,名称为JP2_0。base值为0x800030。
NIOS II 软件编写方面:
以下程序根据DS18B20例程编写:
--------------------------------------------------------
void init_18b20()           //初始化18b20
{
        alt_u8 n;
        IOWR_ALTERA_AVALON_PIO_IRQ_MASK(JP2_0_BASE,1);        //初始状态高电平
        usleep(20);
        IOWR_ALTERA_AVALON_PIO_IRQ_MASK(JP2_0_BASE,0);        //拉低
        usleep(600);
        IOWR_ALTERA_AVALON_PIO_IRQ_MASK(JP2_0_BASE,1);        //释放总线
        usleep(40);
        n=IORD_ALTERA_AVALON_PIO_IRQ_MASK(JP2_0_BASE);
        usleep(150);
}
void write_18b20(alt_u8 dat)
{
        alt_u8 i;
        for(i=0;i >=1;
        }
        usleep(100);
}
alt_u8 read_18b20()
{
        alt_u8 i;
        alt_u8 value;
        for(i=0;i >=1;
                usleep(5);
                IOWR_ALTERA_AVALON_PIO_IRQ_MASK(JP2_0_BASE,1);
                usleep(5);
                if(IORD_ALTERA_AVALON_PIO_IRQ_MASK(JP2_0_BASE))
                value|=0x80;
                usleep(20);
        }
        return value;
}
alt_u8 read_tem()
{
        alt_u8 a,b;
        alt_u16 temp;
        init_18b20();                        //初始化
        write_18b20(0xcc);                //跳过ROM
        write_18b20(0x44);                //启动采样
        usleep(1000);
        init_18b20();
        write_18b20(0xcc);
        write_18b20(0xbe);
        a=read_18b20();                        //采低8位
        b=read_18b20();                        //采高8位
        temp=b DIRECTION=1;JP2_0->DATA=1;        //初始状态高电平
        usleep(20);
        JP2_0->DIRECTION=1;JP2_0->DATA=0;        //拉低
        usleep(600);
        JP2_0->DIRECTION=1;JP2_0->DATA=1;        //释放总线
        usleep(200);
        JP2_0->DIRECTION=0;
        n=JP2_0->DATA;
        usleep(600);
        usleep(150);
        return n;
}
void write_18b20(alt_u8 dat)
{
        alt_u8 i;
        for(i=0;i DIRECTION=1;JP2_0->DATA=1;
                usleep(5);
                JP2_0->DIRECTION=1;JP2_0->DATA=0;
                usleep(5);
                JP2_0->DIRECTION=1;JP2_0->DATA=dat&0x01;
                usleep(100);
                JP2_0->DIRECTION=1;JP2_0->DATA=1;
                dat>>=1;
        }
        usleep(100);
}
alt_u8 read_18b20()
{
        alt_u8 i;
        alt_u8 value;
        for(i=0;i DIRECTION=1;JP2_0->DATA=1;
                usleep(5);
                JP2_0->DIRECTION=1;JP2_0->DATA=0;
                value>>=1;
                usleep(5);
                JP2_0->DIRECTION=1;JP2_0->DATA=1;
                usleep(5);
                JP2_0->DIRECTION=0;
                if(JP2_0->DATA)
                value|=0x80;
                usleep(20);
        }
        return value;
}
alt_u8 read_tem()
{
        alt_u8 a,b;
        alt_u16 temp;
        init_18b20();                        //初始化
        write_18b20(0xcc);                //跳过ROM
        write_18b20(0x44);                //启动采样
        usleep(1000);
        init_18b20();
        write_18b20(0xcc);
        write_18b20(0xbe);
        a=read_18b20();                        //采低8位
        b=read_18b20();                        //采高8位
        temp=b<<8;                                //高八位右移8位
        temp=temp+a;
        temp=temp*0.0625;
        return temp;
}
又换了结构体的方式写,结果还是一样



已退回1积分

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top