基于MSP430單片機的虛擬I2C總線軟件包VIIC_M1.0
圖一 | 圖二 |
三、應用界面
1、發(fā)送N字節(jié)數(shù)據(jù)——從當前地址開始
;發(fā)送的數(shù)據(jù)在MTD中
;
;數(shù)列格式:S,SLA+W,subaddr_H,A,subaddr_L,A,DATA1,A,DATA2,A...,DATAn,A,P
;MOV.b #CODE,SLA;I2C_R_R/W=0;A0=A1=A2=0
MOV.b #N,Num_byt;發(fā)送字節(jié)數(shù)
CALL I2C_WR_Nbyte;從當前地址開始寫
2、接收N字節(jié)數(shù)據(jù)——從指定地址開始讀
;接收的數(shù)據(jù)在MRD中
;
;數(shù)列格式:S,SLA+W,A,subaddr_H,A,subaddr_L,A,
S,SLA+R,A,DATA1,A,DATA2,A,...,DATAn,/A,P
MOV.b #CODE+SLAR/W,SLA
;SLAR/W=1,A0=A1=A2=0
MOV.b #N,Num_byt ;接收字節(jié)數(shù)
CALL #I2C_RD_Nbyte ;從當前地址開始讀
3、接收N字節(jié)——從指定地址開始讀
;接收的數(shù)據(jù)存放在MRD中
;
;數(shù)列格式:S,SLA+W,A,subaddr_H,A,subaddr_L,A,
;S,SLA+R,A,DATA1,A,DATA2,A,...,DATAn,/A,P
;
MOV.b #CODE,SLA
;SLAR/W=0:寫,A0=A1=A2=0
MOV.b #N,Num_byt ;接收字節(jié)數(shù)
MOV #Subaddr,I2C_R_Addr ;字節(jié)地址送入暫存單元
CALL #I2C_R_Addr ;發(fā)送字節(jié)地址
MOV.b #CODE+SLAR/W,SLA;SLAR/W=1:讀,A0=A1=A2=0
CALL #I2C_RD_Nbyte
4、發(fā)送N字節(jié)——從指定地址開始寫
;數(shù)列格式:S,SLA+W,A,Subaddr_H,A,subaddr_L,A,DATA1,A,DATA2,A,...,DATAn,A,P
;
MOV.b #CODE,SLA;SLAR/W=0:寫,A0=A1=A2=0
MOV #N,Num_byt ;發(fā)送字節(jié)數(shù)
MOV #Subaddr,I2C_R_Addr ;字節(jié)地址送入暫存單元
CALL #I2C_WR_Addr ;發(fā)送字節(jié)地址
CALL #WR_Nbyte
后記:
1、如果使用MSP430中別的I/O端口,只需要在模擬時序子程序中改動相應的積存器即可。本例中時鐘線使用TP口,是因為它為輸出口,在程序中可以節(jié)省指令。
對于24系列的其他芯片,由于容量不同,請?zhí)貏e注意其字節(jié)地址是1個字節(jié)還是2個字節(jié)。本例的24LC65字節(jié)地址就是2個字節(jié)的。
2、MSP430系列的單片機本人是初學使用,程序雖經(jīng)初步調(diào)試通過,輕易拋出,主意在為引玉之磚,作為學習的一點體會。缺點和錯誤在所難免,望各位不吝指教。
評論