找回密码
 立即注册
查看: 307|回复: 4

主控芯片是stc8G,poe芯片是MP3924,为什么我读取POE芯片的ADC通道的寄存器值一直是FF

[复制链接]

30

主题

77

回帖

383

积分

中级会员

积分
383
发表于 2024-6-8 15:40:55 | 显示全部楼层 |阅读模式
#include  "STC8h.h"
#include  "usart.h"
#include  "delay.h"
#include  "stdio.h"


#include "intrins.h"



sbit    SDA     =   P1^4;
sbit    SCL     =   P1^5;

unsigned char  Register_Data;

bit busy;

void I2C_Isr() interrupt 24
{
   // _push_(P_SW2);
    P_SW2 |= 0x80;
    if (I2CMSST & 0x40)
    {
        I2CMSST &= ~0x40;                       //?????
        busy = 0;
    }
   // _pop_(P_SW2);
}

void Start()
{
    busy = 1;
    I2CMSCR = 0x81;                             //??START??
    while (busy);
}

void SendData(char dat)
{
    I2CTXD = dat;                               //?????????
    busy = 1;
    I2CMSCR = 0x82;                             //??SEND??
    while (busy);
                usart_send_char(busy);
}

void RecvACK()
{
    busy = 1;
    I2CMSCR = 0x83;                             //???ACK??
    while (busy);
}

char RecvData()
{
    busy = 1;
    I2CMSCR = 0x84;                             //??RECV??
    while (busy);
    return I2CRXD;
}

void SendACK()
{
    I2CMSST = 0x00;                             //??ACK??
    busy = 1;
    I2CMSCR = 0x85;                             //??ACK??
    while (busy);
}

void SendNAK()
{
    I2CMSST = 0x01;                             //??NAK??
    busy = 1;
    I2CMSCR = 0x85;                             //??ACK??
    while (busy);
}

void Stop()
{
    busy = 1;
    I2CMSCR = 0x86;                             //??STOP??
    while (busy);
}

void Delay()
{
    int i;

    for (i=0; i<3000; i++)
    {
        _nop_();
        _nop_();
        _nop_();
        _nop_();
    }
}

void main()
{
                unsigned char Counter=10;

    P0M0 = 0x00;
    P0M1 = 0x00;
    P1M0 = 0x00;
    P1M1 = 0x00;
    P2M0 = 0x00;
    P2M1 = 0x00;
    P3M0 = 0x00;
    P3M1 = 0x00;
    P4M0 = 0x00;
    P4M1 = 0x00;
    P5M0 = 0x00;
    P5M1 = 0x00;

    P_SW2 = 0x80;

//        P10=1;P11=0;P16=1;P35=0; //success
       
    I2CCFG = 0xe0;                             
    I2CMSST = 0x00;
    EA = 1;
                Register_Data=0;//register_  data_
                usart_init();
               
                                    Start();           //open IIC                        
    SendData(0x60);      //  transmit address + write   0x60                          
    RecvACK();
    SendData(0x0F);          //transmit  high address of storage                 
    RecvACK();
                SendData(0x00);          //transmit  high address of storage                 
    RecvACK();
    Stop();                        //stop            

                Delay10us(100);
               
                while(1)
                {
               
        //the second data_ is valid
    Start();                        //start            
    SendData(0x60);                  //device   address +write         
    RecvACK();
    SendData(0x43);                 //register00  dat of high               
    RecvACK();
    Start();                        //prepare for read the storage 's  dat            
    SendData(0x61);                //read the dat from mechine            
    RecvACK();
    Register_Data = RecvData();               
    SendACK();       
                    Register_Data = RecvData();               
    SendACK();
    Counter=RecvData();               
    SendNAK();                                                               
    Stop();
               
                Counter=Counter>>2;
                P10=0;P37=0;        P11=0;P16=0;
          usart_send_char(11);               
                usart_send_char(0x11);       
                usart_send_char(Counter);               
                usart_send_char(Register_Data);
        }

    while (1);
}


POE 芯片adc地址

POE  芯片adc地址
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:57
  • 最近打卡:2025-05-04 08:52:05

718

主题

1万

回帖

1万

积分

管理员

积分
15654
发表于 2024-6-8 16:22:40 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:57
  • 最近打卡:2025-05-04 08:52:05

718

主题

1万

回帖

1万

积分

管理员

积分
15654
发表于 2024-6-8 16:25:53 | 显示全部楼层
截图202406081624406745.jpg


I2C 外部加 10K 上拉电阻,
或上电初始化打开内部 4K上拉电阻, 1mS后再操作
回复 支持 反对

使用道具 举报 送花

30

主题

77

回帖

383

积分

中级会员

积分
383
发表于 2024-6-11 08:52:34 | 显示全部楼层
神*** 发表于 2024-6-8 16:25
I2C 外部加 10K 上拉电阻,
或上电初始化打开内部 4K上拉电阻, 1mS后再操作
...

好的  我尝试一下  谢谢
回复 支持 反对

使用道具 举报 送花

30

主题

77

回帖

383

积分

中级会员

积分
383
发表于 2024-6-13 18:49:43 | 显示全部楼层
神*** 发表于 2024-6-8 16:25
I2C 外部加 10K 上拉电阻,
或上电初始化打开内部 4K上拉电阻, 1mS后再操作
...

您好  我有个问题就是我还是无法获取那个状态  就算是设置了上拉电阻
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-4 10:19 , Processed in 0.120332 second(s), 78 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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