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

📄 example_slave430interface.s43

📁 430单片机串行通信i2c和uart代码
💻 S43
字号:
;******************************************************************************
;  MSP430F20xx Demo - I2C Slave Transmitter and Receiver
;
;  Description: MSP430 I2C Slave communicates with MSP430 I2C Master using
;  the USI module. 
;  The slave device receives 16 bytes of data from the master device and  
;  transmits it back. LED turns on when start condition is detected. Received
;  data can be viewed in flash at location 0x1000.
;  
;  ACLK = n/a, MCLK = SMCLK = Calibrated 1MHz
;
;  ***THIS IS THE SLAVE CODE***
;
;                  Slave                      Master
;                                      (example_master430interface.s43)
;               MSP430F20x2/3              MSP430F20x2/3
;             -----------------          -----------------
;         /|\|              XIN|-    /|\|              XIN|-
;          | |                 |      | |                 |
;          --|RST          XOUT|-     --|RST          XOUT|-
;            |                 |        |                 |
;      LED <-|P1.0             |        |                 |
;            |                 |        |             P1.0|-> LED
;            |         SDA/P1.7|------->|P1.7/SDA         |
;            |         SCL/P1.6|<-------|P1.6/SCL         |
;
;  Note: Internal pull-ups are used in this example for SDA & SCL
;
;  P. Thanigai
;  Texas Instruments Inc.
;  August 2007
;  Built with IAR Embedded Workbench Version: 3.41A
;******************************************************************************
#include  <msp430x20x2.h>
EXTERN    TI_USI_I2C_SlaveInit

            RSEG   DATA16_N
RxFlashPtr    DS      2            
TxFlashPtr    DS      2            

;-------------------------------------------------------------------------------
            RSEG    CSTACK                  ; Define stack segment
;-------------------------------------------------------------------------------
            RSEG    CODE                    ; Assemble to Flash memory
            EVEN
;-------------------------------------------------------------------------------
RESET       mov.w   #SFE(CSTACK),SP         ; Initialize stackpointer
StopWDT     mov.w   #WDTPW+WDTHOLD,&WDTCTL  ; Stop WDT
SetupDCO    mov.b   &CALBC1_1MHZ,&BCSCTL1   ; Load DCO calibration constants  
            mov.b   &CALDCO_1MHZ,&DCOCTL  
SetupPx     bis.b   #0x03,&P1DIR            ; P1.0 and 1.1 as output
            clr.b   &P1OUT
EraseFlash  mov.w   #FWKEY+ERASE,&FCTL1     ; Set erase bit
            mov.w   #FWKEY+FSSEL_2+FN0,&FCTL2 ; Set flash timing
            mov.w   #FWKEY,&FCTL3           ; Clear lock bit
            mov.w   #0,&0x1000              ; Dummy write to start Flash erase
            mov.w   #FWKEY,&FCTL1
            mov.w   #FWKEY+LOCK,&FCTL3
            mov.w   #0x1000,&RxFlashPtr     ; Initialize Rx pointer
            mov.w   #0x1000,&TxFlashPtr     ; Initialize Tx pointer
SlaveCall    
            mov.b   #0x48,R12               ; Address of slave
            mov.w   #StartCallback,R14      ; StartCallback fn. ptr
            push.w  #TxCallback             ; Tx Callback fn. ptr
            push.w  #RxCallback             ; Rx Callback fn. ptr
            call    #TI_USI_I2C_SlaveInit   ; I2C Slave initialize
            add     #4,SP                   ; compensate stack pointer
            bis.w   #LPM4+GIE,SR            ; enter LPM, enable interrupts
            jmp     $
StartCallback
            bis.b   #0x01,&P1OUT            ; start received, LED on
            ret
TxCallback 
            mov.w   &TxFlashPtr,R6          ; pass data to be transmitted ...
            mov.b   @R6,0(R12)              ; ... to the library
            inc.w   &TxFlashPtr             ; increment tx pointer
            mov.w   #0,R12                  ; stay in LPM
            ret
RxCallback
            mov.w   #FWKEY+WRT,&FCTL1       ; Set WRT bit
            mov.w   #FWKEY,&FCTL3           ; Clear lock bit
            mov.w   &RxFlashPtr,R6          ; Move rxed byte to ...
            mov.b   R12,0(R6)               ; ... flash location
            mov.w   #FWKEY,&FCTL1           
            mov.w   #FWKEY+LOCK,&FCTL3      ; lock flash
            inc.w   &RxFlashPtr
            mov.w   #0,R12                  ; stay in LPM
            ret

;-------------------------------------------------------------------------------
            COMMON  INTVEC                  ; Interrupt Vectors
;-------------------------------------------------------------------------------
            ORG     RESET_VECTOR            ; POR, ext. Reset
            DW      RESET                
            END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -