Доброго времени суток всем!
Недавно возникла потребность передачи данных из микроконтроллера в ПК. Написал код на ассемблере, опираясь на Code_examples от TI, и то, что получилось, приведено ниже:
#include "msp430F1232.h"
RSEG CSTACK
DS16 0
RSEG CODE
;---------------------------------------------------------------------
; Установка тактирования от кварца
;---------------------------------------------------------------------
RESET mov #SFE(CSTACK),SP
mov #WDTPW+WDTHOLD,&WDTCTL ;OSTANOVKA WDT
BIC #OSCOFF, SR ; tAKTIROVANIE OT KVARCA
BIS.B #XTS, BCSCTL1
L1 BIC.B #OFIFG, &IFG1
MOV #0FFh, R15
L2 DEC R15
JNZ L2
BIT.B #OFIFG, &IFG1
JNZ L1
BIS.B #SELM_3, &BCSCTL2
;--------------------------------------------------------------------
; Инициализация USART
;--------------------------------------------------------------------
mov.b #200,R7
bis.b #SWRST,&UCTL0;
bis.b #030h,&P3SEL; P3.4,5 - USART
bis.b #UTXE0+URXE0,&ME2; Включение передачи и приема
bis.b #CHAR, &UCTL0; Формат данных 8-разрядный
mov.b #SSEL0, &UTCTL0; UCLK=ACLK
mov.b #0100b,&UBR00; 5MHz/19200 = 260.4 = 100000100b
mov.b #0001b,&UBR10;
mov.b #0000, &UMCTL0; Без модуляции
bic.b #SWRST,&UCTL0; Сброс USART не включен
bis.b #URXIE0+UTXIE0,&IE2
bis.b #UTXIFG0,&IFG2; Флаг гтовности к прерыванию
Loop bis.w #LPM3+GIE,SR
nop
jmp Loop
;-------------------------------------------------------------------
USART0TX_ISR;
;-------------------------------------------------------------------
mov.b R7, &TXBUF0;
reti
;--------------------------------------------------------------------
; Векторы прерываний
;--------------------------------------------------------------------
COMMON INTVEC
ORG RESET_VECTOR
DW RESET
ORG USART0TX_VECTOR
DW USART0TX_ISR
END.
Из программы видно, что я просто хочу передать содержимое R7 в ПК. Трудность заключается в том, что это значение передается не всегда. Запускаю программу, которая считывает информацию с com порта (программа работает 100% правильно), она в тестовый файл записывает значение 200(правильное значение). В следующий раз, после перезапуска программы, в текстовый файл она записывает величину 14. Потом снова 200. И я не пойму, что с ней происходит! Кто знает, отзовитесь пожалуйста