自己用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.如何检测芯片的好坏?
谢谢各位!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>