打印
[电表应用]

sh79f169 计量部分调试不通 有兴趣一起探讨

[复制链接]
2848|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wshm1127|  楼主 | 2018-5-26 21:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void EMU_init(void)
{
    EMUSR = 0x00; //清控制寄存器
    LDOCON = 0xA0;//开启计量模拟前端电源
    WriteEMU_REG(EMUCFG3, 0x0000E8);//开启Vref
    Delayms(1);
        WriteEMU_REG(EMUCFG2, 0x9FF333);
    //配置计量其它参数,如 W1GAIN,P1CAL,W1ATTOS 等
    Delayms(60);
        WriteEMU_REG(EMUCFG0, 0x000037);
        Delayms(1);
        WriteEMU_REG(EMUCFG0, 0x000007);
    EMUSR = 0x80;
        Delayms(1000);
        WDR;
    WriteEMU_REG(EMUCFG1,0x2000c5);
    EMUIE = 0x00; //禁止脉冲输出


}
uint32_t ReadEMU_REG(uint8_t sadr)
{
    uint32_t val;
   
    EA=0;
    val=0x00;
   
    EADR=sadr&0x7F;
   
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP

        _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    val = EDTAH;
        Delayus(32);
    val = val<<8;
    val |= EDTAM;
        Delayus(32);
    val = val<<8;
    val |= EDTAL;
   
    EA=1;
   
    return(val);
}


void WriteEMU_REG(uint8_t sadr,uint32_t val)
{
    EA=0;
    EADR=0x00;
   
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    EDTAH=(uint8_t)(val>>16)&0xFF;
        Delayus(32);
    EDTAM=(uint8_t)(val>>8)&0xFF;
        Delayus(32);
    EDTAL=(uint8_t)(val&0xFF);
        Delayus(32);
    EADR=sadr|0x80;
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    EA=1;
       
}
系统初始化是这样的,不知道问题出在哪里,读电压电流有效值都是0.
沙发
wshm1127|  楼主 | 2018-5-27 08:21 | 只看该作者
没人用过这个芯片吗 带计量功能的 ??

使用特权

评论回复
板凳
leon.ho| | 2018-5-31 13:30 | 只看该作者
现在最新的应该用SH79F169B了。

使用特权

评论回复
地板
ileonli| | 2018-5-31 14:29 | 只看该作者
看寄存器配置应该是正确的。1.量下AVCC和VREF电压是否正确;2、检查寄存器值是否写进去。

使用特权

评论回复
5
wshm1127|  楼主 | 2018-5-31 21:58 | 只看该作者
ileonli 发表于 2018-5-31 14:29
看寄存器配置应该是正确的。1.量下AVCC和VREF电压是否正确;2、检查寄存器值是否写进去。[em ...

应该是我硬件的问题。我把VREF接到3.3V 上面去了。我明天在试试。谢谢你的提醒。十分感谢!!

使用特权

评论回复
6
wshm1127|  楼主 | 2018-6-1 20:30 | 只看该作者
wshm1127 发表于 2018-5-31 21:58
应该是我硬件的问题。我把VREF接到3.3V 上面去了。我明天在试试。谢谢你的提醒。十分感谢!! ...

确实是我硬件的问题。在此结帖,谢谢各位回复。

使用特权

评论回复
7
LguoFu| | 2018-9-6 11:17 | 只看该作者
你好,我使用时器0,为何不进中断呢

使用特权

评论回复
8
wshm1127|  楼主 | 2018-9-6 20:58 | 只看该作者
LguoFu 发表于 2018-9-6 11:17
你好,我使用时器0,为何不进中断呢

那不可能的,51内核的单片机,使用起来跟51一样,看看自己总中断是否关闭了。寄存器配置是否正确。

使用特权

评论回复
9
LguoFu| | 2018-9-11 16:08 | 只看该作者
wshm1127 发表于 2018-9-6 20:58
那不可能的,51内核的单片机,使用起来跟51一样,看看自己总中断是否关闭了。寄存器配置是否正确。 ...

哦。定时器0我调了很久,都不进中断,后面不得已我改用定时器1就OK了。
定时器0初始化:
void Init_Timer0(void)
{                                                                          
   TCON1=Bin(00000000);         
   TMOD =Bin(00010001);                                  
   TL0  =T0_1MS_CNT&0x00ff;       
   TH0  =(T0_1MS_CNT>>8)&0xff;

   TF0=0;                           
   TR0 = 1;                                                         
   ET0 = 1;
}
中断函数:
void Timer0_ISP(void) interrupt 1
{
   static uint8 T0_ms4_cnt=4;
   static uint8 ms20_cnt=20;
   static uint16 Timer_2s=1000;

   EA        =        0;       
   TL0=T0_1MS_CNT&0xff;                                 
   TH0=(T0_1MS_CNT>>8)&0xff;
   
   if(--T0_ms4_cnt==0x00)
   {
      T0_ms4_cnt=4;
          gT_4ms_Flag=1;
   }
   if(--ms20_cnt==0)
   {
      ms20_cnt=20;
          Key_STATUS();
   }       
       
         if(--Timer_2s>0)
         {
                  Timer_2s--;
                 if(Timer_2s==0)
                 {
                        Timer_2s=1000;
                  Timer_1s_Flag=1;
                 }
         }

         
   TF0=  0;                               
   EA=1;       
}

定时器1初始化:
void Init_Timer1(void)
{                                                                          
   TCON1=Bin(00000000);         
   TMOD =Bin(00010001);                                  
   TL1  =T0_1MS_CNT&0x00ff;       
   TH1  =(T0_1MS_CNT>>8)&0xff;

   TF1=0;                           
   TR1 = 1;                                                         
   ET1 = 1;
}

中断函数:
void Timer1_ISP(void) interrupt 3
{
        static uint16 Timer_2s=100;
       
EA = 0;              
TF1 = 0;           
TL1=T0_1MS_CNT&0xff;          
TH1=(T0_1MS_CNT>>8)&0xff;  
  

        if(--Timer_2s>0)
         {
                  Timer_2s--;
                 if(Timer_2s==0)
                 {
                        Timer_2s=100;
                  Timer_1s_Flag=1;
                 }
         }
         
        Flag_KeyScan=1;
         
        if(Timer_OpreationRelay>0)
        {
                Timer_OpreationRelay--;
        }
        else
        {
                Relay_On_Disable();
                Relay_Off_Disable();
        }

EA=1;         
}

使用特权

评论回复
10
proe533| | 2021-5-7 10:09 | 只看该作者
SH79F169的芯片资料有没?有就麻烦发一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

12

帖子

1

粉丝