I2C總線(xiàn)是Philips公司推出的芯片間串行傳輸總線(xiàn)。它以串行數據線(xiàn)(SDA)和串行時(shí)鐘線(xiàn)(SCL)2根連線(xiàn)實(shí)現了完善的全雙工同步數據傳送,可以極方便地構成多機系統和外圍器件擴展系統。關(guān)于I2C總線(xiàn)的結構和工作原理詳見(jiàn)參考文獻1。 一、P87LPC764單片機I2C總線(xiàn)接口 P87LPC764是Philips公司生產(chǎn)的一種小封裝、低成本、高性能的單片機(有關(guān)它的詳細介紹見(jiàn)參考文獻2)。它采用80C51加速處理器結構,片內帶有支持I2C總線(xiàn)的硬件接口。當激活I(lǐng)2C總線(xiàn)時(shí),P87LPC764端口1中的P1.2與P1.3分別作為SCL和SDA行使I2C總線(xiàn)功能。其I2C總線(xiàn)由3個(gè)特殊功能寄存器控制,這3個(gè)寄存器為I2C控制寄存器I2CON、I2C配置寄存器I2CFG和I2C數據寄存器I2DAT。各寄存器格式和位含義參見(jiàn)本刊第5期第36頁(yè)。 二、I2C總線(xiàn)顯示器件SAA1064 1.引腳功能 SAA1064是I2C總線(xiàn)系統中典型的LED驅動(dòng)控制器件,為雙極型集成電路,有2%26;#215;8位輸出驅動(dòng)接口,可靜態(tài)驅動(dòng)2位或動(dòng)態(tài)驅動(dòng)4位8段LED顯示器。SAA1064的器件地址為0111,其引腳地址端ADR按輸入電平大小將A1A0編為4個(gè)不同的從地址,故在1個(gè)I2C總線(xiàn)系統中最多可以?huà)旖?片SAA1064,實(shí)現16位LED顯示。SAA1064為24腳雙列直插封裝,其引腳排列如圖1所示。 ADR 尋址端,SAA1064通過(guò)對該腳輸入不同的模擬電壓,以確定其不同的地址。SAA1064規定輸入該腳的電壓值為VEE、(3/8)Vcc、(5/8)Vcc及Vcc時(shí),分別對應十六地地址70H、72H、74H、76H(寫(xiě)操作)或71H、73H、75H、77H(讀操作)。 CEXT 時(shí)鐘振蕩器的外接電容,典型值為2.7nF。 P1~P8 段驅動(dòng)輸出端口1。P1為最低位,P8為最高位。 P9~P16 段驅動(dòng)輸出端口2。P9為最低位,P16為最高位。 MX1、MX2 動(dòng)態(tài)顯示方式時(shí)的公共極驅動(dòng)信號輸出端,用以切換兩對數碼管輪流顯示。 SDA、SCL I2C總線(xiàn)的數據線(xiàn)和時(shí)鐘線(xiàn)。 2.數據操作格式 SAA1064除了與LED驅動(dòng)控制相關(guān)的寫(xiě)操作外,還有能反映系統上電標志的讀操作。SAA1064的讀操作狀態(tài)字節的讀出操作,其狀態(tài)字節僅最高位有意義,定義為PR。上電后PR為"1",在對其進(jìn)行讀狀態(tài)字節操作后清零。因此,PR=1表示從上次讀狀態(tài)后出現過(guò)掉電和加電。利用這一功能,在系統中可作為冷熱啟動(dòng)標志。 (1)數據的輸入操作 SAA1064的顯示驅動(dòng)控制只需要I2C總線(xiàn)對其進(jìn)行寫(xiě)入操作,即按照子地址(SUBADR)寫(xiě)入控制命令字節及顯示器的段碼數據即可,其數據操作格式如下: S SLAW A SUBADR A COM A data1 A data2 A data3 A data4 A P SLAW為SAA1064的地址。 SUBADR為SAA1064片內地址單元首址。 COM為SAA1064的控制命令。 data1~data4為動(dòng)態(tài)顯示方式的4個(gè)LED顯示器的共陰極段選碼。 (2)子地址單元 SAA1064片內有5個(gè)地址單元,占用了3位地址位(SC、SB、SA),分別用于裝入控制字節和4個(gè)顯示段碼,具體地址分配如表1所列。由于SAA1064寫(xiě)操作具有地址自動(dòng)加1功能,故在數據操作格式的寫(xiě)入順序中,SUBADR應為00H。 0 0 0 0 SA SB SC 單元地址 功 能 0 0 0 0 0 0 0 00H 控制寄存器 0 0 1 01H 數字位1 0 1 0 02H 數字位2 0 1 1 03H 數字位3 1 0 0 04H 數字位4 1 0 1 05H 保留不用 1 1 0 06H 保留不用 1 1 1 07H 保留不用 (3)控制命令COM格式 SAA1064具有較強的控制功能,能實(shí)現亮度控制,顯示器測試,動(dòng)、靜態(tài)及位亮、暗顯示。這些控制命令集中設置在控制寄存器中?刂泼睿–OM)格式如下: - C6 C5 C4 C3 C2 C1 C0 C0 動(dòng)態(tài)、靜態(tài)顯示選擇,C0=1動(dòng)態(tài)顯示。 C1 數碼管1、3亮滅選擇,C1=1選擇亮。 C2 數碼管2、4亮滅選擇,C2=1選擇亮。 C3 測試位,C3=1時(shí)所有段點(diǎn)亮,正常工作時(shí)該位為0。 C4、C5、C6 輸出電流控制位,為1時(shí)分別對應3mA、6mA、12mA。皆為1時(shí)輸出電流最大為21mA。 三、顯示電路實(shí)例 圖2是P87LPC764與SAA1064的接口電路實(shí)例。P87LPC764單片機采用6MHz的內部RC振蕩器,訪(fǎng)問(wèn)4片SAA1064,驅動(dòng)16只數碼管顯示,每片SAA1064的接線(xiàn)如圖2所示。 該應用電路是一個(gè)單主的I2C總線(xiàn)系統,不會(huì )出現總線(xiàn)競爭問(wèn)題,而且數據傳送操作只有主發(fā)送方式,因此,在編程過(guò)程中沒(méi)有檢測總線(xiàn)錯誤。在數據發(fā)送過(guò)程中,每發(fā)送1個(gè)字節,都檢測應答信號,如無(wú)應答信號,建立標志位F0,程序重新開(kāi)始發(fā)送數據。 以下是該I2C總線(xiàn)顯示電路的程序清單,顯示緩沖區為30H到3FH單元。 START:MOV R0,#30H ;顯示緩沖區首地址 MOV R1,#17H ;SAA1064控制碼 MOV R2,#70H ;SAA1064(1)的地址 MOV R3,#04H ;4片SAA1064 LOOP:ACALL DISP JB F0,START ;無(wú)應答信號重新開(kāi)始 INC R2 ; INC R2 ; DJNZ R3,LOOP ; ┆ 以下是顯示子程序 DISP:CLR F0 ;清除無(wú)應答標志 MOV I2CFG,#30H ;請求成為I2C總線(xiàn)主機 JNB MASTER,$ ;等待成為I2C總線(xiàn)主機 MOV I2CON,#1CH ;清除起動(dòng)條件 MOV A,R2 ;取從設備地址 ACALL SEND ;發(fā)送從設備地址 JB F0,DISP2 ;無(wú)應答信號轉移 MOV A,#0 ;SAA1064子地址 ACALL SEND ;發(fā)送子地址 JB F0,DISP2 ;無(wú)應答信號轉移 MOV A,R1 ;取SAA1064控制碼 ACALL SEND ;發(fā)送控制碼 JB F0,DISP2 ;無(wú)應答信號轉移 MOV R4,#04H ;四只數碼管 DISP1:MOV A,@R0 ;取字形代碼 ACALL SEND ;發(fā)送字形代碼 JB F0,DISP2 ;無(wú)應答信號轉移 INC R0 ;修正顯示單元地址 DJNZ R4,DISP1 ; DISP2:ACALL SSTP ;發(fā)送停止位 RET ; ;發(fā)送1個(gè)字節 SEND:MOV R4,#8H ;設置數據格式為8位 SENDB:MOV I2DAT,A ;發(fā)送數據位 RL A ;取下一個(gè)數據位 JNB DRDY,$ ;等待數據準備好 DJNZ R4,SENDB ; MOV I2CON,#0A0H ;轉換為接收模式 JNB ATN,$ ;等待應答信號 JNB RDAT,SENDE ;是應答位嗎? SETB F0 ;建立無(wú)應答信號標志 SENDE:RET ; ;發(fā)送停止位 SSTP:CLR MASTRQ ;取消主機位置 MOV I2CON,#21H ;產(chǎn)生總線(xiàn)停止條件 JNB ATN,$ ;等待 MOV I2CON,#20H ;清除數據準備好標志 JNB ATN,$ ;等待發(fā)送停止條件 MOV I2C0N,#91H ;釋放I2C總線(xiàn) CLR TIRUN ;停止定時(shí)器I的運行 RET |