股票

STM8S103 ADC初始化设置

adc.h

 
  1. #ifndef __ADC_H_
  2. #define __ADC_H_
  3. #include “define.h”
  4. //ADC通道号定义
  5. #define ADC_Channel0 (unsigned char)0x00
  6. #define ADC_Channel1 (unsigned char)0x01
  7. #define ADC_Channel2 (unsigned char)0x02
  8. #define ADC_Channel3 (unsigned char)0x03
  9. #define ADC_Channel4 (unsigned char)0x04
  10. #define ADC_Channel5 (unsigned char)0x05
  11. #define ADC_Channel6 (unsigned char)0x06
  12. #define ADC_Channel7 (unsigned char)0x07
  13. #define ENB 1
  14. extern void adc_init(uint8 mode);
  15. extern void adc_switch(uint8 channel);
  16. extern void adc_mode_scan(uint8 value);
  17. extern void read_adc(uint8 channel);
  18. #endif

adc.c

 
  1. #include “adc.h”
  2. #include “uart.h”
  3. //*****************************
  4. //函数名称:adc_init
  5. //函数功能:对ADC初始化,开启或关闭ADC电路
  6. //入口参数:ADC电路使能参数
  7. //出口参数:无
  8. //*****************************
  9. void adc_init(uint8 mode)
  10. {
  11.     uint16 i;
  12.     if(mode == ENB) //启动ADC电路
  13.     {
  14.         //F/4转换时间分频 Fadc = Fmaster/ADC_CR1[4..6]
  15.         //[000 F/2] [001 F/3] [010 F/4]
  16.         ADC_CR1 = (ADC_CR1&0x8f)|0x00;  //f/2
  17.         //数据左对齐
  18.         ADC_CR2 &= ~0x08;
  19.         //启动ADC
  20.         ADC_CR1 |= 0x01;
  21.         //等待ADC电路稳定
  22.         for(i=0; i<500; i++)
  23.             ;
  24.         ADC_CSR &= ~0x80;   //转换结束标志清0
  25.         return;
  26.     }
  27.     else
  28.     {
  29.         ADC_CR1 &= ~0x01;   //关闭ADC电路
  30.         return;
  31.     }
  32. }
  33. //********************************
  34. //函数名称:adc_switch
  35. //函数功能:在单通道模式下转换某一通道的ADC值
  36. //                  在(扫描模式下)连续转换1-Channel的ADC值
  37. //入口参数:要转换的ADC通道号
  38. //出口参数:无
  39. //********************************
  40. void adc_switch(uint8 channel)
  41. {
  42.     //选择转换通道
  43.     ADC_CSR = (ADC_CSR&0xf0)|channel;
  44.     //启动ADC
  45.     ADC_CR1 |= 0x01;
  46.     //等待转换
  47.     while(!(ADC_CSR&0x80))
  48.         ;
  49.     ADC_CSR &= ~0x80;
  50.     return;
  51. }
  52. //********************************
  53. //函数名称:adc_mode_scan
  54. //函数功能:ADC扫描模式设置函数
  55. //入口函数:扫描模式开启函数
  56. //出口参数:无
  57. //********************************
  58. void adc_mode_scan(uint8 value)
  59. {
  60.     if(value==ENB)
  61.     {
  62.         ADC_CR2 |= 0x02;
  63.     }
  64.     else
  65.     {
  66.         ADC_CR2 &= ~0x02;
  67.     }
  68. }
  69. void read_adc(uint8 channel)
  70. {
  71.     unsigned char tmpH, tmpL;
  72.     uint8 temp;
  73.     adc_switch(channel);
  74.     tmpH = ADC_DRH;
  75.     tmpL = ADC_DRL;
  76.     temp = tmpH;
  77.     temp *= 50;
  78.     temp /= 256;
  79.     //uart1_send_byte(tmpH);
  80.     //uart1_send_byte(tmpL);
  81.     uart1_send_byte(temp);
  82. }

在主函数里直接调用 read_adc(channel)

打赏
原文链接:,转发请注明来源!

发表评论