久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2347|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

PIC18F4680單片機(jī)SPI和IIC可以分時(shí)復(fù)用嗎?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
PIC18f4680  SPI和IIC同時(shí)使用,SPI 驅(qū)動(dòng)字庫(kù)芯片,IIC驅(qū)動(dòng)OLED。SPI和IIC都是使用的RC3 和RC4引腳,可以進(jìn)行分時(shí)復(fù)用嗎?怎么實(shí)現(xiàn)? void main(void)
{
    unsigned char NixieNum =0 ,Temp1 = 0;
    GPIO_Init();
    Timer0_int();
    OLED_Init();
    OLED_Clear(0xf0);
    OLED_Clear(0x00);
    OLED_Clear(0x0F);
    OLED_Clear(0x00);
    OLED_ShowString(1,1,"KeyNum:");
    OLED_ShowString(2,1,"Nixie:");
    OLED_ShowString(3,1,"0x");
//    OLED_GB2312_15x16_ShowChar(4,1,"按鍵");
  while(1)
  {
      NixieNum = Key_NIXIE_Num();
      if(NixieNum)
      {
         Temp1 = NixieNum;
         OLED_ShowBinNum(2,8,Temp1,8 );
         OLED_ShowHexNum(3,3,Temp1,2);
         if(Temp1 == 0xDF){ LED_RGB_G_ON();}
         if(Temp1 == 0xEF){ LED_RGB_B_ON();}
         if(Temp1 == 0xF7){ LED_RGB_R_ON();}
         if(Temp1 == 0x5F){ LED_RGB_G_OFF();}
         if(Temp1 == 0x6F){ LED_RGB_B_OFF();}
         if(Temp1 == 0x77){ LED_RGB_R_OFF();}
      }

   }
}




void IIC_Init(void)
{
    LATCbits.LC0 = 1;             //SPI_CS_PIN          LATCbits.LC0(字庫(kù)片選)
    TRISCbits.RC0 = 0;             //CS  1:輸入   0:輸出(字庫(kù)片選)
    /*********************************
      **** 硬件IIC   GPIO初始化****
    *********************************/
    LATCbits.LC3 = 0;             //IIC_SCL
        LATCbits.LC4 = 0;             //IIC_SDA     

        TRISCbits.RC3 = 1;             //設(shè)置為輸入
        TRISCbits.RC4 = 1;             //設(shè)置為輸入
    SSPSTAT = 0x80;         //設(shè)置通訊速率100K;Disable SMBus
    SSPCON1 = 0x38;         //使能串口,主控模式,時(shí)鐘=Fosc/(4*(SSPADD+1)
    SSPCON2 = 0x00;         //
    PIR1bits.SSPIF=0;       //中斷標(biāo)志清零
    SSPADD = 0x27;         // 頻率 = Focs/(4 * (SSPADD + 1))   ;100K頻率 16M晶振 SSPADD= 0x27;                        
}



void  SPI_Init(void)
{
     /*********************************
      **** SPI__GPIO初始化****
    *********************************/
    LATCbits.LC0 = 1;             //SPI_CS_PIN          LATCbits.LC0(字庫(kù)片選)
    LATCbits.LC2 = 1;             //SPI_CS_PIN          LATCbits.LC0(FLASH片選)
        LATCbits.LC3 = 0;             //SPI_SCK_PIN          LATCbits.LC3
        PORTCbits.RC4 = 0;            //SPI_MISO_PIN         PORTCbits.RC4       //數(shù)據(jù)輸入
        LATCbits.LC5 = 0;             //SPI_MOSI_PIN         LATCbits.LC5                //數(shù)據(jù)輸出

        TRISCbits.RC0 = 0;             //CS  1:輸入   0:輸出(字庫(kù)片選)
    TRISCbits.RC2 = 0;             //flash_CS  1:輸入   0:輸出(FLASH片選)
        TRISCbits.RC3 = 0;             //CLK 1:輸入   0:輸出
        TRISCbits.RC4 = 1;             //SDI 1:輸入   0:輸出               
        TRISCbits.RC5 = 0;             //SDO 設(shè)置RC5端口為輸出

    //SCLK開(kāi)始高電平上升沿發(fā)送數(shù)據(jù),下降沿接收數(shù)據(jù)。
     //0000 0000      
        SSPSTAT = 0x80;   //bit7 = 1; 0:在數(shù)據(jù)輸出時(shí)間的中間采樣輸入數(shù)據(jù) 1:在數(shù)據(jù)輸出時(shí)間的末端采樣輸入數(shù)據(jù)
                      //bit6 = 0; 0:時(shí)鐘狀態(tài)從空閑換到有效時(shí)發(fā)送     1:時(shí)鐘從有效換到空閑時(shí)發(fā)送
                      //bit0 = 0; 接收未完成,SSBUF空
        SSPCON1 = 0x32;    //bit5 = 1; 使能SPI, bit4 = 1;空閑狀態(tài)時(shí),時(shí)鐘為高電平
                       //bit3-0 = 0010,SPI主控模式,時(shí)鐘=Fosc/64
//    SSPCON1bits.WCOL  = 0;          //寫(xiě)沖突檢測(cè) 0:未發(fā)生沖突  1:
//    SSPCON1bits.CKP   = 1;          //bit4 = 1;空閑狀態(tài)時(shí),時(shí)鐘為高電平
//    SSPCON1bits.SSPM3 = 0;          //bit3-0 = 0011,SPI主控模式,時(shí)鐘=TMR2輸出/2
//    SSPCON1bits.SSPM2 = 0;          //         0010,SPI主控模式,時(shí)鐘=Fosc/16
//    SSPCON1bits.SSPM1 = 1;          //         0001,SPI主控模式,時(shí)鐘=Fosc/16
//    SSPCON1bits.SSPM0 = 0;          //         0000,SPI主控模式,時(shí)鐘=Fosc/4

    SSPIF = 0;             //中斷標(biāo)志位清零
    SSPCON1bits.SSPEN = 1;          //使能SPI

}


/**
  * @brief  OLED寫(xiě)命令
  * @param  Command 要寫(xiě)入的命令
  * @retval 無(wú)
  */
void oled_cmd(char cmd)
{
    IIC_Init();
    IIC_STAT();
    IIC_SendByte(0x78);
    IIC_SendByte(0x00);
    IIC_SendByte(cmd);
    IIC_STOP();
}
/**
  * @brief  OLED寫(xiě)數(shù)據(jù)
  * @param  Data 要寫(xiě)入的數(shù)據(jù)
  * @retval 無(wú)
  */
void oled_data(char Data)
{
    IIC_Init();
    IIC_STAT();
    IIC_SendByte(0x78);
    IIC_SendByte(0x40);
    IIC_SendByte(Data);
    IIC_STOP();
}


/**
  * @brief  OLED顯示漢字
  * @param  Line 行位置,范圍:1~4
  * @param  Column 列位置,范圍:1~16
  * @param  text 要顯示的一個(gè)字符,范圍:字庫(kù)芯片
  * @retval 無(wú)
  */
void OLED_GB2312_15x16_ShowChar(unsigned char Line, unsigned char Column, unsigned char *text)
{              
        unsigned char i,j;
        unsigned char SZHPArray[32];
        unsigned char HZHPArray[32];
        while(*text != 0)
        {
    //    SPI_Init();
                GT30L32S4W_Get_Bytes_GB2312_15x16(text,HZHPArray);
                GB2312_15x16_HengZhiHengPai_to_ShuZhiHengPai(SZHPArray,HZHPArray);
        //        IIC_Init();
                for(j = 0; j < 32; j ++)
                {
                        OLED_SetCursor((unsigned char)((Line - 1) * 2), (unsigned char)((Column - 1) * 8));                //設(shè)置光標(biāo)位置在上半部分
                        for (i = 0; i < 16; i++)
                        {
                                oled_data(SZHPArray[ i]);                        //顯示上半部分內(nèi)容
                        }
                        OLED_SetCursor((unsigned char)((Line - 1) * 2 + 1), (unsigned char)((Column - 1) * 8));        //設(shè)置光標(biāo)位置在下半部分
                        for (i = 0; i < 16; i++)
                        {
                                oled_data(SZHPArray[i + 16]);                //顯示下半部分內(nèi)容
                        }
                }
                text += 2;        //下個(gè)字
                Column += 2;
        }
}




IIC.png (1.31 MB, 下載次數(shù): 71)

IIC初始化

IIC初始化

SPI1.png (1.18 MB, 下載次數(shù): 71)

SPI

SPI

SPI2.png (1.18 MB, 下載次數(shù): 69)

SPI

SPI

OLED.png (1.72 MB, 下載次數(shù): 79)

OLED.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1083396 發(fā)表于 2023-6-15 15:04 | 只看該作者
我應(yīng)該在程序的什么地方進(jìn)行分時(shí)復(fù)用?沒(méi)有思路
回復(fù)

使用道具 舉報(bào)

板凳
ID:155507 發(fā)表于 2023-6-15 19:25 | 只看該作者
對(duì)于PIC18F4680單片機(jī)來(lái)說(shuō),SPI和I2C(IIC)是兩種不同的串行通信協(xié)議,它們不能直接分時(shí)復(fù)用在同一個(gè)引腳上。

SPI(Serial Peripheral Interface)是一種同步的串行通信協(xié)議,需要使用SCK(時(shí)鐘)、SDI(數(shù)據(jù)輸入)、SDO(數(shù)據(jù)輸出)和SS(片選)等引腳進(jìn)行通信。SPI通信是基于主從設(shè)備的方式進(jìn)行的,主設(shè)備控制通信時(shí)序和數(shù)據(jù)傳輸。

I2C(Inter-Integrated Circuit,也稱(chēng)為IIC)是一種雙線制串行通信協(xié)議,需要使用SCL(時(shí)鐘)和SDA(數(shù)據(jù))等引腳進(jìn)行通信。I2C通信是基于主從設(shè)備的方式進(jìn)行的,主設(shè)備控制通信時(shí)序和數(shù)據(jù)傳輸。

由于SPI和I2C使用不同的通信方式和時(shí)序,它們不能直接在同一個(gè)引腳上進(jìn)行分時(shí)復(fù)用。每個(gè)通信協(xié)議都需要專(zhuān)用的引腳來(lái)進(jìn)行通信。

如果您需要同時(shí)使用SPI和I2C通信,您需要為每個(gè)通信協(xié)議分配不同的引腳,并根據(jù)需要進(jìn)行引腳的連接和配置。

SPI 設(shè)備可以通過(guò)不聲明其從機(jī)選擇來(lái)忽略 SCK 和 SDI,但是 IIC 設(shè)備會(huì)被 SCL 和 SDA 線上的正常 SCK 和 SDI 信號(hào)弄糊涂。 即使粗略地看一下 IIC 規(guī)范也會(huì)發(fā)現(xiàn)這一點(diǎn)。

回復(fù)

使用道具 舉報(bào)

地板
ID:1083396 發(fā)表于 2023-6-16 10:25 | 只看該作者
angmall 發(fā)表于 2023-6-15 19:25
對(duì)于PIC18F4680單片機(jī)來(lái)說(shuō),SPI和I2C(IIC)是兩種...

"【解惑帖】I2C與SPI總線分時(shí)復(fù)用造成的沖突",這個(gè)帖子上說(shuō)可以分時(shí)復(fù)用。我也認(rèn)為是可以的只要在使用SPI時(shí)關(guān)閉IIC,在使用IIC時(shí)關(guān)閉SPI應(yīng)該就能實(shí)現(xiàn)。我再研究研究。謝謝
回復(fù)

使用道具 舉報(bào)

5#
ID:123289 發(fā)表于 2023-6-16 11:32 | 只看該作者
你可以相像一下:
在時(shí)間1,將它配制成SPI,這一點(diǎn)CPU會(huì)無(wú)條件服從。
在時(shí)間2,再將它配制成I2C,這一點(diǎn)CPU也無(wú)法抗拒啊。
所以你的想法是成立的!
不過(guò),你要想好,通訊的對(duì)方是否可以配合,以及外部分硬件是否能夠配合。
回復(fù)

使用道具 舉報(bào)

6#
ID:1083396 發(fā)表于 2023-6-16 11:58 | 只看該作者
yzwzfyz 發(fā)表于 2023-6-16 11:32
你可以相像一下:
在時(shí)間1,將它配制成SPI,這一點(diǎn)CPU會(huì)無(wú)條件服從。
在時(shí)間2,再將它配制成I2C,這一點(diǎn)C ...

對(duì)的理論上是這樣的。
現(xiàn)在是IIC驅(qū)動(dòng)的OLED顯示沒(méi)有問(wèn)題,SPI控制的字庫(kù)讀不出。

SPI控制的字庫(kù),在片選選通之前,將通訊切換成SPI理論上應(yīng)該可以。
我感覺(jué)是MSSP中的哪個(gè)寄存器沒(méi)有配置對(duì);蛘呤桥渲玫捻樞虿粚(duì)。
單獨(dú)測(cè)試SPI和IIC都是沒(méi)有問(wèn)題的
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲国产精品久久 | 欧美激情亚洲 | 午夜影视| 成人国产精品久久 | 超碰免费观看 | av在线一区二区三区 | 96av麻豆蜜桃一区二区 | 欧美国产日韩成人 | 日韩一区二区三区四区五区 | 国产高清一区二区三区 | 久久99精品国产99久久6男男 | 香蕉国产在线视频 | 免费小视频在线观看 | 久久成人一区 | 精品欧美一区二区在线观看视频 | 午夜久草| 日本三级网站在线 | 水蜜桃亚洲一二三四在线 | 成人三级视频 | 欧美日韩在线播放 | 欧美日韩综合精品 | 国产精品美女久久久久久免费 | 精品亚洲永久免费精品 | 天天久久| av久久| 精品视频一区二区三区在线观看 | 日韩电影一区 | 嫩草影院黄 | 免费视频中文字幕 | 国产免费一区二区 | 国产精品欧美一区二区三区 | 99re热精品视频 | 自拍中文字幕 | 午夜精品久久久久久久久久久久 | 国产操操操 | 一区二区三区精品 | 成人免费xxxxx在线视频 | 人人人人干 | 亚洲久久在线 | 亚洲成人av | 国产精品毛片一区二区在线看 |