代码如下:
#include"iostm8s103k3.h"
#define u8 unsigned char
#define u16 unsigned int
u8 voltl=0,templ=0;
void GPIOB_Init()
{
PB_DDR=0XFF;
PB_CR1=0X00;
PB_CR2=0X00;
}
void HSI_8M()
{
CLK_SWCR|=0x02; //开启切换
CLK_SWR=0xe1;
while((CLK_SWCR & 0x01)==0x01);
CLK_CKDIVR=0x08;//f=f(RC)/2
CLK_SWCR&=(~0x02); //关闭切换
}
void Init_ADC()
{
ADC_CR1 = 0x00; //分频系数为4 连续转换模式 先不启动ADC转换
ADC_CR2 = 0x38; //非外部触发 数据右对齐 禁止扫描模式
ADC_TDRL|= 0x08; //禁止AIN3施密特触发器功能
ADC_CR1_ADON =1; //第一次写1是从低功耗模式唤醒
}
void GET_Temp_AD()
{
ADC_CSR = 0x02; //禁止转换结束中断 设置转换通道为AIN2
ADC_CR1_ADON =1; //开启AD转换
while(ADC_CSR_EOC==0); //等待转换结束
ADC_CSR&=(~0x80); //清除转换结束标志
temp = ADC_DRH; //读出AD转换结果
templ = ADC_DRL;
}
void GET_Volt_AD()
{
ADC_CSR = 0x03; //禁止转换结束中断 设置转换通道为AIN3
ADC_CR1_ADON =1; //开启AD转换
//ADC_CR1|=0x01; //开启AD转换
while(ADC_CSR_EOC==0); //等待转换结束
ADC_CSR&=(~0x80); //清除转换结束标志
voltl = ADC_DRL;
volt = ADC_DRH; //读出AD转换结果
}
void main(void)
{
HSI_8M();
GPIOB_Init();
Init_ADC();
while(1)
{
GET_Temp_AD();
GET_Volt_AD();
GET_Temp();
GET_Volt();
}
}
|