找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1690|回復: 5
收起左側(cè)

錦銳CA51 MCU的IIC問題

[復制鏈接]
ID:499742 發(fā)表于 2022-11-21 19:56 | 顯示全部樓層 |閱讀模式
請問大神們,錦銳MCU型號CA51F551S3單片機,普通IO口做IIC通訊時,用到的IIC  引腳IO口要設(shè)置成輸出還是輸入呢?我用普通IO口做IIC發(fā)現(xiàn)驅(qū)動PT2314控制沒反應,有誰用過嗎?謝謝解惑。附程序
#include "ca51f5sfr.h"
#include "gpiodef_f5.h"
#include "delay.h"
#include "i2c.h"

#define scl                  P02
#define sda                  P03


#define AddWr 0xa0//e  
#define AddRd 0xa1//f  

void   iic_delay(void)
{
    unsigned char i=15;//12
    while(i--);
}
//******************************************************************

unsigned char ACK(void)
{
   unsigned char time_1;
    sda=1;
          iic_delay();
    scl=0;
    iic_delay();
    scl=1;
          iic_delay();
    time_1=10;
    while(sda)
    {
                time_1--;
                if (!time_1)
                 {
                   scl=0;
       iic_delay();
                   return 0;
                 }
        } //ACK
    scl=0;
        iic_delay();

        return 1;
}
//*******************************************************************

void NOACK(void)
{
    sda=1;
          iic_delay();
    scl=1;
    iic_delay();
    scl=0;
    iic_delay();
}
/*
void ACK_2(void)
{
    sda=0;
        iic_delay();
    scl=1;
    iic_delay();
    scl=0;
    iic_delay();
}
*/
//*********************************************************************
void start(void)  
{        
        sda=1;
        iic_delay();
        scl=1;
        iic_delay();
        sda=0;
        iic_delay();
        scl=0;
        iic_delay();
  }
//*********************************************************************
void stop(void)  
{
        sda=0;
        iic_delay();
        scl=1;
        iic_delay();
        sda=1;
        iic_delay();
        scl=1;  
        iic_delay();
}


void  write_8bit(unsigned char dat)
{
    unsigned char i=8;

    scl=0;
        iic_delay();
    while (i--)
    {
                                M_LED = ~M_LED;
        sda=(bit)(dat&0x80);
        iic_delay();
        dat<<=1;
        scl=1;
                iic_delay();
        scl=0;
        iic_delay();
    }
}


unsigned char  read_8bit(void)
{
   unsigned char k;
         unsigned char i=8;

    scl=0;
          sda=1;
    iic_delay();

    while (i--)
    {
                                M_LED = ~M_LED;
        scl=1;
        iic_delay();
        k=(k<<1)|sda;
        iic_delay();
        scl=0;
                iic_delay();
    }
        return k;
}


void WrToROM(unsigned char Address,unsigned char Data)
{
   start();
   write_8bit(AddWr);   
   ACK();
   write_8bit(Address);
   ACK();
   write_8bit(Data);
   ACK();
   stop();
   Delay_50us(2);

}


unsigned char RdFROM(unsigned char Address)
{
   unsigned char Date;

   start();   
   write_8bit(AddWr);
   ACK();
   write_8bit(Address);
   ACK();
   start();
   write_8bit(AddRd);  
   ACK();
   (Date)=read_8bit();
   NOACK();
   stop();
   return Date;


功放CA51.rar

297.08 KB, 下載次數(shù): 5

回復

使用道具 舉報

ID:624769 發(fā)表于 2022-11-21 20:24 | 顯示全部樓層
最好看手冊,不同的器件,要求不同,
大多器件,開漏模式+ 47K 上拉都可以控制。
回復

使用道具 舉報

ID:401564 發(fā)表于 2022-11-22 19:55 | 顯示全部樓層
1,這個片子有硬件IIC,你可能用硬件IIC
2,雖說都是8051,但只是內(nèi)核相同而已,我沒有認真看,不知道端口是什么結(jié)構(gòu),并不是所有的單片機都能像STC這樣,不用更改端口配置就能讀寫的有的單片機,要么只能讀.要么只能寫
你可以參考一下PIC的IIC程序,PIC的IIC是這樣工作的:向從機寫入數(shù)據(jù)時,先把端口設(shè)定成輸出,然后再開始寫入
從從機讀取數(shù)據(jù)時,先把端口設(shè)定成強上拉輸入模式,然后再開始讀取

void Write_Byte(unsigned char Byte)                        //寫入器件的應答信號由從機給出
{
        unsigned char i;
        unsigned int k=0;       
    TRISCbits.TRISC4=0;//SDA作為輸出,這個是PIC把端口設(shè)置成輸入的語句,不用管,知道這是更改端口配置就行了       
        for(i=0;i<8;i++)
                         {                               
                                if(Byte&0x80)SDA=1;
                                else SDA=0;
                                Delay();
                                SCL=1;
                                Delay();
                                SCL=0;
                                Delay();                                               
                                Byte<<=1;
                        }
    TRISCbits.TRISC4=1;//SDA作為輸入
        SCL=1;
        Delay();       
        SDA=1;       
        while((SDA==1)&&(k<1000))         //超時就不再等待應答
                {
                        k++;
                        Delay();
                }                                                 //等待SDA出現(xiàn)低電平,出現(xiàn)低電平就表示器件已經(jīng)應答         
        SCL=0;
}

回復

使用道具 舉報

ID:499742 發(fā)表于 2022-11-22 21:09 | 顯示全部樓層
Y_G_G 發(fā)表于 2022-11-22 19:55
1,這個片子有硬件IIC,你可能用硬件IIC
2,雖說都是8051,但只是內(nèi)核相同而已,我沒有認真看,不知道端口是什么 ...

謝謝你的回復,對我很大啟發(fā)。源程序是可以讀寫24C02,可能PT2314硬件線路有問題。
回復

使用道具 舉報

ID:401564 發(fā)表于 2022-11-23 09:13 | 顯示全部樓層
金滿堂 發(fā)表于 2022-11-22 21:09
謝謝你的回復,對我很大啟發(fā)。源程序是可以讀寫24C02,可能PT2314硬件線路有問題。

我以為你沒有驗證過呢
如果驗證過IIC程序,那么,IIC程序就是沒有問題的,問題就出現(xiàn)在PT2314
你可以把IIC的延時改成100mS的,寫入之前把一個端口拉低,寫入之后再拉高,通過LED或者其它來看一下,從機有沒有響應
如果從機有響應,那就是接下來的操作的問題
如果從機沒響應,要么是硬件問題,要么是從機地址問題
回復

使用道具 舉報

ID:499742 發(fā)表于 2022-11-23 20:00 | 顯示全部樓層
Y_G_G 發(fā)表于 2022-11-23 09:13
我以為你沒有驗證過呢
如果驗證過IIC程序,那么,IIC程序就是沒有問題的,問題就出現(xiàn)在PT2314
你可以把IIC ...

這個芯片我以前用STC10系列做過產(chǎn)品的,現(xiàn)在搬到錦銳MCU就不行,也可能像你說的放慢點速度看看
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表