?? test24c256.s43
字號:
;IIC器件的測試程序
;使用器件為24C01
;硬件連接為P4.2,P4.7
#include "msp430x13x.h"
RXTXI2C equ 202h
DataConv equ 203h
ADDRI2C1 equ 204h
ADDRI2C0 EQU 205H
DATAI2C equ 206h
BITI2C equ 207h
ScndBlck equ 208h
STARPAGEI2C EQU 220H
Pagecount EQU 20AH
#define BitCnt R5
SDA equ 004h
SCL equ 080h
Code equ 0A0h
Bitime_5 equ 0064
Bitime equ 0128
Delta equ 150
RXD set 004h
TXD set 002h
LF equ 0ah
CR equ 0dh
R_I2C EQU 210H
ORG 0F000h ;
RESET mov.w #300h,SP
MAIN MOV.B r7, ADDRI2C0 ;要寫入的器件內部地址
MOV.B r6, ADDRI2C1
MOV.B r8, DATAI2C ;要寫入的具體數據
CALL #Write_I2C ;
MOV #01FFFH,R15
DLY0 DEC R15
JNZ DLY0 ;延時,等待寫周期的結束
MOV.B r7,ADDRI2C0
MOV.B r6, ADDRI2C1
CALL #Read_I2C ;讀出剛寫入的數據
mov.b R_I2C,r9
JMP MAIN
I2CDLY NOP ;延時
NOP
NOP
NOP
NOP
NOP
RET
Wrpage_I2C mov.b #Code,RXTXI2C ; 頁寫
add.b #0,RXTXI2C ;
call #I2C_Start
mov.b ADDRI2C1,RXTXI2C
call #I2C_TX
mov.b ADDRI2C0,RXTXI2C
call #I2C_TX
mov.b #64,Pagecount
mov.b #0,r15
Wrpage mov.b STARPAGEI2C(R15),RXTXI2C
call #I2C_TX
INC R15
DEC.B Pagecount
jnz Wrpage
call #I2C_Stop
ret
Read_I2C mov.b #Code,RXTXI2C ; 在具體的IIC器件中讀某一個地址的數據
add.b #0,RXTXI2C ;
call #I2C_Start
mov.b ADDRI2C1,RXTXI2C
call #I2C_TX
mov.b ADDRI2C0,RXTXI2C
call #I2C_TX
mov.b #Code,RXTXI2C
add.b #1,RXTXI2C
bis.b #01h,RXTXI2C
call #I2C_Start
call #I2C_Read
call #I2C_Stop
ret
;-------------------------------------------------------------------------------
I2C_Start bic.b #SCL+SDA,&P4DIR ; 啟動總線
bis.b #SDA,&P4DIR
bis.b #SCL,&P4DIR
CALL #I2CDLY
;-------------------------------------------------------------------------------
I2C_TX mov.b #08,BITI2C ; 向總線發送一個字節的數據
I2C_Send rla.b RXTXI2C
jc I2C_Send1
I2C_Send0 bis.b #SDA,&P4DIR
jmp I2C_Sx
I2C_Send1 bic.b #SDA,&P4DIR
I2C_Sx bic.b #SCL,&P4DIR
nop
CALL #I2CDLY
nop
bis.b #SCL,&P4DIR
dec.b BITI2C
jnz I2C_Send
bic.b #SDA,&P4DIR
;-------------------------------------------------------------------------------
I2C_Ackn bic.b #SCL,&P4DIR ; 應答信號
nop
CALL #I2CDLY
nop
bis.b #SCL,&P4DIR
ret
;-------------------------------------------------------------------------------
I2C_Read mov.b #08,BITI2C ;從總線讀一個字節數據
I2C_RX bic.b #SCL,&P4DIR
bit.b #SDA,&P4IN
rlc.b R_I2C
bis.b #SCL,&P4DIR
dec.b BITI2C
CALL #I2CDLY
jnz I2C_RX
jmp I2C_Ackn
;-------------------------------------------------------------------------------
I2C_Stop bis.b #SDA,&P4DIR ;停止總線
bic.b #SCL,&P4DIR
bic.b #SDA,&P4DIR
I2C_End ret
;-------------------------------------------------------------------------------
Write_I2C mov.b #Code,RXTXI2C ; 向某一個IIC器件的某一地址寫入具體的數據
add.b #0,RXTXI2C
call #I2C_Start
mov.b ADDRI2C1,RXTXI2C ; 高地址
call #I2C_TX
mov.b ADDRI2C0,RXTXI2C ; 低地址
call #I2C_TX
mov.b DATAI2C,RXTXI2C ; 數據
call #I2C_TX
call #I2C_Stop
ret
ORG 0FFFEh
DW RESET
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -