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

📄 asm.s43

📁 MSP430F22X单片机开发套件源代码
💻 S43
字号:
#include "msp430x22x4.h"
;此程序是USCIB0的I2C模式从机程序
;首先按下图连接好导线,在启动主机程序前先启动从机程序
;然后再启动主机程序,从机程序将每次收到的数据以中断的方式存入0400开始的ram中
;当主机发满100的数据时,在最后一位后面加入停止位,从机接收到停止位时,进入相应中断,
;并在中断服务中,设置sp,来使主程序退出低功耗
;                                 /|\  /|\
;                MSP430x22x4     10k  10k    MSP430x22x4
;                    slave         |    |        master
;              -----------------   |    |  -----------------
;            -|XIN  P3.1/UCB0SDA|<-|---+->|P3.1/UCB0SDA  XIN|-
;       32kHz |                 |  |      |                 | 32kHz
;            -|XOUT             |  |      |             XOUT|-
;             |     P3.2/UCB0SCL|<-+----->|P3.2/UCB0SCL     |
;             |                 |         |                 |
MEMPTR  EQU     0400h                         ;定义接收数据存放的起始地址
        NAME    main
        
        PUBLIC  main
;----------------------------------------------------------------------------- 
;       MSP430F22x中断向量表        
;-----------------------------------------------------------------------------      
        ORG     0FFFEh
        DC16    main
        ORG     0FFEEh
        DC16    i2c_stt_stp                   
        ORG     0FFECh
        DC16    i2c_rx_isr	
;------------------------------------------------------------------------------ 
        RSEG    CODE                          ;程序开始
;------------------------------------------------------------------------------ 
main    MOV.W   #0600H,SP                     ;设置堆栈指针
stopWDT MOV.W	#WDTPW+WDTHOLD,&WDTCTL        ;关看门狗
	MOV.B	&CALBC1_1MHZ,&BCSCTL1         ;设定DCO为1MHZ
	MOV.B	&CALDCO_1MHZ,&DCOCTL        
        MOV.W   #MEMPTR,R6                    ;将MEMPTR值放入R6          
        BIS.B   #BIT0,&P1DIR                  ;LED使能          
        BIS.B   #BIT1+BIT2,&P3SEL             ;p3.1为UCB0SDA,P3.2为UCB0SCL         
        MOV.B   #UCSYNC+UCMODE_3,&UCB0CTL0    ;UCB0为I2C从机模式
        MOV.W   #88,&UCB0I2COA                ;设定本机从机地址位88
        BIC.B   #UCSWRST,&UCB0CTL1            ;进入I2C工作模式
        BIS.B   #UCSTPIE+UCSTTIE,&UCB0I2CIE   ;开始位和停止位中断使能
        BIS.B   #UCB0RXIE,&IE2                ;使能I2C接收中断
        BIS.B   #LPM0+GIE,SR                  ;进入低功耗0        
        NOP
mainloop
        JMP     mainloop
;------------------------------------------------------------------------------ 
i2c_rx_isr;UCB0I2C接收中断服务程序
;------------------------------------------------------------------------------
        MOV.B   &UCB0RXBUF,0(R6)              ;将接收数据存入R6所指向的地址
        INC.W   R6
        RETI 
;------------------------------------------------------------------------------ 
i2c_stt_stp;数据开始,停止位标志中断服务
;------------------------------------------------------------------------------  
        BIT.B   #UCSTPIFG,UCB0STAT           ;查询中断是否来自停止位
        JZ      next1 
        BIC.B   #LPM0,0(SP)                  ;如果接收到停止位就退出低功耗
next1   BIC.B   #UCSTPIFG+UCSTTIFG,&UCB0STAT ;清中断标志位        
        RETI
        END     main

⌨️ 快捷键说明

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