STM8S的ADC应用

/软件环境:IAR FOR STM8 V1.0
//作者:zeno

//功能:AD的单次转换程序,适合温度的采集和电压的采集
//日期:2014.05.01

#include “iostm8s105c6.h”
unsigned int DATA;
unsigned int DATAH;
unsigned int DATAL;
// 函数功能:延时函数
// 输入参数:ms — 要延时的毫秒数,这里假设CPU的主频为2MHZ
void DelayMS(unsigned int ms)
{
unsigned char i;
while(ms != 0)
{
   for(i=0;i<250;i++)
   {
   }
   for(i=0;i<75;i++)
   {
   }
   ms–; 
   
}
//时钟配置默认
void CLK_Init(void)
{
}

// 将PD0设置成推挽输出,以便推动LED
void GPIO_Init(void)
{
PD_DDR = 0x01;
PD_CR1 = 0x01;             
PD_CR2 = 0x00;
}

// 初始化A/D模块
void ADC_Init(void)
{
ADC_CR2 = 0x00;             // A/D结果数据左对齐
ADC_CR1 = 0x00;             // ADC时钟=主时钟/2=1MHZ                      
                             // ADC转换模式=单次
                             // 禁止ADC转换
ADC_CSR = 0x00;             // 选择通道0
ADC_TDRL = 0x01;            //禁止施密特触发 
}
main()
{
int i;
GPIO_Init();
ADC_Init();
while(1)                    // 进入无限循环                             

{

   ADC_CR1 = 0x01;           // CR1寄存器的最低位置1,使能ADC转换
   for(i=0;i<100;i++);       // 延时一段时间,至少7uS,保证ADC模块的上电完成
   ADC_CR1 = ADC_CR1 | 0x01; // 再次将CR1寄存器的最低位置1
                             // 使能ADC转换
   while((ADC_CSR & 0x80) == 0); // 等待ADC结束      

   DATAH = ADC_DRH;              // 读出ADC结果的高8位
  
   DATAL = ADC_DRL;
  
   DATA = (DATAH<<2) + DATAL ; //得到十位精度的数据
  
   //PD_ODR = 0x01;   // PD0灭
  
   DelayMS(DATA);   // 延时一段时间
  
   PD_ODR = PD_ODR ^ 0x01;
  
  // DelayMS(DATA); 
  
}

}

关于Zeno Chen

本人涉及的领域较多,杂而不精 程序设计语言: Perl, Java, PHP, Python; 数据库系统: MySQL,Oracle; 偶尔做做电路板的开发,主攻STM32单片机
此条目发表在STM8分类目录。将固定链接加入收藏夹。

发表回复