基于IIC總線(xiàn)的單片機排隊系統接口設計
參數存儲器(E2PROM)[6]使用較低功耗的CMOS串行IIC電路,通過(guò)片內存儲空間,記錄柜臺操作和儲戶(hù)排隊等信息。其操作控制完全遵循IIC協(xié)議。
3 系統總線(xiàn)軟件模擬的實(shí)現方法
排隊系統原理圖如圖4所示,由P3.4、P3.3模擬串行總線(xiàn)的SDA端及SCL輸出端,構成模擬的IIC串行總線(xiàn)系統??偩€(xiàn)功能的實(shí)現除了簡(jiǎn)單硬件連接,大部分功能通過(guò)軟件模擬來(lái)實(shí)現,下面給出部分總線(xiàn)常用子程序,這些子程序通用性較好,基本適用于大部分IIC總線(xiàn)接口的芯片[2-3].
3.1 總線(xiàn)啟動(dòng)、停止函數
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器件指定位置讀若干字節
bit RetBit;
unsigned char i;
IIC_Start(); /*啟動(dòng)總線(xiàn)*/
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(); /*結束總線(xiàn)*/ IIC_Start(); /*重新啟動(dòng)總線(xiàn)*/
RetBit=IIC_Write_Byte(Device_Addr+1);
if(RetBit==0)
return(0);
for(i=0;iNum-1;i++)
{
*DataPointer=IIC_Read_Byte(); /*接收數據*/
IIC_Ack(0); /*發(fā)送應答位*/
DataPointer++;
}
*DataPointer=IIC_Read_Byte(); /*接收數據*/
IIC_Ack(1);
IIC_Stop(); /*結束總線(xiàn)*/
return(1);
評論