[问答] msp430f149两串口数据通信,为什么发送的比接收的数据慢呢

小王电子 ( 楼主 ) 2017-8-8 20:15:29  显示全部楼层
我用430的两个串口进行通信,将前端的处理数据接收过来,然后用另一个串口发送到电脑上,用两个串口调试工具仿真,可是一般发送多个数据才能接收到一个数据,是哪方面原因吗?还有储存数据应该定义一个数组吗?
奖励5积分

3个回复

小王电子 发表于 2017-8-8 20:32:59
/*--------------------------------------------
程序功能:通过UART1接收外部数据放到数组中,
         通过UART0将数组内数据发送到PC机,
         配置串口助手接收数据。
通信格式:N.8.1 9600
         无校验,8个数据位,1个停止位,波特率9600
------------------------------------------------*/
#include <msp430x14x.h>
#define uchar unsigned char
#define uint  unsigned int
void Delays(void);
uchar REDATA = 0;           //初始化数组值为0
/*-------------主函数-------------------------*/
void main(void)
{
// uchar REDATA = 0;           //初始化数组值为0
  WDTCTL = WDTPW + WDTHOLD;
  P3SEL |= 0xF0;   //选择P3.4和P3.5做uart0通信端口,P3.6和P3.7做uart1通信端口
  //uart0作为发送数据到PC内部寄存器配置
  ME1 |= UTXE0;                              // 使能USART0的发送
  UCTL0 |= CHAR;                            // 选择8位字符
  UTCTL0 |= SSEL0;                          // UCLK = ACLK
  UBR00 = 0x03;                             // 波特率9600
  UBR10 = 0x00;                             //
  UMCTL0 = 0x4A;                            // Modulation
  UCTL0 &= ~SWRST;                          // 初始化UART状态机
//uart1作为接收CPLD数据的内部寄存器配置
  ME2 |= URXE1;                              // 使能USART1的接收
  UCTL1 |= CHAR;                            // 选择8位字符
  UTCTL1 |= SSEL0;                          // UCLK = ACLK
  UBR01 = 0x03;                             // 波特率9600
  UBR11 = 0x00;                             //
  UMCTL1 = 0x4A;                            // Modulation
  UCTL1 &= ~SWRST;                          // 初始化UART状态机
  IE2 |= URXIE1;                            // 使能USART1的接收中断
  while(1)
  {
      _EINT();                             //打开全局中断
      LPM1;                                //进入LPM1模式
   //   while(!(IFG2 & URXIFG1))             //等待以前的字符接收完毕
   //     REDATA = RXBUF1;                   //将接收数据放在数组中
   //     Delays();
   //   while(!(IFG1 & UTXIFG0))             //等待以前的字符发送完毕
   //     TXBUF0 = REDATA;                   //将数组中的数据发送到PC机上
  }   
}  
/*******************************************
函数名称:UART1_RXISR
功    能:UART1的接收中断服务函数,在这里唤醒
          CPU,使它退出低功耗模式
参    数:无
返回值  :无
********************************************/
#pragma vector = UART1RX_VECTOR
__interrupt void UART1_RXISR(void)
{
  LPM1_EXIT;                 //退出低功耗模式
  while(!(IFG2 & URXIFG1))             //等待以前的字符接收完毕
  REDATA = RXBUF1;
  TXBUF0 = REDATA;                   //将数组中的数据发送到PC机上
}
这是程序
回复

举报 使用道具

小王电子 发表于 2017-8-8 20:33:09
/*--------------------------------------------
程序功能:通过UART1接收外部数据放到数组中,
         通过UART0将数组内数据发送到PC机,
         配置串口助手接收数据。
通信格式:N.8.1 9600
         无校验,8个数据位,1个停止位,波特率9600
------------------------------------------------*/
#include <msp430x14x.h>
#define uchar unsigned char
#define uint  unsigned int
void Delays(void);
uchar REDATA = 0;           //初始化数组值为0
/*-------------主函数-------------------------*/
void main(void)
{
// uchar REDATA = 0;           //初始化数组值为0
  WDTCTL = WDTPW + WDTHOLD;
  P3SEL |= 0xF0;   //选择P3.4和P3.5做uart0通信端口,P3.6和P3.7做uart1通信端口
  //uart0作为发送数据到PC内部寄存器配置
  ME1 |= UTXE0;                              // 使能USART0的发送
  UCTL0 |= CHAR;                            // 选择8位字符
  UTCTL0 |= SSEL0;                          // UCLK = ACLK
  UBR00 = 0x03;                             // 波特率9600
  UBR10 = 0x00;                             //
  UMCTL0 = 0x4A;                            // Modulation
  UCTL0 &= ~SWRST;                          // 初始化UART状态机
//uart1作为接收CPLD数据的内部寄存器配置
  ME2 |= URXE1;                              // 使能USART1的接收
  UCTL1 |= CHAR;                            // 选择8位字符
  UTCTL1 |= SSEL0;                          // UCLK = ACLK
  UBR01 = 0x03;                             // 波特率9600
  UBR11 = 0x00;                             //
  UMCTL1 = 0x4A;                            // Modulation
  UCTL1 &= ~SWRST;                          // 初始化UART状态机
  IE2 |= URXIE1;                            // 使能USART1的接收中断
  while(1)
  {
      _EINT();                             //打开全局中断
      LPM1;                                //进入LPM1模式
   //   while(!(IFG2 & URXIFG1))             //等待以前的字符接收完毕
   //     REDATA = RXBUF1;                   //将接收数据放在数组中
   //     Delays();
   //   while(!(IFG1 & UTXIFG0))             //等待以前的字符发送完毕
   //     TXBUF0 = REDATA;                   //将数组中的数据发送到PC机上
  }   
}  
/*******************************************
函数名称:UART1_RXISR
功    能:UART1的接收中断服务函数,在这里唤醒
          CPU,使它退出低功耗模式
参    数:无
返回值  :无
********************************************/
#pragma vector = UART1RX_VECTOR
__interrupt void UART1_RXISR(void)
{
  LPM1_EXIT;                 //退出低功耗模式
  while(!(IFG2 & URXIFG1))             //等待以前的字符接收完毕
  REDATA = RXBUF1;
  TXBUF0 = REDATA;                   //将数组中的数据发送到PC机上
}
回复

举报 使用道具

huaxinggui 发表于 2017-8-9 14:00:09
very good,thanks
回复

举报 使用道具

您需要登录后才可以回帖 登录 | 注册

本版积分规则


关闭

站长推荐上一条 /9 下一条

小黑屋|手机版|Archiver|电子发烧友 ( 粤ICP备14022951号-2 )

GMT+8, 2018-7-17 02:21 , Processed in 0.102287 second(s), 23 queries , Memcache On.

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

微信扫描
快速回复 返回顶部 返回列表