一段C8051的ADC转换程序求帮忙分析一下

一段C8051的ADC转换程序求帮忙分析一下,第1张

AMX0SL是一个寄存器,用尺慧槐来选择ADC转换的通道,而channel是函数传过来的通道号,ADC0INT是ADC0中断标志位,因为下边要用软件查询的方式进行判断转换完成,所以这里要清0。ADC0的软件启动方式有定时器启动和向ADC0BUSY位写1等方式启动,下边的就是等待ADC0转换结束,因为转换结束后ADC0INT会由硬件置1,当为0时,说明未完成转换,程序会一直执行while,直到转换结束后跳出,然后就是读取转换的结果了,c8051的ADC0是12位ad,所以转换的结果陵友会存到两个寄存器里边ADC0H存放高4位,ADC0L存放低8位。高4位乘碧蚂256加上低8位就是最终的转换结果,最后再把结果返回。

这个是使用外部RAM总线形式来通讯陆知的(最好把电路图贴上来)

CTRL _at_ 0x2FFF//这个代森早表对外部0x2FFF地址进行 *** 作

ADSEL _at_ 0x4FFF//这个代表对外部0x4FFF地址进行 *** 作早春消

通过硬件的总线协议 提高通讯速度

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开启的方式


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

原文地址: https://outofmemory.cn/yw/12512881.html

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

发表评论

登录后才能评论

评论列表(0条)

保存