跪求会C8051F020单片机的,要用C语言写出测量电压,就是AD转换的程序

跪求会C8051F020单片机的,要用C语言写出测量电压,就是AD转换的程序,第1张

void Timer3_Init()

{

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的单片机基本都差不多少,自己修改下就可以了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12048373.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存