我的C8051F020单片机 DAC0 输出的电压为什么不稳定 0~3.3V 在变化

#include <c8051f020.h>
#define SYSCLK 24000000
#define BAUDRATE 9600

void SYSCLK_Init();
void PORT_Init();
void UART0_Init();
sbit LED = P0^6;
void SYSCLK_Init()
{
unsigned int i;
OSCXCN=0X67; //0X67=0110,0111
for(i=0;i<256;i++); //等待>1ms
while(!(OSCXCN&0X80)); //等待XTLVLD变为1
OSCICN=0X88; //时钟失效监测器,选择外部时钟源作为系统时钟
}
void PORT_Init()
{
P0MDOUT = 0x01; //P0.0 TX 推免方式
XBR0 = 0x04;
XBR2 = 0x40;
}
void UART0_Init()
{
SCON0=0x50; //串口方式1
TMOD=0X20; //选用定时器1作为波特率发生器
TH1=-(SYSCLK/BAUDRATE/16);
TL1=TH1;
CKCON|=0x10; //使用系统时钟
PCON=0x80; //波特率为9600
TR1=1; //定时器启动
}
void DAC0_Init()
{
DAC0CN = 0x80;//DAC0H写入时更新
REF0CN |= 0x03;//基准电压
DAC0L = 0x00;
DAC0H = 0x00;
}
void main()
{
WDTCN=0XDE;
WDTCN=0XAD;
SYSCLK_Init();
PORT_Init();
UART0_Init();
DAC0_Init();
EA=1;
ES0=1;
DAC0H = 255;
DAC0L = 15;
while(1);
}

VREF引脚的电压基准稳定吗?不稳定的话肯定会跳的,还有就是020的DAC0选择写DAC0寄存器时更新输出,是先写低位再写高位,这个在芯片的手册上有提到。

或者声明sfr16 DAC0  = 0xd2;然后直接向DAC0里写12位的数据

追问

我试过,先写低位也不行,电压基准,我使用内部的!

追答

看了几遍也没看出来问题在哪,建议使用官方例程测试下。

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-02-13
写固定值也会变吗?
试试用外部参考电压。
第2个回答  2014-02-12
第3个回答  2017-04-19
参考电压不对 应该是REF2CN

跪求C8051F020高手解惑:以下是我编写的程序,想让DA输出1.4V的电压...
换成 DAC0L=0x00;DAC0H=0x08;试试。。。

C8051F020 AD转换有一个基准电压VRF0(内部的2.4V) 那输入的模拟量呢?在...
vref是内部基准电压输出管脚,vrefd是DAC参考电压输入管脚,vref0是ADC0参考电压输入管脚,vref2是ADC2参考电压输入管脚,极限范围是-0.3~AVDD+0.3V 有效范围 1~AVDD -0.3V 真是蛋疼问题

谁能帮我比较一下stc89c52和c8051f020的异同,比如从大小,内部资源,封装...
3、两个12位DAC 可以同步输出,用于产生无抖动波形 4、两个模拟比较器 5、 内部电压基准 以及精确的VDD监视器和欠压检测器 6、片内JTAG 调试和边界扫描 提供全速、非侵入式的在线调试(对学习单片机很重要要)− 支持断点、单步、观察点、堆栈监视器;可以观察\/ 修改存储器和寄存器 −...

相似回答