找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1576|回复: 3
打印 上一主题 下一主题
收起左侧

51控制ADC0832子程序

[复制链接]
跳转到指定楼层
楼主
51控制ADC0832子程序
  1. /**********************************************
  2. 程序名称:ADC0832子程序
  3. 作    者:liuanggh
  4. 时    间:2006.12.30
  5. **********************************************/
  6. #ifndef ADC0832_H
  7. #define ADC0832_H
  8. #include <reg52.h>
  9. #include <intrins.h>
  10. #define uchar unsigned char
  11. #define uint  unsigned int
  12. #define first_channel   0x02  //通道1
  13. #define second_channel  0x03  //通道2
  14. sbit ADCLK  =P0^0;     //时钟接口
  15. sbit ADDI   =P0^1;     //数据输入接口
  16. sbit ADDO   =P0^2;    //数据输出接口
  17. sbit ADCS =P0^3;    //使能接口
  18. uchar buff[] = {0};
  19. /********************************************************
  20. 函数名称:void AD_init(uchar i)
  21. 函数作用:初始化ADC0832
  22. 参数说明:i=2,表示通道0,i=3,表示通道1
  23. ********************************************************/
  24. void AD_init(uchar i)
  25. {
  26.      ADDI = 1;       /*在第1 个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号*/
  27.      _nop_();
  28.     _nop_();
  29.     ADCS = 0;  //使能ADC0832
  30.     _nop_();
  31.     _nop_();
  32.     ADCLK = 1;
  33.     _nop_();
  34.     _nop_();
  35.     ADCLK = 0;    //形成下降沿1
  36.     _nop_();
  37.     _nop_();         /*在第2、3个脉冲下沉之前DI端应输入2位数据用于选择通道功能*/
  38.     if( (i&&0x01) == 0)
  39.     ADDI = 0;
  40.     if( (i&&0x01) == 1)
  41.     ADDI = 1;
  42.     _nop_();
  43.     _nop_();
  44.     ADCLK = 1;
  45.     _nop_();
  46.     _nop_();
  47.     ADCLK = 0;    //形成下降沿2
  48.     _nop_();
  49.     _nop_();
  50.     if( (i&&0x02) == 0)
  51.     ADDI = 0;
  52.     if( (i&&0x02) == 1)
  53.     ADDI = 1;
  54.     ADCLK = 1;
  55.     _nop_();
  56.     _nop_();
  57.     ADCLK = 0;    //形成下降沿3
  58.     _nop_();
  59.     _nop_();
  60. }
  61. /********************************************************
  62. 函数名称:uchar AD_read()
  63. 函数作用:读取ADC0832转换的数据
  64. 参数说明:无
  65. 函数返回:返回8位的数据
  66. ********************************************************/
  67. uchar AD_read()
  68. {
  69.      uchar temp = 0;
  70.      uchar temp1 = 0;
  71.      uchar temp2 = 0;
  72.      uchar i = 0;
  73.     for(i = 0; i < 8; i++)
  74.     {
  75.          ADCLK = 1;
  76.         _nop_();
  77.         _nop_();
  78.         ADCLK = 0;   //形成下降沿
  79.         _nop_();
  80.         _nop_();
  81.         if(ADDI)temp1 |= 0x01;
  82.         else temp1 |= 0x00;
  83.         temp1 = temp1 << 1;
  84.     }
  85.     for(i = 0; i < 8; i++)
  86.    {
  87.         if(ADDI)temp = 0x01;
  88.         else temp = 0x00;
  89.         temp = temp << i;
  90.         temp2 |= temp;
  91.         ADCLK = 1;
  92.         _nop_();
  93.         _nop_();
  94.         ADCLK = 0;   //形成下降沿
  95.         _nop_();
  96.         _nop_();
  97.     }
  98.     if(temp1 == temp2)
  99.     flag = 0;
  100.     return temp1;
  101. }

  102. void delay(void)//延时5ms
  103. {
  104.     unsigned char i,j;
  105.     for(i=10;i>0;i--)
  106.     for(j=248;j>0;j--);
  107. }

  108. #endif
复制代码


ADC0832子程序.rar

955 Bytes, 下载次数: 8, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:385004 发表于 2018-8-14 19:46 | 只看该作者
if里面ADDI的是什么意思,temp分别代表的是什么意思
回复

使用道具 举报

板凳
ID:379175 发表于 2018-11-7 22:57 | 只看该作者
亲,能帮忙解释一下吗?新手真心理解困难
回复

使用道具 举报

地板
ID:379175 发表于 2018-11-29 15:20 | 只看该作者
lwf1 发表于 2018-8-14 19:46
if里面ADDI的是什么意思,temp分别代表的是什么意思

ADDI是数据信号输入,temp是返回值,我是这样理解的也不知道对不对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表