新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于IIC總線的單片機(jī)排隊(duì)系統(tǒng)接口設(shè)計(jì)

基于IIC總線的單片機(jī)排隊(duì)系統(tǒng)接口設(shè)計(jì)

作者: 時(shí)間:2013-11-04 來源:網(wǎng)絡(luò) 收藏

  參數(shù)存儲(chǔ)器(E2PROM)[6]使用較低功耗的CMOS串行IIC電路,通過片內(nèi)存儲(chǔ)空間,記錄柜臺(tái)操作和儲(chǔ)戶排隊(duì)等信息。其操作控制完全遵循IIC協(xié)議。

  3 系統(tǒng)總線軟件模擬的實(shí)現(xiàn)方法

  排隊(duì)系統(tǒng)原理圖如圖4所示,由P3.4、P3.3模擬串行總線的SDA端及SCL輸出端,構(gòu)成模擬的IIC串行總線系統(tǒng)??偩€功能的實(shí)現(xiàn)除了簡(jiǎn)單硬件連接,大部分功能通過軟件模擬來實(shí)現(xiàn),下面給出部分總線常用子程序,這些子程序通用性較好,基本適用于大部分接口的芯片[2-3].

  

  3.1 總線啟動(dòng)、停止函數(shù)

  void IIC_Start(void)

  {

  IIC_SCL=1;

  IIC_Delay();

  IIC_SDA=1;

  IIC_Delay();

  IIC_SDA=0;

  IIC_Delay();

  IIC_SCL=0;

  IIC_Delay();

  }

  void IIC_Stop(void)

  {

  IIC_SDA=0;

  IIC_Delay();

  IIC_SCL=1;

  IIC_Delay();

  IIC_SDA=1;

  IIC_Delay();

  IIC_SCL=1;

  IIC_Delay();

  }

  3.2 從IIC器件指定位置讀若干字節(jié)

  bit RetBit;

  unsigned char i;

  IIC_Start(); /*啟動(dòng)總線*/

  RetBit=IIC_Write_Byte(Device_Addr);

  /*發(fā)送器件從地址*/ if(RetBit==0)

  return(0);

  RetBit=IIC_Write_Byte(Mem_Addr);

  /*發(fā)送器件子地址*/ if(RetBit==0)

  return(0);

  IIC_Stop(); /*結(jié)束總線*/ IIC_Start(); /*重新啟動(dòng)總線*/

  RetBit=IIC_Write_Byte(Device_Addr+1);

  if(RetBit==0)

  return(0);

  for(i=0;iNum-1;i++)

  {

  *DataPointer=IIC_Read_Byte(); /*接收數(shù)據(jù)*/

  IIC_Ack(0); /*發(fā)送應(yīng)答位*/

  DataPointer++;

  }

  *DataPointer=IIC_Read_Byte(); /*接收數(shù)據(jù)*/

  IIC_Ack(1);

  IIC_Stop(); /*結(jié)束總線*/

  return(1);



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉