📄 asm.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 + -