STM8S1O5K4的AD采集不知道出了什么问题,求大神!使用AD0通道直接接的3.3V 调试的时候采集数据完全不对,低于2.5V就采集不了。
上图是调试的时候,寄存器的值。求大神搭救!!
#include"iostm8s105k4.h"
int i;
unsigned int H,L;
unsigned int dianya;
void delay(unsigned int z)
{
unsigned int a;
for(a=z;a>0;a--);
}
void Init_AD(void)
{
ADC_CSR=0x00; //选择通道
ADC_CR2|=0x08; // 数据排列,右对齐
ADC_TDRL=0x01;
ADC_CR1|=0X01;
}
void Init_UART2(void)
{
UART2_CR1=0x00;
UART2_CR2=0x00;
UART2_CR3=0x00;
// 设置波特率,必须注意以下几点:
// (1) 必须先写BRR2
// (2) BRR1存放的是分频系数的第11位到第4位,
// (3) BRR2存放的是分频系数的第15位到第12位,和第3位
// 到第0位
// 例如对于波特率位9600时,分频系数=2000000/9600=208
// 对应的十六进制数为00D0,BBR1=0D,BBR2=00
UART2_BRR2=0x00;
UART2_BRR1=0x0d;
UART2_CR2=0x2c;//允许接收,发送,开接收中断
}
void UART2_sendchar(unsigned char c)
{
while((UART2_SR & 0x80)==0x00);
UART2_DR=c;
}
void main()
{
Init_AD();
Init_UART2();
delay(1000);
while (1)
{
delay(1000);
ADC_CR1|=0x01;
// 再次将CR1寄存器的最低位置1,开启AD转换
while((ADC_CSR & 0x80)!=0x80); // 等待转换结束
ADC_CSR&=0x7F;
L=ADC_DRL;
H=ADC_DRH;
dianya=H*256+L;
delay(1000);
}
}
|