stc单片机ad转换程序

电子说

1.2w人已加入

描述

  stc单片机ad转换程序

  #include

  #include

  sfr P1_ADC_EN = 0x97; //A/D转换功能允许寄存器

  sfr ADC_CONTR = 0xC5; //A/D转换控制寄存器

  sfr ADC_DATA = 0xC6; //A/D转换结果寄存器

  sfr P1M0=0x91;

  sfr P1M1=0x92;

  #define uchar unsigned char ;

  #define uint unsigned int ;

  void delay(uchar delay_time) // 延时函数

  {

  uchar n;

  uint m;

  for (n=0;n {

  for(m=0;m《10000;m++);

  }

  }

  uchar get_AD_result(uchar channel)

  {

  uchar AD_finished = 0; // 存储 A/D 转换标志

  ADC_DATA = 0;

  ADC_CONTR = channel; // 选择 A/D 当前通道

  delay(1); //使输入电压达到稳定

  ADC_CONTR |= 0x08; //0000,1000 令 ADC_START = 1, 启动A/D 转换

  AD_finished = 0;

  while ( AD_finished == 0 ) // 等待A/D 转换结束

  {

  AD_finished = (ADC_CONTR & 0x10); //0001,0000, ADC_FLAG ==1测试A/D转换结束否

  }

  ADC_CONTR &= 0xF7; //1111,0111 令 ADC_START = 0, 关闭A/D 转换,

  return (ADC_DATA); // 返回 A/D 转换结果

  }

  void main()

  {

  P1 = P1 | 0x03; // 0000,0011,P1.0,P1.1为 A/D 转换,即通道0与1

  P1_ADC_EN = 0x03; //0000,0011, P1 的P1.0,P1.1设置为 A/D 转换输入脚

  // 断开P1.0,P1.1 内部上拉电阻

  while(1)

  {

  get_AD_result(0);

  delay(200);

  get_AD_result(1);

  delay(200);

  }

  }

  stc单片机ad转换程序心得

  话说stc内部自带ad,但是功能多了!必然控制起来就啰嗦了!不像外部ad。stc如果不用中断ad方式需要注意一下几个问题:

  1、在初始化ad的时候,一定要第一个给ad提供电源,即adc_power一定要第一个置1;

  2、在每次对adc-contr进行操作后,必须延时至少4个时钟周期,原因是adc_contr这个寄存器需要时间存储信息;

  3、在对adc_contr进行操作时,尽量不要用位寻址。直接对整个寄存器进行修改。

  4、在数据手册上面提示尽量不要用“与”“或”,但是在时机应用的时候因为每次对adc_contr进行操作后都要延时,所以“与”“或”还是很必要的;

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分