异步通讯上的编程我刚入手,有很多疑问。
如果我发送数据,怎么判断发送完成了?同样的,怎么判断接收一次数据完成?
还有8为数据位是按照什么格式传输数据的?比如我想传一个字符串“ABCD1234”,怎么传输,接收到的数据是什么样子的?又怎么还原成原来的字符串呢?
我完全按照例程进行232通讯测试,为什么总是只收到161……
/*************************LED 显示+通讯测试程序******************************************/
#include "msp430x44x.h"
#define CONST_TA 32
#define WDT_CONST WDT_ARST_250
const char Data[6]="234567";
float Disp=0;
char Data_R[20],Buffer[20];
unsigned char i_R=0,j_R=0,flag_R=0;
void init(void);
void init_io(void);
/* main process */
void main(void)
{
unsigned char i=0;
init();
init_io();
while(1)
{
TXBUF0=0xff;
while ((IFG1 & UTXIFG0) == 0);
for(i=0;i<=6;i++)
{
TXBUF0=Data[i];
while ((IFG1 & UTXIFG0) == 0);
}
WDTCTL = WDT_CONST;
}
}
/**********Function description*************/
// timer A is used for key&led display
/********End of Function Description*********/
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A(void)
{
CCR0 = CONST_TA;
}
/*******************************************************/
/* Watchdog Interrupt Vector (WDT) handler */
/*******************************************************/
#pragma vector=WDT_VECTOR
__interrupt void wdt(void)
{
}
/*******************************************************/
/* initial for the main function */
/*******************************************************/
void init(void)
{
TACTL = TASSEL_1+TACLR+MC_1;
CCTL0 = CCIE;
CCR0 = CONST_TA;
FLL_CTL0 |= XCAP14PF;
UTCTL0 = SSEL0;
UBR00 = 0x0d; // 32768Hz 2400
UBR10 = 0x00; // 32768Hz 2400
UMCTL0 = 0x6b;
UCTL0 = CHAR;
}
void init_io(void)
{
P2SEL |= 0x30; // P2.4,5 = USART0 TXD/RXD
P2DIR |= 0x10; // P2.4 output direction
ME1 |= UTXE0 + URXE0;
IE1 |= URXIE0 + WDTIE;// Ena××e USART0 RX interrupt
WDTCTL = WDT_CONST;
_EINT();
}
/**********Function description*************/
// UART0
/********End of Function Description*********/
#pragma vector=UART0RX_VECTOR
__interrupt void usart0_rx(void)
{
if(flag_R==0)
{
if(RXBUF0==0xff)
{
flag_R=1;
i_R=0;
}
}
else
{
Data_R[i_R]=RXBUF0;
if(Data_R[i_R++]==0)
{
flag_R=0;
for(j_R=0;j_R<i_R;j_R++)Buffer[j_R]=Data_R[j_R];
}
}
}