哪位大神用过AD420这个芯片啊,求指导

2020-02-05 09:22发布

自己用AD420做的4~20mA输出模块一直没有电流输出,自己感觉软硬件都有问题,硬件就没法放上来啦。这是我写的一个AD420的程序,求各位大神指正

/****************************************************
高精度数模转换器AD420C51程序
功能:输入0x0 ~ 0xffff,输出相对应的电流值
晶振频率:12MHz
****************************************************/
#include <reg52.h>
#include <intrins.h>

/*函数:延时1us*/
void delay1us(void)
{
        _nop_ ();
}

/*函数:延时若干微秒*/
void delaynus (unsigned char n)
{
        unsigned char i;
       
        for (i = 0; i < n; i ++)
                delay1us ();
}

/*函数:延时若干毫秒*/
void delaynms(unsigned char n)
{
        unsigned char i;
       
        while (n --)
        {
                for (i = 0; i < 115; i ++)
                        ;

        }
}


unsigned int ad420_output[] = {0xffff, 0xbfff, 0x7fff, 0x3fff, 0x0000}; //五个测试数据

sbit AD420_LAT = P1^0;     //锁存
sbit AD420_CLK = P1^1;     //时钟
sbit AD420_DI = P1^2;      //数据输入

/*函数:把数据写入AD420*/
void write_AD420 (unsigned int ad420_data)
{
        unsigned char i;

        AD420_LAT = 1;      //锁存置1
        for (i = 0; i < 16; i ++)
        {
                AD420_CLK = 0;     //时钟置0,然后写入数据
                if (ad420_data & 0x8000)  //写入数据
                        AD420_DI = 1;
                else
                        AD420_DI = 0;
                delaynus (10);
                AD420_CLK = 1;     //时钟置1,上升沿写入数据
                delaynus (10);
                ad420_data <<= 1;  //数据移位

        }
        AD420_CLK = 0;
        delaynus (5);
        AD420_LAT = 0;
        delaynus (5);
        AD420_LAT = 1;    //把16位数据写完,再在锁存端的上升沿把数据写到DAC
        delaynus (5);


}

void main (void)
{
        unsigned char i;
        while (1)
        {
                for (i = 0; i < 5; i ++)
                {
                        write_AD420 (ad420_output[i]);  //分别把五个数据写到AD420
                       
                        delaynms (200);  //延时,便于观察测试
                        delaynms (200);
                        delaynms (200);
                        delaynms (200);
                        delaynms (200);
                        delaynms (200);
                        delaynms (200);
                        delaynms (200);
                        delaynms (200);
                        delaynms (200);
                       
                }
        delaynms (200);
        delaynms (200);
        }

}

另外,还有几个问题:
1.AD420AR-32和AD420AN-32有什么区别?
2.如何检测芯片的好坏?
谢谢各位!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。