摘 要: 介紹了IIC總線芯片基本性能及時序、總線結構,設計了銀行排隊系統,介紹帶IIC總線的芯片PCF8563,通過軟件的方法,實現IIC總線在MCS-51系統中的使用,有效利用了現有資源,實現排隊功能,提高銀行工作效率,減少顧客等待時間。系統通過keil c進行仿真實現銀行排隊預期功能。
關鍵詞: IIC總線;排隊系統;單片機;嵌入式系統
本文以銀行現有排隊系統為實例,提出了IIC總線的單片機排隊系統接口設計,通過對系統的仿真模擬試驗,不僅簡化設計電路,減小電路板面積,節省常規設計中的元器件,減少使用各項費用,而且系統能耗、消噪、可靠性等性能得到提高,在MCS-51系列單片機不帶IIC總線接口組成的數據測控和智能儀表儀器中,可以通過IIC總線增加系統的接口器件種類,降低系統成本,提高應用系統性能[1-3]。
1 IIC總線
IIC總線(Inter Integrate Circuit Bus)是一種雙向二線制總線,由串行時鐘線(SCL)與串行數據線(SDA)構成,通過兩根線連接不同的具有IIC總線的器件,在不同的器件間傳送數據,數據傳輸速率在高速模式最高可達3.4 Mb/s,既簡化了電路設計又提高了硬件使用效率,使IIC總線在嵌入式系統串行傳輸設計中得到廣泛應用,目前主要用于中央控制中心、音頻集成電路及視頻等數字控制系統。
1.1 IIC總線時序
(1)啟動及停止
總線不忙時,時鐘線和數據線保持為高電平。啟動條件(S)是時鐘線在高電平而數據線為下降沿時,停止條件(P)是時鐘線處于高電平而數據線為上升沿時,IIC總線啟動停止條件如圖1所示。
(2) 數據傳送
一個數據位的傳送需要一個時鐘脈沖,每1 B后加1個標志位,由傳送器產生的標志位為高電平時,主設備會產生1個附加的標志位時鐘脈沖。數據線SDA上信息只有時鐘脈沖為高電平時應該保持數據穩定,否則數據線SDA上的數據會變為控制信號,如圖2所示。
(3) IIC 總線協議
IIC總線進行數據傳遞前,應先標明接收的設備地址。當IIC總線啟動后,一起傳送這個地址與第1個被傳送字節。
本系統中PCF8563 芯片作為一個從傳送器或從接收器,SCL信號線只是輸入線,SDA數據線為1條雙向的信號線。
1.2 芯片PCF8563概述
PCF8563是經典低功耗實時時鐘/日歷芯片[4],具有IIC總線接口技術,總線最大傳輸速度可達400 kb/s,每次寫讀數據后,內部包含的字地址寄存器就會自動遞增,具有功耗低、精度高等特點。PCF8563 具有定時器功能、多種報警功能、中斷輸出功能及時鐘輸出功能,可以完成多種定時服務,還可為單片機系統實現看門狗技術,其內部的振蕩電路、時鐘電路、低電壓1.0 V檢測電路及IIC兩線制總線通訊方式,同時解決了2000年問題,不但使外圍電路及其簡潔,而且也增加了芯片的可靠,可廣泛應用于水表、電表、移動電話、便攜儀器、傳真機、電池電源等產品領域中。
2 系統設計
2.1 系統需求分析
銀行服務大廳設有8個業務服務窗口,服務窗口屬性分為五類服務業務進行描述,可以進行個人理財業務、對公業務、VIP銀行卡業務、個人存取款儲蓄和代收手機費、水電費等混合業務。
排隊系統性能要求:服務大廳入口處擺放排隊機,供儲戶按時間順序索取排隊編號,打印編號;服務窗口內人員可以通過按鈕實現叫號;叫號后在屏幕上顯示編號并通過揚聲器連續兩次播放編號信息;工作人員通過后臺可以進行排隊系統的相關(功能、模式、菜單等)設置。
2.2 系統硬件設計
單片機排隊系統由銀行柜臺操作模塊、存儲器模塊、柜臺叫號模塊、液晶顯示模塊、儲戶操作模塊組成,系統結構如圖3所示。系統中IIC電路用于參數存儲器(E2PROM)和實時精確時鐘等接口的應用[2]。
實時精確時鐘使用較低功耗的CMOS實時日歷/時鐘芯片,通過分頻器(用于提供源時鐘給實時時鐘RTC)、定時器、可編程時鐘輸出、掉電檢測器、報警器和IIC總線接口,來具體設置系統必需的精準時鐘信號。所有的數據和地址通過IIC總線接口串行傳輸,每次寫讀數據后,字地址寄存器就會自動遞增[5]。
參數存儲器(E2PROM)[6]使用較低功耗的CMOS串行IIC電路,通過片內存儲空間,記錄柜臺操作和儲戶排隊等信息。其操作控制完全遵循IIC協議。
3 系統總線軟件模擬的實現方法
排隊系統原理圖如圖4所示,由P3.4、P3.3模擬串行總線的SDA端及SCL輸出端,構成模擬的IIC串行總線系統。總線功能的實現除了簡單硬件連接,大部分功能通過軟件模擬來實現,下面給出部分總線常用子程序,這些子程序通用性較好,基本適用于大部分IIC總線接口的芯片[2-3]。
3.1 總線啟動、停止函數
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(); /*啟動總線*/
RetBit=IIC_Write_Byte(Device_Addr);
/*發送器件從地址*/ if(RetBit==0)
return(0);
RetBit=IIC_Write_Byte(Mem_Addr);
/*發送器件子地址*/ if(RetBit==0)
return(0);
IIC_Stop(); /*結束總線*/ IIC_Start(); /*重新啟動總線*/
RetBit=IIC_Write_Byte(Device_Addr+1);
if(RetBit==0)
return(0);
for(i=0;i<Num-1;i++)
{
*DataPointer=IIC_Read_Byte(); /*接收數據*/
IIC_Ack(0); /*發送應答位*/
DataPointer++;
}
*DataPointer=IIC_Read_Byte(); /*接收數據*/
IIC_Ack(1);
IIC_Stop(); /*結束總線*/
return(1);
3.3 向IIC發送1字節函數
bit Ack_Flag;
unsigned char i;
for(i=0;i<8;i++) /*要傳送的數據長度為8位*/
{
IIC_SDA=(bit)((Data<<i)&0x80);
/*依次判斷待發送位高低*/
IIC_Delay();
IIC_SCL=1;
/*置時鐘線為高,通知E2PROM開始接收數據位*/
IIC_Delay();
IIC_SCL=0;
IIC_Delay();
}
IIC_SDA=1;
/*8位數據發送完后釋放數據線,準備接收應答位*/
IIC_Delay();
IIC_SCL=1;
IIC_Delay();
if(IIC_SDA)
Ack_Flag=0; /* E2PROM無應答*/ else
Ack_Flag=1; /*數據成功發送*/
IIC_SCL=0;
IIC_Delay();
return(Ack_Flag); /*返回E2PROM應答標志*/
3.4 系統仿真
經過軟件分析后,即可利用keil c集成開發環境uVision2對用C語言編寫的程序進行編譯、調試,通過JTAG口將編譯好的程序燒寫到單片機中,完成所需排隊功能。系統經過仿真測試,得到銀行入口處擺放排隊機供儲戶索取排隊編號,打印編號;銀行柜臺內工作人員通過按鈕可以實現叫號;叫號后在大屏幕顯示上顯示并通過喇叭播放叫號信息;銀行工作人員可以通過后臺進行系統的相關設置。
參考文獻
[1] 靳越,周芝田. 基于單片機的銀行排隊系統設計與研究[J].張家口職業技術學院學報,2010(1):50-52.
[2] 閆效鶯.嵌入式Linux下鍵盤驅動的設計與實現[J].自動化技術與應用,2010(03):28-31.
[3] 李亞民. 計算機組成與系統結構[M]. 北京:清華大學出版社,2000.
[4] Xiong Zhihui, Research on techniques of platform-based SoC hardware/software co-design[D].Changsha:National University of Defense Technology,2004.
[5] 陳志輝. I2C總線在MCS51系列單片機數據采集系統中的實現[J]. 微計算機信息,2005,21(1):67-68.
[6] 朱華生,葉軍.嵌入式系統IIC設備驅動程序設計玉實現[J].微計算機信息,2006,22(10-2):170-172.
[7] Philips. The I2C-BUS Specification V2.1, 2000.
[8] 邢勝春,鄭華磊.用IIC總線顯示功能模塊狀態信息的電視裝置[P].中國:CN201018580,2008.02.