请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430G2553 工具/软件:Code Composer Studio
大家好、
我正在尝试在 PC 和 MSP 之间创建通信、但我仅获得最后一个字符
PC 和 MSP 的波特率均为9600
以下是串行通信的代码:
void InitSerialCommunication ()
{
P1SEL |= RXD + TXD;// P1.1 = RXD、P1.2=TXD
P1SEL2 |= RXD + TXD;// P1.1 = RXD、P1.2=TXD
UCA0CTL1 |= UCSSEL_2;// SMCLK
UCA0BR0 = 0x68
;/ UCB0CTL1 = 0x00
;// UCB9600 UCA0MHZ //调制 UCBRSx = 5
UCA0CTL1 &=~UCSWRST;//**初始化 USCI 状态机**
}
int HasRequest()
{
返回(IFG2 & UCA0RXIFG);
}
void transmit (char* data、int size)
{
while (size > 0)
{
UCA0TXBUF =*DATA+-+;
SIZE
__delay_cycles (delay_char);//需要获取所有字符(如果更改了10个以上的字符或时钟,请考虑增加延迟时间)
}
void receeve (char* data)
{
if (!HasRequest())
return;
*data = UCA0RXBUF;
__delay_cycles (delay_char);
}
delay_char = 1000
这里是主代码(我使用 LCD 来查看结果)
#include
#include "lcd.h"
#include "SerialCommunication.h"
/*
main.c
*/
#define SDA_bit BIT7
#define SCL_bit BIT6
#define LCD_address 0x27
#define WAIT_TIME 255
char key;
#define SIZE_M 5
char R[SIZE_M];
char counter = 0;
void main (void){
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
DCOCTL = 0;//选择最低 DCOx 和 MODx 设置<
BCSCTL1 = CALBC1_1MHz;//设置 DCO
DCOCTL = CALDCO_1MHz;
InitLCD (SDA_bit、SCL_bit、LCD_address);
InitSerialCommunication();
KEY = NONEKEY;
StartLCD();
_enable_interrupt ();
字符地址= 0x80;
while (1)
{
transmit ("hio"、5);
//_delay_cycles (4500);
while (HasRequest())
{
receve (&R[counter++]);
}
if (counter > 0)
{
WriteMsg (R、counter、address、counter);
counter = 0;
}
}
谢谢大家