msp430f147异步收发有误,有程序,求大神

2019-03-24 14:29发布

有两个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 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
wangren09
2019-03-24 15:55
<

接收程序:

            #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

一周热门 更多>

相关问题

    相关文章