您的位置 首页 方案

STM8单片机ADC使用(IAR)

STM8片上集成了10位逐次比较型模数转换器,在开发板上有个电位器接到了AIN3,但没有可以显示数据的LED数码管或LCD液晶显示屏,怎么办呢?可

STM8片上集成了10位逐次比较型模数转化器,在开发板上有个电位器接到了AIN3,但没有能够显现数据的LED数码管或LCD液晶显现屏,怎么办呢?能够把AD收集数据经过UART发送到电脑上显现。

#i nclude

void CLK_init(void)
{
CLK_CKDIVR = 0x08; // 16M内部RC经2分频后体系时钟为8M
}

void GPIO_init(void)
{
PD_DDR = 0x08; // 装备PD端口的方向寄存器PD3输出
PD_CR1 = 0x08; // 设置PD3为推挽输出
PD_CR2 = 0x80; // 使能PD7外部中止
}

void EXTI_init(void)
{
EXTI_CR1 = 0x80; // PD口下降沿触发中止
}

#pragma vector=0x02
__interrupt void EXTI_PD7_TLI(void)
{
unsigned int value;
ADC_CSR &= ~0x80;//铲除EOC转化完毕标志
ADC_CR1 |= 0x01; //开端单次转化
while(!(ADC_CSR&0x80)); //等候单次转化完结
value = ((int)ADC_DRH<<2); // 先读高8位,默认设置数据左对齐
value |= ADC_DRL; // 再读低8位
while(!UART3_SR_TXE);
UART3_DR = value;// 经过UART3发送AD采样成果
while(!UART3_SR_TXE);
UART3_DR = value>>8;
}

void ADC_init(void)
{
ADC_CSR = 0x03; // ADC输入引脚AIN3
ADC_CR1 = 0x01; // ADC敞开
}

void UART3_init(void)
{
UART3_BRR2 = 0x01;
UART3_BRR1 = 0x34; // 8M/9600 = 0x341
UART3_CR2 = 0x0C; // 答应接纳,答应发送
}

void init_devices(void)
{
asm(“sim”);//制止中止
CLK_init();
GPIO_init();
EXTI_init();
ADC_init();
UART3_init();
asm(“rim”); //使能中止
}

void main( void )
{
init_devices();

//主循环里没有程序需求履行
while(1);
}

在本例中仅使用了ADC的单次转化形式,每按一次按键进行一次AD转化,并把转化成果经过UART发送,这样能够在电脑上经过超级终端或串口调试软件检查数据。

经过这次测验,还发现一个现象,如果把铲除EOC转化完毕标志放在读取数据之后,那么在下次发动单次转化后,EOC标志位会主动置位,此刻有必要人为的等候7us后才干读到正确的数据,不然只能读到上一次的转化数据,或许这是STM8的ADC与其他MCU不同之处。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/261525.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部