|
有关模数转换AD7822/7825/7829的问题,急~~~
[复制链接]
最近搞了好几天AD7822模数转换芯片,但一直没有搞出来,已经是严格按照时序图来写代码了,但还是不知道出了什么问题,郁闷...请高人指点!小弟感激万分!!
现在出现的问题是:读AD数据时,用串口显示完全没有规律,当我用万用表测AD信号输入脚时,会影响到串口显示的数据.但有进入中断
我用示波器观察数据输入脚P0脚时,各个脚会经常出现从5V-0V的跳变行刺!就跟串口显示的数据几乎一样的结果...
程序如下:(为高速转换模式)
#include <12c5a60s2.h>
//#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit ADCLK = P3^5; //CONST
sbit CSAD = P3^4; //AD自选
sbit ADRD = P3^7; //读数据
sbit EOC = P3^2; //中断/转换完毕脚
sbit CSDA = P3^3;
sbit DAWR = P3^6;
sbit PD = P3^3; //模式更换脚,可切换到省电和高速模式
uchar i = 0xaa;
uchar temp = 0;
void delay_ns() //约延时500ns
{
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
}
void serial1_init() // 使用独立波特率发生器作为波特率发生器
{
SCON = 0x50; // 0101,0000 8 位可变波特率,无奇偶校验位
AUXR = 0x15; // T0x12,T1x12,UART_M0x6,BRTR|2SMOD,BRTx12,XRAM,S1BRS
BRT = 0xf4; // 22.1184下 BRTx12=1,波特率57600
}
main()
{
PD = 1; //高速模式
EA = 1; //中断初始化
EX0 = 1;
// IP=0; //优先级
IT0=1; //1:下降沿触发 0:电平触发
serial1_init(); //串口发送初始化
CSAD = 0;
ADCLK = 1; //power-up
delay_ns(); //延时1us 等待上电稳定
delay_ns();
while(1)
{
EOC = 1;
ADRD = 1;
ADCLK = 0; //开始转换
delay_ns(); //适当延时等待转换完成
ADCLK = 1;
_nop_();_nop_();_nop_();_nop_();
ADRD = 0; //读数据
_nop_();
ADRD = 1; //当ADRD从0到1时,EOC自动清零
temp = P0;
SBUF = temp; //串口发送观察结果
while(TI == 0);
TI = 0;
delay_ns(); //适当延时
}
}
void int0() interrupt 0 using 2
{
P1 = i++; //进入中断后观察P1脚的8个灯,以便观察中断是否正常
}
|
|