?? hi2csla_asm.inc
字號:
;從方式的LPC932A1硬件I2C
; 1 使用I2C總線軟件包時P1.2,P1.3切勿寫為0,并要設置為開漏輸出。
; 2 總線定義為P1.2=SCL,P1.3=SDA,需外接上拉電阻2-10k。
; 3 相應寄存器:
; 地址寄存器 I2ADR 用于存放自身從地址(從方式時才有用)
; 數據寄存器 I2DAT 接收/發送數據用
; 控制寄存器 I2CON 用于硬件I2C的設置、使能、啟動、結束,
; 應答控制,中斷標志等。
; 狀態寄存器 I2STAT 指示I2C總線的操作狀態碼,高5位有效,
; 若I2C中斷志置位,可查詢此寄存器判斷
; 總線情況。
; SCL占空比寄存器 I2SCLH、I2SCLL 設置SCL的頻率發生。
; 設置最好與主機的SCL頻率基本一至。
;使用:使用前要先開中斷:總中斷EA和I2C中斷允許EI2C,其中斷入口地址為33H;
; 在中斷里進行接收或發送數據操作,調用操作如下:
; 若是從接收,則循環調用RcvByte接收字節數據,直至總線結束/重啟;
; 若是從發送,則循環調用SendByte發送數據,直至接收到非應答信號;
;為了防止從器件因總線出錯而死機,可用定時器實現超時處理。
;接收字節函數
;功能:讀取總線傳來的字節數據并發送應答位,正常接收ACK返回1,接
; 收到總線結束信號或重新啟動總線信號時ACK返回0.
;出口參數:ACC 讀入的數據
RCVBYTE:
MOV I2CON,#44H ;清除標志位
JNB SI,$ ;放開總線,等待接收
MOV A,I2STAT
CJNE A,#0A0H,RCV_L1 ;不是結束總線狀態則跳轉
ENDRCV: MOV I2CON,#44H ;放開總線
CLR ACK ;復位標志位,表明總線結束
RET
RCV_L1: MOV A,I2DAT ;取字節數據
SETB ACK ;設置ACK位
RET
;發送數據
;功能:向總線發送數據ACC,當接收到非應答位時ACK=0,否則ACK=1
;入口參數:ACC 要發送到總線上的數據
SENDBYTE:
PUSH ACC ;暫時保護ACC
MOV A,I2STAT
CJNE A,#0C0H,SEND_L1 ;判斷上次發送數據時是否返回非應答位
ENDSEND:POP ACC ;接收到非應答信號,退出發送
MOV I2CON,#44H
CLR ACK
RET
SEND_L1:POP ACC
MOV I2DAT,A ;發送數據
MOV I2CON,#44H ;釋放總線
JNB SI,$ ;等待字節數據發送完成
SETB ACK
RET
;設置總線函數(設置為從機)
;功能:用于設置I2C控制寄存器,包括總線時鐘選擇及從地址.不接受廣播地址。
;入口參數:ACC 從地址
SETBUS:
ANL A,#0FEH ;設置從地址不接收廣播地址
MOV I2ADR,A
MOV I2CON,#44H ;啟動硬件I2C
MOV I2SCLH,#15 ;位速率 = Fpclk / ( 2 x (I2SCLH + I2SCLL) )
MOV I2SCLL,#15
RET
;使用時要定義LPC932A1的I2C相關寄存器的定義
;I2ADR DATA 0DBH
;I2DAT DATA 0DAH
;I2CON DATA 0D8H
;I2STAT DATA 0D9H
;I2SCLH DATA 0DDH
;I2SCLL DATA 0DCH
;SI BIT I2CON.3
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -