找回密码
 立即注册

QQ登录

只需一步,快速开始

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

ADE7758三相电能表读写程序和初始化 单片机程序

[复制链接]
跳转到指定楼层
楼主
ID:648979 发表于 2019-11-26 14:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. /*file name :DB_ADE7758_OREG.C*/

  2. /*Function  :Read ADE7758 register and Write ADE7758 register */
  3. #include<AM80C52.H>
  4. #include "DB_ADE7758_OREG.H"

  5. sbit DB_CS_A=0x90;
  6. sbit DB_CS_B=0x91;
  7. sbit DB_CS_C=0x92;

  8. sbit Dout=0x97;
  9. sbit Din =0x96;
  10. sbit Sclk=0x95;

  11. #define DB_X5045_CS0     P1=P1&0x0f8
  12. #define DB_ADE7758_CS1   P1=P1|0x01;P1=P1&0x0f9
  13. #define DB_LED_CS2       P1=P1|0x02;P1=P1&0x0fa
  14. #define DB_LED_CS3       P1=P1|0x03;P1=P1&0x0fb
  15. #define DB_DS1302_CS4    P1=P1|0x04;P1=P1&0x0fc
  16. #define DB_Uselct_CS     P1=P1|0x07

  17. unsigned char ADE7758_ReadData(void)
  18.   {
  19.      unsigned char ReadData;
  20.      unsigned int i;
  21.      ReadData=0x0;
  22.      Dout = 1;
  23.      for(i=0;i<8;i++)
  24.      {
  25.        ReadData=ReadData<<1;
  26.        Sclk=0;
  27.        YS();
  28.        Sclk=1;
  29.        YS();
  30.        if(Dout)
  31.        {
  32.         ReadData=ReadData | 0x01;
  33.        }
  34.        else
  35.        {
  36.         ReadData=ReadData & 0xfe;
  37.        }
  38.        YS();
  39.      }
  40.      Sclk=0;
  41.      return ReadData;

  42.   }

  43. void ADE7758_WriteDatain(unsigned char Datain)
  44.   {
  45.      unsigned char i;
  46.      unsigned char Temp_Data;
  47.      Temp_Data=Datain;
  48.      Sclk=0;
  49.      i=0;

  50.     for(i=0;i<8;i++)
  51.        {

  52.          Sclk = 1;
  53.          YS();
  54.           if((Temp_Data & 0x80)==0x80)
  55.          {
  56.            Din = 1;
  57.          }
  58.          else
  59.          {
  60.            Din = 0;
  61.          }
  62.          Sclk = 0;
  63.          YS();
  64.          Temp_Data=Temp_Data<<1;
  65.        }

  66.   }



  67. void ADE7758_InitA()
  68.   {
  69.      /*写相应寄存器*/
  70.      /*写12位是先写入高4位,再写入低8位*/

  71.      DB_ADE7758_CS1;
  72.      ADE7758_WriteDatain(0x80);
  73.      DB_Uselct_CS;

  74.      /*使能输出脉冲*/
  75.      DB_ADE7758_CS1;
  76.      ADE7758_WriteDatain(OPMODE_W8);
  77.      ADE7758_WriteDatain(0x00);
  78.      DB_Uselct_CS;

  79.      DB_ADE7758_CS1;
  80.      ADE7758_WriteDatain(GAIN_W8);
  81.      ADE7758_WriteDatain(0x00);
  82.      DB_Uselct_CS;

  83.      /*设置VARCF为无功功率输出脉冲*/
  84.      DB_ADE7758_CS1;
  85.      ADE7758_WriteDatain(WAVMODE_W8);
  86.      ADE7758_WriteDatain(0x00);
  87.      DB_Uselct_CS;

  88.      /*设置有功增益*/
  89.      DB_ADE7758_CS1;
  90.      ADE7758_WriteDatain(AWG_W12);
  91.      ADE7758_WriteDatain(ref[133]);
  92.      ADE7758_WriteDatain(ref[132]);
  93.      DB_Uselct_CS;

  94.      DB_ADE7758_CS1;
  95.      ADE7758_WriteDatain(BWG_W12);
  96.      ADE7758_WriteDatain(ref[135]);
  97.      ADE7758_WriteDatain(ref[134]);
  98.      DB_Uselct_CS;

  99.      DB_ADE7758_CS1;
  100.      ADE7758_WriteDatain(CWG_W12);
  101.      ADE7758_WriteDatain(ref[137]);
  102.      ADE7758_WriteDatain(ref[136]);
  103.      DB_Uselct_CS;

  104.      /*设置无功增益为默认1*/
  105.      DB_ADE7758_CS1;
  106.      ADE7758_WriteDatain(AVARG_W12);
  107.      ADE7758_WriteDatain(ref[139]);
  108.      ADE7758_WriteDatain(ref[138]);
  109.      DB_Uselct_CS;

  110.      DB_ADE7758_CS1;
  111.      ADE7758_WriteDatain(BVARG_W12);
  112.      ADE7758_WriteDatain(ref[141]);
  113.      ADE7758_WriteDatain(ref[140]);
  114.      DB_Uselct_CS;

  115.      DB_ADE7758_CS1;
  116.      ADE7758_WriteDatain(CVARG_W12);
  117.      ADE7758_WriteDatain(ref[143]);
  118.      ADE7758_WriteDatain(ref[142]);
  119.      DB_Uselct_CS;

  120.      /*设置输出脉冲累计的是单相还是三相*/
  121.      DB_ADE7758_CS1;
  122.      ADE7758_WriteDatain(COMPMODE_W8);
  123.      ADE7758_WriteDatain(0xbC);
  124.      DB_Uselct_CS;

  125.      DB_ADE7758_CS1;
  126.      ADE7758_WriteDatain(LCYCMODE_W8);
  127.      ADE7758_WriteDatain(0x3f);
  128.      DB_Uselct_CS;

  129.      DB_ADE7758_CS1;
  130.      ADE7758_WriteDatain(LINECYC_W16);
  131.      ADE7758_WriteDatain(0x0f);
  132.      ADE7758_WriteDatain(0xff);
  133.      DB_Uselct_CS;


  134.      DB_ADE7758_CS1;
  135.      ADE7758_WriteDatain(WDIV_W8);
  136.      ADE7758_WriteDatain(0x32);
  137.      DB_Uselct_CS;

  138.      DB_ADE7758_CS1;
  139.      ADE7758_WriteDatain(VARDIV_W8);
  140.      ADE7758_WriteDatain(0x32);
  141.      DB_Uselct_CS;

  142.      DB_ADE7758_CS1;
  143.      ADE7758_WriteDatain(VADIV_W8);
  144.      ADE7758_WriteDatain(0x32);
  145.      DB_Uselct_CS;


  146.      /*设置有功输出脉冲分频系数*/
  147.      DB_ADE7758_CS1;
  148.      ADE7758_WriteDatain(APCFNUM_W16);
  149.      ADE7758_WriteDatain(0x00);
  150.      ADE7758_WriteDatain(0x00);
  151.      DB_Uselct_CS;

  152.      DB_ADE7758_CS1;
  153.      ADE7758_WriteDatain(APCFDEN_W12);
  154.      ADE7758_WriteDatain(ref[57]);
  155.      ADE7758_WriteDatain(ref[56]);
  156.      DB_Uselct_CS;

  157.      /*设置无功输出脉冲分频系数*/
  158.      DB_ADE7758_CS1;
  159.      ADE7758_WriteDatain(VARCFNUM_W16);
  160.      ADE7758_WriteDatain(0x00);
  161.      ADE7758_WriteDatain(0x00);
  162.      DB_Uselct_CS;

  163.      DB_ADE7758_CS1;
  164.      ADE7758_WriteDatain(VARCFDEN_W12);
  165.      ADE7758_WriteDatain(ref[59]);
  166.      ADE7758_WriteDatain(ref[58]);
  167.      DB_Uselct_CS;

  168.      /*相位补偿*/
  169.      DB_ADE7758_CS1;
  170.      ADE7758_WriteDatain(APHCAL_W7);
  171.      ADE7758_WriteDatain(ref[144]);
  172.      DB_Uselct_CS;

  173.      DB_ADE7758_CS1;
  174.      ADE7758_WriteDatain(BPHCAL_W7);
  175.      ADE7758_WriteDatain(ref[146]);
  176.      DB_Uselct_CS;

  177.      DB_ADE7758_CS1;
  178.      ADE7758_WriteDatain(CPHCAL_W7);
  179.      ADE7758_WriteDatain(ref[148]);
  180.      DB_Uselct_CS;

  181.      /*电压补偿*/
  182.      /*DB_ADE7758_CS1;
  183.      ADE7758_WriteDatain(AVRMSOS_W12);
  184.      ADE7758_WriteDatain(ref[13]);
  185.      ADE7758_WriteDatain(ref[12]);
  186.      DB_Uselct_CS;

  187.      DB_ADE7758_CS1;
  188.      ADE7758_WriteDatain(BVRMSOS_W12);
  189.      ADE7758_WriteDatain(ref[15]);
  190.      ADE7758_WriteDatain(ref[14]);
  191.      DB_Uselct_CS;

  192.      DB_ADE7758_CS1;
  193.      ADE7758_WriteDatain(CVRMSOS_W12);
  194.      ADE7758_WriteDatain(ref[17]);
  195.      ADE7758_WriteDatain(ref[16]);
  196.      DB_Uselct_CS; */

  197.       /*电流增益*/
  198.      DB_ADE7758_CS1;
  199.      ADE7758_WriteDatain(AIGAIN_W12);
  200.      ADE7758_WriteDatain(ref[19]);
  201.      ADE7758_WriteDatain(ref[18]);
  202.      DB_Uselct_CS;

  203.      DB_ADE7758_CS1;
  204.      ADE7758_WriteDatain(BIGAIN_W12);
  205.      ADE7758_WriteDatain(ref[21]);
  206.      ADE7758_WriteDatain(ref[20]);
  207.      DB_Uselct_CS;

  208.      DB_ADE7758_CS1;
  209.      ADE7758_WriteDatain(CIGAIN_W12);
  210.      ADE7758_WriteDatain(ref[23]);
  211.      ADE7758_WriteDatain(ref[22]);
  212.      DB_Uselct_CS;
  213. }

  214. void YS()
  215. {
  216. unsigned char  i;
  217. for(i=0;i<0xff;i++);
  218. }
复制代码


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

使用道具 举报

沙发
ID:1 发表于 2019-11-26 14:37 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

板凳
ID:650094 发表于 2019-11-26 17:02 | 只看该作者
我觉得还不错
回复

使用道具 举报

地板
ID:421481 发表于 2019-11-26 19:10 | 只看该作者
我觉得也是
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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