⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msp430f149i2c.s43

📁 以MPS430F149为硬件平台
💻 S43
📖 第 1 页 / 共 2 页
字号:
    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 + -