
typedef unsigned int WORD
#include "reg51.h"
#include "intrins.h"
/*Declare SFR associated with the ADC */
sfr ADC_CONTR = 0xBC
sfr ADC_RES = 0xBD
sfr ADC_LOW2= 0xBE
sfr P1ASF = 0x9D
sfr P2M0 = 0x96
sfr P2M1 = 0x95
/*Define ADC operation const for ADC_CONTR*/
#define ADC_POWER 0x80
#define ADC_FLAG0x10
#define ADC_START 0x08
#define ADC_SPEEDLL 0x00
#define ADC_SPEEDL 0x20
#define ADC_SPEEDH 0x40
#define ADC_SPEEDHH 0x60
//延时
void Delay(WORD n)
{
WORD x
while (n--)
{
x = 5000
while (x--)
}
}
//初始AD寄存器
void InitADC()
{
P1ASF = 0xff
ADC_RES = 0
ADC_CONTR = ADC_POWER | ADC_SPEEDLL
Delay(2)
}
//AD转换
BYTE GetADCResult(BYTE ch)
{
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START
_nop_()
_nop_()
_nop_()
_nop_()
while (!(ADC_CONTR &ADC_FLAG))
ADC_CONTR &= ~ADC_FLAG
return ADC_RES
}
void main()
{ BYTE temp
P2M1=0 P2M0=0x03 //P2.0和P2.1强推挽
InitADC()
while (1)
{
temp=GetADCResult(0)//转换P1.0
if(temp>1)
P2|=0x03//P1.0有电压 P2.0和P2.1输出高
else
P2&=0xFC//P1.0无电压 P2.0和P2.1输出低
}
}
单片机中的ADC是Analog-to-Digital Converter的缩写,指模/数转换器或者模数转换器。
ADC是指将连续变化的模拟信号转换为离散的数字信号的器件。真实世界的模拟信号,例如温度、压力、声音或者图像等,需要转换成更容易储存、处理和发射的数字形式。模/数转换器可以实现这个功能,在各种不同的产品中都可以找到它的身影。
典型的模拟数字转换器将模拟信号转换为表示一定比例电压值的数字信号。然而,有一些模拟数字转换器并非纯的电子设备,例如旋转编码器,也可以被视为模拟数字转换器。
扩展资料:
单片机中ADC的运作原理:
模拟信号在时域上是连续的,因此可以将它转换为时间上连续的一系列数字信号。这样就要求定义一个参数来表示新的数字信号采样自模拟信号速率。这个速率称为转换器的采样率或采样频率。
可以采集连续变化、带宽受限的信号,然后可以通过插值将转换后的离散信号还原为原始信号。这一过程的精确度受量化误差的限制。然而,仅当采样率比信号频率的两倍还高的情况下才可能达到对原始信号的忠实还原,这一规律在采样定理有所体现。
由于实际使用的模拟数字转换器不能进行完全实时的转换,所以对输入信号进行一次转换的过程中必须通过一些外加方法使之保持恒定。
参考资料来源:百度百科-ADC(模数转换器)
主程序是空的当然进不去,你再次AD转换应该能进,主循环里放ADC12CTL0|=ADC12SC不需要自己清除采样中断标志!!MSP430的ADC模块具有16个采样通道,中断使能寄存器的16位分别用于使能和关闭对应通道的中断功能。中断标志寄存器ADC12IFG的16位分别对应16个采样通道,当对应通道采样结束后,采样结果存于相应的ADC12MEMx中后,相应的中断标志位被置位,待读取采样结果ADFC12MEMx后,采样中断标志位被硬件自动清零!!因此,在发生采样中断后,必须读取采样结果(同时自动清除采样中断标志),然后才能继续进行采样!欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)