有两个msp430f147进行异步通信。一个发送,一个接收。发送是不断在发65,接收是把65存到buffer区域的一个固定位置(0200)。发现接收到的东西总是不对。。。下面是代码。
发送程序:
#include "msp430.h" ; #define controlled include file
NAME main ; module name
PUBLIC main ; make the main label vissible
; outside this module
ORG 0FFFEh
DC16 init ; set reset vector to 'init' label
RSEG CSTACK ; pre-declaration of segment
RSEG CODE ; place program in 'CODE' segment
init: MOV #SFE(CSTACK), SP ; set up stack
main: NOP ; main program
MOV.W #WDTPW+WDTHOLD,&WDTCTL ; Stop watchdog timer
CALL #UART0_INIT
MOV #65, R4
Tchk: BIT.B #UTXIFG0,&IFG1
JZ Tchk
MOV.B R4,&U0TXBUF
CALL #delay
JMP Tchk
delay: PUSH SR
MOV #00FFh, R5
ww: DEC R5
JNZ ww
POP SR
RET
UART0_INIT:
BIS.B #SWRST, &U0CTL
BIS.B #BIT4+BIT5,&P3SEL
;BIS.B #SPB+CHAR,&U0CTL
BIS.B #PENA+PEV+SPB+CHAR,&U0CTL
BIC.B #BIT5,&U0TCTL
BIS.B #BIT4,&U0TCTL
BIS.B #URXEIE,&U0RCTL
MOV.B #03h, &U0BR0
MOV.B #00h, &U0BR1
MOV.B #13h, &U0MCTL
BIS.B #UTXE0+URXE0,&ME1
BIC.B #SWRST, &U0CTL
RET
END
此帖出自
小平头技术问答
接收程序:
#include "msp430.h" ; #define controlled include file
NAME main ; module name
PUBLIC main ; make the main label vissible
; outside this module
ORG 0FFFEh
DC16 init ; set reset vector to 'init' label
ORG 0FFF2h ;接收中断
DC16 USART0RX_ISR
RESEG DATA16_N
Buffer: DS8 200
RSEG CSTACK ; pre-declaration of segment
RSEG CODE ; place program in 'CODE' segment
init: MOV #SFE(CSTACK), SP ; set up stack
main: NOP ; main program
MOV.W #WDTPW+WDTHOLD,&WDTCTL ; Stop watchdog timer
CALL #UART0_INIT ;初始化程序
MOV #Buffer, R4 ;把赋给R4
BIS.B #GIE, SR ;开总控位
JMP $
UART0_INIT: ;初始化程序
BIS.B #SWRST, &U0CTL ;软件复位
BIS.B #BIT4+BIT5,&P3SEL
;BIS.B #SPB+CHAR,&U0CTL ;偶校验,8位
BIS.B #PENA+PEV+SPB+CHAR,&U0CTL ;奇偶校验允许
BIS.B #BIT4,&U0TCTL ;选择ACLK
BIC.B #BIT5,&U0TCTL
BIS.B #URXEIE,&U0RCTL ;全收
MOV.B #03h, &U0BR0 ;N=3
MOV.B #00h, &U0BR1
MOV.B #0E0h, &U0MCTL
BIS.B #UTXE0+URXE0,&ME1 ;打开使能
BIC.B #SWRST, &U0CTL
BIS.B #URXIE0,&IE1 ;打开分控位
RET
USART0RX_ISR ;中断子程
MOV.B &RXBUF0,0(R4) ;把接收缓冲器中的内容移至以R4为地址的空间
RETI
END
一周热门 更多>