找回密码
 立即注册

QQ登录

只需一步,快速开始

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

PCH8591 iic_adc单片机源程序

[复制链接]
跳转到指定楼层
楼主
ID:397993 发表于 2018-10-31 19:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
iic_adc程序

单片机源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. sbit  IIC_SDA=P2^6;      
  4. sbit  IIC_SCL=P2^7;
  5. sbit  read=P3^2;

  6. void yanshi()      //延时1.8s
  7. {
  8.         int i=0;
  9.         int        j=0;
  10.         for(i=0;i<3000;i++)
  11.         for(j=0;j<200;j++)
  12.         ;
  13. }

  14. void IIC_Start(void)
  15. {
  16.         IIC_SDA=1;
  17.         IIC_SCL=1;
  18.         _nop_();
  19.         IIC_SDA=0;
  20.         _nop_();
  21.         IIC_SCL=0;
  22.         _nop_();
  23. }
  24. void IIC_Stop(void)
  25. {
  26.         IIC_SCL=0;
  27.         IIC_SDA=0;
  28.         IIC_SCL=1;
  29.         _nop_();
  30.         IIC_SDA=1;
  31.         _nop_();

  32. }


  33. bit IIC_ACK_TEST()                //ack 应答
  34. {
  35.         bit  ErrorBit;     //应答位
  36.         IIC_SDA=1;    //主机释放SDA总线
  37.         _nop_();
  38.         IIC_SCL=1;
  39.         ErrorBit=IIC_SDA;
  40.         IIC_SCL=0;
  41.         return(ErrorBit);



  42. }

  43. void IIC_ACK_0(void)
  44. {
  45.         IIC_SDA=1;
  46.         IIC_SCL=1;
  47.         _nop_();
  48.         IIC_SDA=0;
  49.         IIC_SCL=0;

  50. }
  51. unsigned  char IIC_Read_8_Bit(void)
  52. {
  53.          unsigned  char  temp, rbyte=0;
  54.          for(temp=8; temp!=0; temp--)
  55.         {
  56.         IIC_SCL=1;  
  57.         rbyte=rbyte<<1;
  58.         rbyte=rbyte|((unsigned char)(IIC_SDA));   //在IIC_SCL=1期间,读SDA线数据         
  59.         IIC_SCL=0;
  60.         }
  61.         return(rbyte);

  62. }
  63. void IIC_Write_8_Bit(unsigned char input)
  64. {
  65.         unsigned char temp;
  66.         for(temp=8;temp!=0;temp--)

  67.    {
  68.         if(input&0x80)       //---MSB优先-----
  69.          IIC_SDA=1;
  70.         else
  71.          IIC_SDA=0;
  72.         IIC_SCL=1;
  73.         _nop_();        //传输1bit
  74.         IIC_SCL=0;     //在IIC_SCL=0时,改变数据位
  75.         input=input<<1;   
  76.         }
  77. }

  78. unsigned char PCH8591_Get_AD()
  79. {
  80.         unsigned char ADC_data1;
  81.         IIC_Start();                                 //启动
  82.         IIC_Write_8_Bit(0x90);                  //8591器件写地址        0x90
  83.         IIC_ACK_TEST();

  84.         IIC_Write_8_Bit(0x00);                  //8591控制字 4路单通道0x00
  85.         IIC_ACK_TEST();

  86.         IIC_Start();                                        //启动       
  87.         IIC_Write_8_Bit(0x91);                        //8591 读地址0x91
  88.         IIC_ACK_TEST();

  89.         ADC_data1=IIC_Read_8_Bit();
  90.         IIC_ACK_TEST();
  91.         IIC_Stop();
  92.                                                                           //结束
  93.         return ADC_data1;
  94. }  

  95. void PCF8591_DAC(unsigned char dac_data)
  96. {
  97.         IIC_Start();                                 //启动
  98.         IIC_Write_8_Bit(0x90);                  //8591器件写地址        0x90
  99.         IIC_ACK_TEST();

  100.         IIC_Write_8_Bit(0x40);                  //8591控制字 4路单通道0x00
  101.         IIC_ACK_TEST();

  102.         IIC_Write_8_Bit(dac_data);
  103.         IIC_ACK_TEST();
  104.         IIC_Stop();
  105. }


  106. void uart_init(void)
  107. {
  108.     ET1=0;
  109.     TMOD = 0x21;        // 定时器1工作在方式2(自动重装)
  110.     SCON = 0x50;        // 10位uart,允许串行接受

  111.     TH1 = 0xFD;
  112.     TL1 = 0xFD;

  113.     TR1 = 1;
  114. }


  115. void UART_Send_Byte(unsigned char dat)
  116. {
  117.         SBUF = dat;
  118.         while (TI == 0);
  119.         TI = 0;
  120. }
  121. void main()
  122. {
  123. while(1)
  124. {
  125.         uart_init();
  126.         yanshi();
  127.         UART_Send_Byte(PCH8591_Get_AD());
  128.         yanshi();
  129. }

  130. }
  131. void T0_int(void) interrupt 0         //T0
  132. {
  133. if (PCH8591_Get_AD()>0x4c)
  134.          PCF8591_DAC(0x4c);
  135. }
复制代码

所有资料51hei提供下载:
4_IIC_adc.zip (35.24 KB, 下载次数: 6)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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