基于IIC1.0的時(shí)鐘芯片應用程序設計
摘要:在對串行實(shí)時(shí)時(shí)鐘芯片X1203內部結構和工作特性作基本介紹的基礎上,設計出用單片機的通用I/O口線(xiàn)虛擬I2C總線(xiàn)來(lái)實(shí)現與時(shí)鐘芯片的串行接口電路以及利用虛擬I2C總線(xiàn)軟件包VIIC設計時(shí)鐘芯片1203的應用程序。
關(guān)鍵詞:單片機 實(shí)時(shí)時(shí)鐘 虛擬I2C總線(xiàn)
實(shí)時(shí)時(shí)鐘是微機測控系統中的一個(gè)重要組成部分。美國Xicor公司推出的串行接口實(shí)時(shí)時(shí)鐘芯片X1203提供備用電源輸入引腳,使器件能用非可重新充電電池任務(wù)用電源。該芯片以其體積小、功耗低、使用簡(jiǎn)單、接口容易、與單片機連線(xiàn)少為主要特點(diǎn),同時(shí)具有較高的精度,能很好滿(mǎn)足微機測控系統的求。下面具體介紹該芯片的內部結構、工作特性、與51系列單片機接口設計實(shí)例以及如何利用虛擬I2C總線(xiàn)軟件包VIIC來(lái)設計實(shí)時(shí)時(shí)鐘芯片X1203的應用程序。
1 X1203內部結構和工作特性
X1203是帶時(shí)鐘、日歷和2個(gè)鬧鐘報警的實(shí)時(shí)時(shí)鐘。雙端口時(shí)鐘和報警寄存器使時(shí)鐘即使在讀寫(xiě)操作期間也能精確地工作,時(shí)鐘/日歷提供了可通過(guò)一組寄存器進(jìn)行控制和讀出的功能;時(shí)鐘使用32.768kHz晶體輸入,以秒、分、時(shí)、日、星期、月和年為單位跟蹤時(shí)間,具有閏年校正,并能對小于31天的月自動(dòng)進(jìn)行調整;2個(gè)鬧鐘(報警)即中斷輸出,輸出脈沖重復率可以從1次/min~1次/年,支持I2C總線(xiàn)的2線(xiàn)接口,具有400kHz的數據傳送速率和內部切換電路的輔助電源輸入端,可靠性高,電源電壓從2.5~6V實(shí)時(shí)時(shí)鐘均能正常工作。
X1203的內部結構如圖1所示,由電源控制、振蕩器、分頻器、時(shí)鐘控制寄存器(CCR)、控制邏輯電路、移位寄存器等組成。
1.1 X1203的封裝形式和引腳說(shuō)明
X1203有8引腳SOIC和8引腳TSSOP 2種封裝形式,引腳排列如圖2所示。
SCL:串行時(shí)鐘引腳,用于使所有數據隨時(shí)鐘同步輸入器件和從器件輸出。此引腳上的輸入緩沖器總是激活的(不選通)。
SDA:串行數據引腳,用于把數據送入器件和從器件送出數據。它具有漏極開(kāi)路的輸出,可以與其它漏極開(kāi)路或集電極開(kāi)路輸出端進(jìn)行線(xiàn)“或”。輸入緩沖器總是激活(不選通)。漏極開(kāi)路輸出要求使用上拉電阻。
VBACK:備用電源引腳,向器件提供備用電源電壓,在VCC電源出現故障時(shí)向器件提供電源。
IRQ:中斷信號輸出引腳。引信號通知處理器,報警已發(fā)生并請求動(dòng)作,是漏極開(kāi)路的低電平有效輸出端。
X1、X2:反向放大器的輸入和輸出端引腳,可以在X1端接受外部32.768kHz的方波基準或配置為片內振蕩器。
電源控制電路由引腳Vcc和引腳VBACK輸入,當Vcc<VBACK-0.2V時(shí),電源控制電路切換到VBACK,當VCC超過(guò)VBACK時(shí),它將切換回到VCC。{{分頁(yè)}}
1.2 時(shí)鐘/控制寄存器(CCR)
時(shí)鐘/控制寄存器(CCR)分為5個(gè)部分:
①報警寄存器0(Alarm0)為8字節,字節地址為0000H~0007H;
②報警寄存器1(Alarm1)為8字節,字節地址為0008H~000FH;
③控制寄存器(Control)為1字節,字節地址為0011H;
④實(shí)時(shí)時(shí)鐘(RTC)為8字節,字節地址為0030H~0037H;
⑤狀態(tài)寄存器(Status)為1字節,字節地址為0003FH;
其中①~③為非易失性的E2PROM,而④、⑤為易失性的SRAM。CCR的映像如表1所列。
表1 CCR映像
地址 | 名稱(chēng) | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | 范圍 |
00FH | SR | BAT | AL1 | AL0 | 0 | 0 | RWEL | WEL | RTCF | |
0037H | Y2K | 0 | 0 | Y2K21 | Y2K20 | Y2K13 | 0 | 0 | Y2K10 | 19/20 |
0036H | DW | 0 | 0 | 0 | 0 | 0 | DY2 | DY1 | DY0 | 0~6 |
0035H | YR | Y23 | Y22 | Y21 | Y20 | Y13 | Y12 | Y11 | Y10 | 0~99 |
0034H | MO | 0 | 0 | 0 | G20 | G13 | G12 | G11 | G10 | 1~12 |
0033H | DT | 0 | 0 | D21 | D20 | D13 | D12 | D11 | D10 | 1~31 |
0032H | HR | T24 | 0 | H21 | H20 | H13 | H12 | H11 | H10 | 0~23 |
0031H | MN | 0 | M22 | M21 | M20 | M13 | M12 | M11 | M10 | 0~59 |
0030H | SC | 0 | S22 | S21 | S20 | S13 | S12 | S11 | S10 | 0~59 |
0011H | INT | IM | AL1E | AL0E | 0 | 0 | 0 | 0 | 0 | |
000FH | 未用 | |||||||||
000EH | DWA1 | EDW1 | 0 | 0 | 0 | 0 | DY2 | DY1 | DY0 | 0~6 |
000DH | 未用缺省=RTC年值 | |||||||||
000CH | MOA1 | EMO1 | 0 | 0 | A1G20 | A1G13 | A1G12 | A1G11 | A1G10 | 1~12 |
000BH | DTA1 | EDT1 | 0 | A1D21 | A1D20 | A1D13 | A1D12 | A1D11 | A1D10 | 0~31 |
000AH | HRA1 | EHR1 | 0 | A1H21 | A1H20 | A1H13 | A1H12 | A1H11 | A1H10 | 0~23 |
0009H | MNA1 | EMN1 | A1M22 | A1M21 | A1M20 | A1M13 | A1M12 | A1M11 | A1M10 | 0~59 |
0008H | SCA1 | ESC1 | A1S22 | A1S21 | A1S20 | A1S13 | A1S12 | A1S11 | A1S10 | 0~59 |
0007H | 未用 | |||||||||
0006H | DWA0 | EDW0 | 0 | 0 | 0 | 0 | DY2 | DY1 | DY0 | 0~6 |
0005H | 未用缺省=RTC年值 | |||||||||
0004H | MOA0 | EMO0 | 0 | 0 | A0G20 | A0G13 | A0G12 | A0G11 | A0G10 | 1~12 |
0003H | DTA0 | EDT0 | 0 | A0D21 | A0D20 | A0D13 | A0D12 | A0D11 | A0D10 | 0~31 |
0002H | HRA0 | EHR0 | 0 | A0H21 | A0H20 | A0H13 | A0H12 | A0H11 | A0H10 | 0~23 |
0001H | MNA0 | EMN0 | A0M22 | A0M21 | A0M20 | A0M13 | A0M12 | A0M11 | A0H10 | 0~59 |
0000H | SCA0 | ESC0 | A0S22 | A0S21 | A0S20 | A0S13 | A0S12 | A0S11 | A0S10 | 0~59 |
實(shí)時(shí)時(shí)鐘(RTC)使用外部32.768kHz石英晶體來(lái)保持年、月、日、時(shí)、分和秒的精確的內部表示。RTC具有閏年校正和世紀字節。上電后,直到至少有1字節寫(xiě)入RTC寄存器時(shí),時(shí)鐘才開(kāi)始計數。啟動(dòng)讀命令并指定對應于實(shí)時(shí)時(shí)鐘(RTC)寄存器的地址可以讀RTC,也可以通過(guò)寫(xiě)RTC寄存器來(lái)設置時(shí)間和日期。2個(gè)報警寄存器,其內容模仿RTC的內容,只是增加了使能位并去除了24小時(shí)時(shí)間選擇位。通過(guò)使能位和實(shí)時(shí)寄存器的設置,可以確定報警時(shí)間。
控制寄存器中位IM為方式控制位。
①I(mǎi)M=0(正常方式)。RTC與Alarm0寄存器設置的內容匹配時(shí),將自動(dòng)置位狀態(tài)寄存器的AL0位。如果控制寄存器的AL0E位也為“1”,則輸出IRQ信號將變?yōu)橛行?;如果AL0E為“0”,則AL0位被置位,IRQ信號保持不變。RTC與Alarm1寄存器設置的內容匹配時(shí)自動(dòng)置位AL1位。如果AL1E也為“1”,則輸出IRQ信號將變?yōu)橛行?;如果AL1E為“0”,則AL1位被復位,IRQ信號保持不變。
②IM=1(脈沖中斷方式)。此方式不使用位AL0E和AL1E,Alarm1的工作如前,RTC與Alarm1寄存器設置的內容匹配時(shí)將自動(dòng)置位AL1位,機必須通過(guò)查詢(xún)AL1位以決定是否發(fā)生了報警。Alarm0提供輸出響應,RTC與Alarm0寄存器設置的內容匹配時(shí),輸出IRQ脈沖1次,脈沖寬度約為30ms。所有的Alarm0寄存器使能選項均可使用,從而實(shí)現非常靈活的長(cháng)時(shí)間循環(huán)觸發(fā)器。
1.3 串行通信接口
X1203支持I2C總線(xiàn)接口。I2C總線(xiàn)是一個(gè)十分完善的多主系統總線(xiàn),總線(xiàn)上可以?huà)旖佣鄠€(gè)MCU,因此有4種工作方式:主發(fā)送、主接收、從發(fā)送、從接收。下面介紹的單個(gè)MCU系統,只用到I2C總線(xiàn)的主方式,即主發(fā)送與主接收。目前,帶有I2C總線(xiàn)接口的MCU只有少數廠(chǎng)家的個(gè)別產(chǎn)品,運用單片機的通用I/O口來(lái)虛擬I2C總線(xiàn)接口,可以很好地解決與X01203的接口問(wèn)題。圖3為X1203與51系列單片機的接口。X1203的SCL為串行移位時(shí)鐘輸入,P3.6與SCL相連以產(chǎn)生模擬時(shí)鐘信號;SDA為串行數據輸入輸出,P2.7與SDA相連以實(shí)現主器件51系列單片機與從器件X1203的數據通信。
51系列單片機對X1203有讀寫(xiě)兩種操作。寫(xiě)操作包括字節寫(xiě)和頁(yè)寫(xiě)(1次寫(xiě)8字節連續地址單元),讀操作包括當前地址讀、隨機地址讀和順序讀。具體格式如圖4所示。順序讀以當前地址讀或隨機地址讀啟動(dòng),但主器件接收到第1個(gè)數據字節后不是結束讀周期,而是以應答做出響應。這時(shí)讀操作的地址計數器自動(dòng)增量,允許在1次操作期間內順序讀出整個(gè)存儲的內容。{{分頁(yè)}}
2 運用虛擬I2C總線(xiàn)軟件包VIIC設計時(shí)鐘芯片X1203的應用程序
由于I2C總線(xiàn)協(xié)議的復雜性和操作管理的特殊性,在擴展I2C外圍器件時(shí),如果還要在了解I2C總線(xiàn)協(xié)議、操作原理的基礎上,采用直接方式進(jìn)行I2C總線(xiàn)外圍器件的應用程序設計,就會(huì )使得I2C總線(xiàn)應用程序的設計難度很大,也使I2C總線(xiàn)推廣應用較慢。因此,迫切需要推出I2C總線(xiàn)的應用軟件平臺,使大家不必了解I2C總線(xiàn)就能設計I2C總線(xiàn)應用程序。下面介紹如何運用虛擬I2C總線(xiàn)軟件包VIIC 1.0來(lái)設計時(shí)鐘芯片X1203的應用程序。
軟件包VIIC實(shí)現非介入性操作,接口界面是軟件包應用時(shí)唯一的觸及面。VIIC1.0的接口界面為數據讀寫(xiě)子程序RDNBYT/WRNBYT,因此RDNBYT/WRNBYT的調用操作命令,以及滿(mǎn)足調用操作的初始化操作3的條命令為VIIC的應用界面,即:
MOV SLA,#SLAR/SLAW ;總線(xiàn)上節點(diǎn)尋址并確定傳送方向
MOV NUMBYT,#N ;確定傳送字節數N
LCALL RDNBYT/WRNBYT; 讀/寫(xiě)操作調用
2.1 設定時(shí)鐘芯片當前值
將時(shí)鐘芯片當前值設定為2002、3、20、星期三、18:28:38
①將VIIC1.0裝入程序存儲器中。
②根據硬件電路及資源分配,將VIIC1.0中的符號單元賦值如下:
VSDA EQU P3.7 ;用P3.7虛擬SDA
VSCL EQU P3.6 ;用P3.6虛擬SCL
SLA EQU 60H ;60H為尋址字節存放單元
NUMBYT EQU 61H ;61H為傳送字節數據存放單元
MTD EQU 40H ;40H為發(fā)送緩沖區首地址
MRT EQU 50H ;50H為接收緩沖區首地址
③設定時(shí)鐘芯片當前值子程序設計。設時(shí)鐘芯片當前值設定子程序名為SJSD。SJSD的程序清單如下:
VSDA EQU P3.7
VSCL EQU P3.6
SLA EQU 60H
NUMBYT EQU 61H
MTD EQU 40H
SJSD:MOV 40H,#00H ;將狀態(tài)寄存器的高位地址、
MOV 41H,#3FH ;低位地址以及要寫(xiě)入狀態(tài)
MOV 42H,#02H ;寄存器的值依次裝入發(fā)送緩沖區
MOV SLA,#0
評論