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

📄 lab-08-2013.s43

📁 MSP430F2013是TI的U盘开发工具对I2c进行读写的完整工程源程序包
💻 S43
字号:
//******************************************************************************
//  MSP430F20xx Demo - I2C Master Receiver, single byte
//
//  Description: I2C Master communicates with I2C Slave using
//  the USI. Slave data should increment from 0x00 with each transmitted byte
//  which is verified by the Master.
//  LED off for address or data Ack; LED on for address or data NAck.
//  ACLK = n/a, MCLK = SMCLK = Calibrated 1MHz
//
//  ***THIS IS THE MASTER CODE***
//
//                  Slave                      Master
//          (msp430x20x3_usi_09.c)
//               MSP430F20x2/3              MSP430F20x2/3
//             -----------------          -----------------
//         /|\|              XIN|-    /|\|              XIN|-
//          | |                 |      | |                 |
//          --|RST          XOUT|-     --|RST          XOUT|-
//            |                 |        |                 |
//      LED <-|P1.0             |        |                 |
//            |                 |        |             P1.0|-> LED
//            |         SDA/P1.7|------->|P1.6/SDA         |
//            |         SCL/P1.6|<-------|P1.7/SCL         |
//
//  Note: internal pull-ups are used in this example for SDA & SCL
//
//  Z. Albus
//  Texas Instruments Inc.
//  May 2006
//  Built with IAR Embedded Workbench Version: 3.41A
//******************************************************************************
#include "msp430x20x3.h"

ORG     250
SLV_Data   DW  0
ORG     260
SLV_Addr   DW  0
ORG     270
I2C_State  DW  0
;-----------------------------------------------------------------------------
            ORG     0F800h                  ;  
;-----------------------------------------------------------------------------
RESET       MOV.W   #0280h,SP               ; 初始化堆栈
StopWDT     MOV.W   #WDTPW+WDTHOLD,&WDTCTL  ; 关看门狗
;-------------------------------------------------------------------------------
setDCO      MOV.B   &CALBC1_8MHZ,&BCSCTL1   ; 设置DCO 8MHZ
            MOV.B   &CALDCO_8MHZ,&DCOCTL
;-------------------------------------------------------------------------------           
setIO       MOV.B   #0XC0,&P1OUT            ; 设置P1.6、P1.7  
            BIS.B   #0XC0,&P1REN            ; 接内部上拉电阻
            MOV.B   #0XFF,&P1DIR            ; 输出方向
            CLR.B   &P2OUT                  ; 输出
            MOV.B   #0XFF,&P2DIR            ; 输出方向
;-------------------------------------------------------------------------------
setI2C      MOV.B   #0XC1,&USICTL0          ; 置P1.6、P1.7 I2C模式
            MOV.B   #0X70,&USICTL1          ; 使能I2C 模式 ,开中断 
            MOV.B   #0X2,&USICKCTL          ; 设置时钟极性
            BIS.B   #0X20,&USICNT           ;
            BIC.B   #0X1,&USICTL0           ; 使能 USI
            BIC.B   #0X1,&USICTL1           ; 清标志位  
            EINT
;-------------------------------------------------------------------------------
mainloop    BIS.W   #0X10,SR                ; 进入低功耗 LPM0
            NOP     
            JMP     mainloop                ; 循环
;-------------------------------------------------------------------------------
USI_TRX:
;-------------------------------------------------------------------------------
            PUSH.W  R14                     ;
            BIT.B   #0X2,&USICTL1           ; 发送数据开始 ?
            JNC     state                   ; 
            BIS.B   #0X1,&P1OUT             ; LED 亮
            MOV.W   #0X2,&I2C_State         ; 发送数据
 
state       ADD.W   &I2C_State,PC           ;       
            JMP     State_0                 ;
            JMP     State_2                 ;
            JMP     State_4                 ;
            JMP     State_6                 ;
            JMP     State_8                 ;
            JMP     State_10                ;
            JMP     State_12                ;

State_0     JMP     HOME                    ;

State_2     MOV.B   &USICNT,R14             ; 8位 数据  RX 地址
            AND.B   #0XE0,R14               ;
            AND.B   #0X8,R14                ;
            MOV.B   R14,&USICNT             ;
            BIC.B   #0X2,&USICTL1           ; 清开始标志
            MOV.W    #0X4,&I2C_State        ; 检查地址
            JMP      HOME                   ;

State_4    BIT.B    #0X1,&USISRL            ;  
           JNC      A1                      ;
           INC.B    &SLV_Addr               ; 
A1         BIS.B    #0X2,&USICTL0           ; SDA 输出
           CMP.B    &SLV_Addr,&USISRL       ; 地址匹配 ?
           JNE      receive                 ;
           CLR.B    &USISRL                 ; 发送正确命令
           BIC.B    #0X1,&P1OUT             ;
           MOV.W    #0X8,&I2C_State         ;
           JMP      A2                      ;
receive    MOV.B    #0XFF,&USISRL           ; 发送错误命令
           BIS.B    #0X1,&P1OUT             ;
           MOV.W    #0X6,&I2C_State         ;
A2         BIS.B    #0X1,&USICNT            ;
           JMP      HOME                    ;

State_6    BIC.B    #0X2,&USICTL0           ; SDA 输入
           MOV.B    #0X90,&SLV_Addr         ; 复位从机地址
           CLR.W    &I2C_State              ;
           JMP      HOME                    ;

State_8    BIS.B    #0X2,&USICTL0           ; 
           MOV.B    &SLV_Addr,&USISRL       ;
           BIS.B    #0X8,&USICNT            ;
           MOV.W    #0XA,&I2C_State         ; 发送数据
           JMP      HOME                    ;

State_10   BIC.B    #0X2,&USICTL0           ; SDA 输入
           BIS.B    #0X1,&USICNT            ; 接收命令
           MOV.W    #0XC,&I2C_State         ;
           JMP      HOME                    ;
           
State_12   BIT.B    #0X1,&USISRL            ; 检查地址
           JNC      A3                      ;
           BIC.B    #0X1,&P1OUT             ;
           JMP      A4                      ;
A3         BIC.B    #0X1,&P1OUT             ;
A4         INC.B    &SLV_Data               ; 如果收到命令
           BIC.B    #0X2,&USICTL0           ;
           MOV.B    #0X90,&SLV_Addr         ; 复位从机地址
           CLR.W    &I2C_State              ; 状态复位

HOME       BIC.B    #0x1,&USICTL1           ; 清标志位
           pop.w    R14                     ;
           RETI                             ;
           

;------------------------------------------------------------------------------
;           中断向量
;------------------------------------------------------------------------------
            ORG     0FFFEh                  ; MSP430 复位向量
            DW      RESET                   ;
            ORG     USI_VECTOR              ; USICNT 中断向量
            DW      USI_TRX                 ;
            END






















⌨️ 快捷键说明

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