小组 > 单片机 > C8051F单片机 > C8051F350ADC总是调不通
?
?
小组信息
名称:C8051F单片机

管理员:

人数:3918
小组积分:49100
简介:C8051F系列单片机是完全集成的混合信号系统级芯片,具有与8051兼容的CIP-51微控制器内核,采用流水线结构,单周期指令运行速度是8051的12倍,全指令集运行速度是原来的9.5倍。熟悉NCS-51系列单片机的工程技术人员可以很容易地掌握C8051F的应用技术并能进行软件的移植。但是不能将8051的程序完全照搬的应用于C8051F单片机中,这是因为两者的内部资源存在较大的差异,必须经过加工才能予以使用。其中C8051F020以其功能较全面,应用较广泛的特点成为C8051F的代表性产品,其性能价格比在目前应用领域也极具竞争力。C8051F020的内部电路包括CIP-51微控制器内核及RAM、ROM、I/O口、定时/计数器、ADC、DAC、PCA、SPI和SMBus等部件,即把计算机的基本组成单元以及模拟和数字外设集成在一个芯片上,构成一个完整的片上系统(SoC)。

小组公告

小组暂无公告.

返回本小组首页

楼主??[求助]?

C8051F350ADC总是调不通


作者:idol之歌
积分:8分
总积分:108分
:108
发送信息
加为好友
发表于2016-05-21 12:35
最近在用C8051F350做一个电压表,可是调试ADC的时候出了问题,不清楚为什么ADC0L、ADC0M、ADC0H的内容一直为0.希望学过这款单片机的童鞋能够提供一下帮助。下面是我写的程序
初始化程序
void ADC0_Init (void)
{
? ?REF0CN |= 0x03;? ?? ?? ?? ?? ?? ?? ?// Enable internal Vref
? ?ADC0CN = 0x00;? ?? ?? ?? ?? ?? ?? ? // Gain = 1, Unipolar mode
? ?ADC0CF = 0x00;? ?? ?? ?? ?? ?? ?? ? // Interrupts upon SINC3 filter output
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???// and uses internal VREF

? ?ADC0CLK = (SYSCLK/MDCLK)-1;? ?? ?? ?
? ?ADC0DEC = ((unsigned long) MDCLK / (unsigned long) OWR / (unsigned long) 128) - 1;

? ?ADC0MD = 0x81;? ?? ?? ?? ?? ?? ?? ? // Start internal calibration
? ?while(AD0CALC != 1);? ?? ?? ?? ?? ? // Wait until calibration is complete

? ?EIE1? ?&= ~0x08;? ?? ?? ?? ?? ?? ?? ?// Enable ADC0 Interrupts
? ?ADC0MD &= ~0x07;
? ?ADC0BUF = 0X00;
? ?ADC0MD??= 0x80;? ?? ?? ?? ?? ?? ?? ?// Enable the ADC0 (IDLE Mode)
}
获取ADC的程序
unsigned long Ain(void)
{
? ? ? ?
? ? ? ? unsigned long buf;
? ? ? ? ADC0_Init();
? ? ? ? ADC0MUX = 0x08;? ? ? ? ? ? ? ? // select AIN7
? ? ? ? AD0INT = 0;
? ? ? ? ADC0MD |=0x83;
? ? ? ? while(!AD0INT);
? ? ? ? AD0INT = 0;
? ? ? ? buf = ADC0H;
? ? ? ? buf = buf<<16;
? ? ? ? buf += (long)ADC0L + ((long)ADC0M<<8);
? ? ? ? return buf;
}

分享到:? 新浪微博?? qq空间??
投票数: ? 回复?? ? 引用??
点击登录,立即回复。
小组活跃用户