{
TMR3CN = 0x02
TMR3R = -44236//定时2ms
TMR3= 0xffff
EIE2 &= ~0x01
TMR3CN |= 0x04
}
void ADC0_Init(void)
{
AMX0SL=0x00//选择通道0
AMX0CF=0x00//选择AIN0和AIN1为独立输入
REF0CN=0x03//选择外部的电压为基准电压
ADC0CF=(SYSCLK/2500000)<<3//时钟为 ,增益为1
ADC0CN=0x84//ADC0使能且为ADCBUSY的开启方式
EIE2|=0x02//开启ADC0的中断
}
void ADC0_ISR() interrupt 15
{
static unsigned int_dec=INT_DEC
static long accumulator=0L
AD0INT = 0 // 清 ADC 中断标志位
accumulator += ADC0 // 累加ADC采样数据
int_dec-- // 指针减1
if (int_dec == 0) // 累加完了吗?
{
int_dec = INT_DEC // 指针复位
result = accumulator >>8
accumulator = 0L // 累加和变量清0
t=1
}
}ADC0转换,定时器3开启的方式
很简单,步骤如下:1。输入5V,调整电位器,使得0809读得值在0F0H;至少读4次,并取平均值;
2。0F0H对应24V,0F0H的十进制数是240,0F0H直接除以10 就得到需要显示的数据;
3。用单片机将需要显示的数据转换为数码管的显示段码,然后输出驱动数码管即可。
uchar get_AD_result(uchar channel){
uchar AD_finished=0
ADC_RES = 0
channel &= 0x07
ADC_CONTR = AD_SPEED
_nop_()
ADC_CONTR |= channel
_nop_()
ADC_CONTR |= 0x80
delay(1)
ADC_CONTR |= 0x08
AD_finished = 0
while (AD_finished ==0 )
{
AD_finished = (ADC_CONTR &0x10)
}
ADC_CONTR &= 0xE7
return (ADC_RES)
}
把AD的结果通过IO口输出就可以了
这个程序P1.7做AD脚的,你稍微小改下,有什么迷糊的,直接搬下来用就OK了,反正我一直这么用,他也没脾气。
STC的单片机基本都差不多少,自己修改下就可以了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)