📄 asm.s43
字号:
#include "msp430x22x4.h"
; MSP430F2274 MSP430F2274
; (1) (2)
; ----------------- -----------------
; /|\| XIN|- -|XIN |/|\
; | | | | | |
; --|RST XOUT|- -|XOUT RST|--
; | | | |
; | P1.0|-->LED LED<--| |
; | p3.4UCA0TXD|------------------->|p3.5UCA0RXD |
; | p3.5UCA0RXD|------------------->|p3.4UCA0TXD |
; | DVSS|--------------------|DVSS |
MEMPTR EQU 0400h ;定义接收数据存放的起始地址
NAME main
PUBLIC main
;-----------------------------------------------------------------------------
; MSP430F22x中断向量表
;-----------------------------------------------------------------------------
ORG 0FFFEh
DC16 main
ORG 0FFEEh
DC16 rx_isr
ORG 0FFECh
DC16 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.W #MEMPTR,R6 ;所到的数据放入RAM的起始地址放到R6
MOV.B #0,R8 ;R8中存放所要发送的数据
wait BIC.B #OFIFG,&IFG1 ;等待晶振稳定
BIT.B #OFIFG,&IFG1
JNZ wait
BIS.B #BIT0,&P1DIR ;点亮LED
BIS.B #BIT0,&P1OUT
BIS.B #BIT4+BIT5,&P3SEL ;p3.4为TX,P3.5为RX
BIS.B #BIT4,&P3DIR ;P3.4为输出方向
;BIS.B #UCLISTEN,&UCA0STAT ;调试时用于自发自收
BIS.B #UCSSEL0,&UCA0CTL1 ;时钟源选择32768晶振
MOV.B #00H,&UCA0BR1 ;设置波特率32768/1200=27.3
MOV.B #27,&UCA0BR0
BIS.B #UCBRS1,&UCA0MCTL ;UCBRSx=INT(0.3*8)=2
BIC.B #UCSWRST,&UCA0CTL1 ;退出USCI设置
BIS.B #UCA0RXIE+UCA0TXIE,&IE2 ;使能收发中断
EINT ;使能总中断
mainloop
BIS.B #LPM3,SR ;进入低功耗3
NOP
;------------------------------------------------------------------------------
rx_isr;
;------------------------------------------------------------------------------
XOR.B #BIT0,P1OUT ;如果作为接收方,每收一帧LED翻转一次
MOV.B &UCA0RXBUF,0(R6) ;将收到的数据放入R6所指向的RAM地址
CMP.W #MEMPTR+0FFh,R6 ;比较是否已经收到了256个数据
JNZ loop3 ;如果接收到的数据不到256个,继续
MOV.W #MEMPTR,R6 ;如果到了256个,R6再次指向初始值
loop3 INC.W R6 ;R6指向下一个地址
RETI ;中断返回
;------------------------------------------------------------------------------
tx_isr;
;------------------------------------------------------------------------------
XOR.B #BIT0,P1OUT ;如果作为接收方,每收一帧LED翻转一次
MOV.W #15000,R5 ;在发送前一段延时,确保对方已经处理完上一帧数据
loop1 DEC.W R5
JNZ loop1
MOV.B R8,&UCA0TXBUF ;将待发数据放入发送缓存寄存器中
INC.B R8 ;发送数据加1
RETI
END main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -