📄 asm.s43
字号:
#include "msp430x22x4.h"
;此程序是USCIB0的I2C模式主机程序
;首先按下图连接好导线,在启动主机程序前先启动从机程序
;然后再启动主机程序,主机连续发送100个数据,当发完后在最后一个字节后加入停止位
; /|\ /|\
; MSP430x22x4 10k 10k MSP430x22x4
; slave | | master
; ----------------- | | -----------------
; -|XIN P3.1/UCB0SDA|<-|---+->|P3.1/UCB0SDA XIN|-
; 32kHz | | | | | 32kHz
; -|XOUT | | | XOUT|-
; | P3.2/UCB0SCL|<-+----->|P3.2/UCB0SCL |
; | | | |
NAME main
PUBLIC main
;-----------------------------------------------------------------------------
; MSP430F22x中断向量表
;-----------------------------------------------------------------------------
ORG 0FFFEh
DC16 main
ORG 0FFECh
DC16 i2c_tx_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.B #00h,R8 ;R8中存放所要发送的数据
BIS.B #BIT0,&P1DIR ;LED能使
BIS.B #BIT1+BIT2,&P3SEL ;p3.1为UCB0SDA,P3.2为UCB0SCL
BIS.B #UCSSEL1,&UCB0CTL1 ;时钟源选择smclk
MOV.B #00h,&UCB0BR1 ;SMCLK/11
MOV.B #11,&UCB0BR0
BIS.B #UCMST+UCSYNC+UCMODE1+UCMODE0,&UCB0CTL0;选择I2C主机模式
MOV.W #88,&UCB0I2CSA ;设定从机地址为88
BIC.B #UCSWRST,&UCB0CTL1 ;进入I2C工作模式
BIS.B #UCB0TXIE,&IE2 ;使能UCB0TX发送中断
BIS.B #UCTR+UCTXSTT,&UCB0CTL1 ;发送起始位,并将主机设为发送模式
BIS.B #LPM0+GIE,SR ;进入低功耗0
loop BIT.B #UCTXSTP,UCB0CTL1 ;等待停止位发送完毕
JZ loop
mainloop
JMP mainloop
;------------------------------------------------------------------------------
i2c_tx_isr
;------------------------------------------------------------------------------
CMP.B #100,R8 ;100个数据是否发送完
JNZ next1
NOP ;用于调试,当程序执行到此处时,来停止从机程序来查看数据接收情况
BIS.B #UCTXSTP,&UCB0CTL1 ;发送stop位
BIC.B #UCB0TXIFG,&IFG2 ;清发送中断标志位
BIC.B #LPM0,0(SP) ;退出低功耗0
JMP end_i2c_tx_isr
next1 MOV.B R8,&UCB0TXBUF ;将待发数据放入发送缓存寄存器中
INC.B R8 ;发送数据增1
end_i2c_tx_isr
RETI ;中断返回
END main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -