找回密码
 立即注册

QQ登录

只需一步,快速开始

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

TLC0838 8路AD 51单片机程序分享

[复制链接]
跳转到指定楼层
楼主
8路8位串行AD TLC0838与51系列单片机的接口程序,可多片并联,共用时钟线与数据线适用于多路采集,本程序中使用两片可采集16路


完整代码下载: 0838.rar (722 Bytes, 下载次数: 33)




  1. void main(void)
  2. {
  3. Byte data1;
  4. data1=AD_0838(0,2);
  5. while(1);
  6. }

  7. /**********************************************************
  8. 目的:运用TLC0838,输入通道值,读取AD转换值
  9. 输入参数:1、通道值TDZ
  10. 输出参数:1、AD转换结果AD_JG
  11. 相关管脚:1、ADCS1=P1^3  第一个0838-AD片选   2、ADCS2=P1^0    第二个0838-AD片选
  12.           3、ADCLK=P1^1  0832-AD时钟         4 、ADIO=P1^4    0832-AD数据
  13. */
  14. Byte AD_0838(Byte TDZ,Byte Number)
  15. {
  16.         Byte Bit[8];
  17.         Byte TDZ_MID;
  18.         Byte i;
  19.         Byte AD_JG=0x00;
  20.         Bit[0]=0x01;
  21.         Bit[1]=0x02;
  22.         Bit[2]=0x04;
  23.         Bit[3]=0x08;
  24.         Bit[4]=0x10;
  25.         Bit[5]=0x20;
  26.         Bit[6]=0x40;
  27.         Bit[7]=0x80;
  28.         switch(TDZ)
  29.         {
  30.                 case 0   :TDZ_MID=0x18;break;
  31.                         case 1   :TDZ_MID=0x1c;break;
  32.                                 case 2   :TDZ_MID=0x19;break;
  33.                                         case 3   :TDZ_MID=0x1d;break;
  34.                                                 case 4   :TDZ_MID=0x1a;break;
  35.                                                         case 5   :TDZ_MID=0x1e;break;
  36.                                                                 case 6   :TDZ_MID=0x1b;break;
  37.                                                                         case 7   :TDZ_MID=0x1f;break;
  38.         }
  39.         switch(Number)
  40.         {
  41.         case 1:ADCS1=1;break;
  42.         case 2:ADCS2=1;break;
  43.         }
  44.         RS_ADIO=0;
  45.         CM8880CLK_ADCLK=0;
  46.         switch(Number)
  47.         {
  48.         case 1:ADCS1=0;break;
  49.         case 2:ADCS2=0;break;
  50.         }
  51.         for(i=5;i>0;i--)
  52.         {
  53.                 RS_ADIO=TDZ_MID&Bit[i-1];
  54.                 AD_0838_Pulse();
  55.         }
  56.         CM8880CLK_ADCLK=1;
  57.         for(i=8;i>0;i--)
  58.         {
  59.                 AD_0838_Pulse();
  60.                 if(RS_ADIO)AD_JG|=Bit[i-1];
  61.         }
  62.         switch(Number)
  63.         {
  64.         case 1:ADCS1=1;break;
  65.         case 2:ADCS2=1;break;
  66.         }
  67.         return AD_JG;
  68. }

  69. void AD_0838_Pulse(void)
  70. {
  71.         Byte i;
  72.         CM8880CLK_ADCLK=1;       //get a pulse about 52 us
  73.         for(i=0;i<4;i++)
  74.         {
  75.         _nop_();
  76.         }
  77.         CM8880CLK_ADCLK=0;
  78.         for(i=0;i<4;i++)
  79.         {
  80.         _nop_();
  81.         }
  82. }
复制代码






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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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