📄 msp430f149i2c.s43
字号:
RET
;------------------------------------------------------------------------------
;向S35390A写一个字节控制码(写的顺序B7->B0)包括:地址和命令
WRITEBYTE
WR0
MOV #WDT_ARST_1000,&WDTCTL ;复位看门狗,时间为1S by fACLK
MOV #80H,R5
WR1
BIT R5,ETEMP ;Bit -> carry
JNZ WR3 ;IF BIT IS HIGH,goto WR3
WR2
CALL #SENDZERO ;SEND "0"
JMP WR4
WR3
CALL #SENDONE ;SEND "1"
WR4
CLRC
RRC R5 ;Next address bit
CMP #000h,R5 ;Address sent over?
JNZ WR1 ;No, continue,goto II4
CALL #RXACK ;read ACK bit
RET
;向S35390A写一个字节数据(写的顺序B0->B7),如:年,月,日,星期,小时,分钟,秒
WRITEDATA
WD0
MOV #WDT_ARST_1000,&WDTCTL ;复位看门狗,时间为1S by fACLK
MOV #001H,R5
WD1
BIT R5,ETEMP ;Bit -> carry
JNZ WD3 ;IF BIT IS HIGH,goto WR3
WD2
CALL #SENDZERO ;SEND "0"
JMP WD4
WD3
CALL #SENDONE ;SEND "1"
WD4
CLRC
RLC R5 ;Next address bit
CMP.B #000h,R5 ;Address sent over?
JNZ WD1 ;No, continue,goto II4
CALL #RXACK ;read ACK bit
RET
;从S35390A读一个字节数据
READBYTE
MOV #WDT_ARST_1000,&WDTCTL ;复位看门狗,时间为1S by fACLK
CLR.B ETEMP
CLRC
MOV #8H,R5
RDBYTELOOP
CALL #RXACK ;Read one bit
//RLC.B ETEMP ;transt bit to ETEMP
RRC.B ETEMP
DEC R5 ;Bit SUB 1 for count
JNZ RDBYTELOOP ;Is 8bit read over?No,goto RYBYT1
//CALL #TXACK ;Send ACK sign to ADS1110:read 8bit data over
RET
;I2C通讯开始条件
I2CSTART
MOV #WDT_ARST_1000,&WDTCTL ;复位看门狗,时间为1S by fACLK
//BIS.B #SDA,&SDA_OUT ;SDA IS HIGH
BIS.B #SCL,&SCL_OUT ;SCL IS HIGH
NOP
NOP
//BIS.B #SCL,&SCL_OUT ;SCL IS HIGH
BIS.B #SDA,&SDA_OUT ;SDA IS HIGH
NOP
NOP
BIC.B #SDA,&SDA_OUT ;SDA IS LOW
NOP
NOP
BIC.B #SCL,&SCL_OUT ;SCL IS LOW//////?
NOP
NOP ///////?
RET
;I2C通讯停止条件
I2CSTOP
MOV #WDT_ARST_1000,&WDTCTL ;复位看门狗,时间为1S by fACLK
BIC.B #SDA,&SDA_OUT ;SDA IS LOW
NOP
NOP
BIS.B #SCL,&SCL_OUT ;SCL IS HIGH
NOP
NOP
BIS.B #SDA,&SDA_OUT ;SDA IS HIGH
NOP
NOP
//BIC.B #SCL,&SCL_OUT ;SCL IS LOW//////?
//NOP
//NOP //////?
RET
;发送一个“1”
SENDONE
MOV #WDT_ARST_1000,&WDTCTL ;复位看门狗,时间为1S by fACLK
BIS.B #SDA,&SDA_OUT ;SDA IS HIGH
NOP
NOP
BIS.B #SCL,&SCL_OUT ;SCL IS HIGH
NOP
NOP
BIC.B #SCL,&SDA_OUT ;SCL IS LOW
NOP
NOP
RET
;发送一个“0”
SENDZERO
MOV #WDT_ARST_1000,&WDTCTL ;复位看门狗,时间为1S by fACLK
BIC.B #SDA,&SDA_OUT ;SDA IS LOW
NOP
NOP
BIS.B #SCL,&SCL_OUT ;SCL IS HIGH
NOP
NOP
BIC.B #SCL,&SDA_OUT ;SCL IS LOW
NOP
NOP
RET
;CPU接受ACK信号
RXACK
MOV #WDT_ARST_1000,&WDTCTL ;复位看门狗,时间为1S by fACLK
BIC.B #SDA,&SDA_DIR ;SDA is input
NOP
NOP
BIS.B #SCL,&SCL_OUT ;SCL is high
NOP
NOP
BIT.B #SDA,&SDA_IN ;READ SDA
NOP
NOP
BIC.B #SCL,&SCL_OUT ;SCL IS LOW
NOP
NOP
BIS.B #SDA,&SDA_OUT ;SDA is High
NOP
NOP
BIS.B #SDA,&SDA_DIR ;SDA is output
NOP
NOP
RET
;CPU发送ACK信号
TXACK
MOV #WDT_ARST_1000,&WDTCTL ;复位看门狗,时间为1S by fACLK
BIC.B #SDA,&SDA_OUT ;SDA IS LOW
NOP
NOP
BIS.B #SCL,&SCL_OUT ;SCL IS HIGH
NOP
NOP
BIC.B #SCL,&SDA_OUT ;SCL IS LOW
NOP
NOP
RET
;没有ACK信号
NOTXACK
MOV #WDT_ARST_1000,&WDTCTL ;复位看门狗,时间为1S by fACLK
//BIC.B #SDA,&SDA_OUT ;SDA IS LOW
NOP
NOP
BIS.B #SCL,&SCL_OUT ;SCL IS HIGH
NOP
NOP
BIC.B #SCL,&SDA_OUT ;SCL IS LOW
NOP
NOP
RET
;S35390A程序集完毕***********************************************************************
;延时子程序集****************************************************************************
;延时0.5ms D05MS OK
;功能:DELAY 0.5ms
;使用:R15
;影响:Z
D05MS
PUSH R15
;NEW
MOV #WDT_ARST_1000,&WDTCTL
;NEW END
MOV #175,R15
JMP D5MS1
;延时5ms D5MS OK
;功能:DELAY 5ms
;使用:R15
;影响:Z
D5MS
MOV #WDT_ARST_1000,&WDTCTL ;复位看门狗,时间为1S by fACLK
PUSH R15
MOV #1750,R15
D5MS1
DEC R15
JNZ D5MS1
POP R15
RET
;延时10ms D10MS OK
;功能:DELAY 10ms
;使用:R15
;影响:Z
D10MS
MOV #WDT_ARST_1000,&WDTCTL ;复位看门狗,时间为1S by fACLK
PUSH R15
MOV #3500,R15
JMP D5MS1
;延时30ms D30MS OK
;功能:DELAY 30ms
;使用:R15
;影响:Z
D30MS
MOV #WDT_ARST_1000,&WDTCTL ;复位看门狗,时间为1S by fACLK
PUSH R15
MOV #10500,R15
JMP D5MS1
;延时100ms D100MS OK
;功能:DELAY 100ms
;使用:R15
;影响:Z
D100MS
MOV #WDT_ARST_1000,&WDTCTL ;复位看门狗,时间为1S by fACLK
PUSH R15
MOV #35000,R15
JMP D5MS1
;延时500ms D500MS OK
;功能:DELAY 500ms
;使用:R15
;影响:Z
D500MS
CALL #D100MS
CALL #D100MS
CALL #D100MS
CALL #D100MS
CALL #D100MS
RET
;延时子程序集完毕************************************************************************
;------------------------------------------------------------------------------
; Interrupt Vectors Used MSP430x13x/14x
;------------------------------------------------------------------------------
ORG 0FFFEh ; MSP430 RESET Vector
DW RESET ;
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -