串口调试

[复制链接]
1000|21
 楼主| liliang9554 发表于 2017-3-17 22:54 | 显示全部楼层 |阅读模式
我在做串口调试,使用G2553的单片机   求一个程序模版、实现的功能如下:在串口调试助手的数据发送区域里利用电脑的键盘输入一个字母,就可以显示在串口调试助手的接受数据区里面
dengdc 发表于 2017-3-17 22:56 | 显示全部楼层
你自己没试试?
 楼主| liliang9554 发表于 2017-3-17 22:58 | 显示全部楼层
我写了很多程序都没有办法实现
huangchui 发表于 2017-3-17 23:02 | 显示全部楼层
不知道G2553单片机,不过你可以先确定下是硬件原因还是软件原因
heweibig 发表于 2017-3-17 23:04 | 显示全部楼层
用示波器量电脑的发送,如果有波形量单片机接受引脚,如果有波形量发送引脚,如果有波形则量电脑接收
zhanghqi 发表于 2017-3-17 23:05 | 显示全部楼层
如果到单片机接收没波形则可能是硬件原因;如果发送开始无波形则可能是软件原因
lizye 发表于 2017-3-17 23:07 | 显示全部楼层
是的,程序 估计你得自己想办法了!!!
 楼主| liliang9554 发表于 2017-3-17 23:09 | 显示全部楼层
我现在编写的程序可以实现单片机给PC发送数据的功能,就是把想要显示的数据写在程序里面,然后下载运行,在串口调试助手里面就可以在数据接收区显示了,但是就是不能实现在数据发送区里面手动输入,然后再数据接收区里显示
wyjie 发表于 2017-3-17 23:13 | 显示全部楼层
看看程序
 楼主| liliang9554 发表于 2017-3-17 23:16 | 显示全部楼层
//通行格式:N.8.1,2400

#include<msp430g2553.h>
typedef unsigned char uchar;
typedef unsigned int uint;

void Delays(void);
void PutString(uchar *ptr);
void initUART(void);

void main(void)

{
  uchar *tishi ="MCU sends 0~127 to PC and the\
                 \n screen will display their corresponding\
                  \n ASCII code as follows:";

       uchar value =0;
       WDTCTL = WDTPW + WDTHOLD;
       initUART();
       _EINT();
       PutString(tishi);

while(1)  //MCU向PC发信息
   {
    while(!(IFG2&UCA0TXIFG));   //TX 缓存空闲?
    UCA0TXBUF = value;    // 发送数据
    value&=0x7f;    //使value的值不要超过128
    IFG2&=~UCA0TXIFG;  //标志寄存器清零
    while(!(IFG2&UCA0TXIFG));  
    UCA0TXBUF ='\n';    //换行
   Delays();
   }
}

void initUART(void)     //各种初始化

{
  BCSCTL1 = CALBC1_1MHZ;     
  DCOCTL  = CALDCO_1MHZ;  //时钟的设置  (可以不用设置,要设置不能设置的太大)
   P1SEL |=0x06;  // P1.1,2选择为UART收发端口
   P1SEL2 |=0x06;   //将P1.1 P1.2设为第二功能  
  UCA0BR0 = 0x6D;   //波特率9600      
  UCA0BR1 = 0x00;
UCA0MCTL =0;     //  选择模式      
UCA0CTL1|=UCSSEL_2+UCSWRST; //SMCLK时钟
IE2|= UCA0RXIE+UCA0TXIE;     // 使能接收中断  在这里可以不用
  UCA0CTL1&= ~UCSWRST;         // 初始化
}
#pragma vector=USCIAB0RX_VECTOR
__interrupt void get()
{
    uchar value;
    value=UCA0RXBUF;
    IFG2&=~UCA0RXIFG;
}

void PutString(uchar *ptr)
{
   while(*ptr!='\0')
    {
     while(!(IFG2&UCA0TXIFG));  //TX 缓存空闲?
      UCA0TXBUF = *ptr++;       // 发送数据
    IFG2&=~UCA0TXIFG;  //标志寄存器清零
    }
    while(!(IFG2&UCA0TXIFG));
   UCA0TXBUF = '\n';

}


void Delays(void)    //延时函数
{
uint i;
for(i=60000;i>0;i--);
}
dengdc 发表于 2017-3-17 23:17 | 显示全部楼层

楼主给的很直观的code,我是暂时没看出多大问题的
spark周 发表于 2017-3-17 23:19 | 显示全部楼层

不过还是建议多检查下initUART()函数中个相关配置寄存器的使用情况的
 楼主| liliang9554 发表于 2017-3-17 23:21 | 显示全部楼层
嗯,那我按大家的说法挨个排查一下,先结贴啦,谢谢哈
lefeng 发表于 2017-3-29 21:01 | 显示全部楼层
发送开始无波形可能是软件原因
febgxu 发表于 2017-4-1 21:15 | 显示全部楼层
这个需要上位机有key的功能。
febgxu 发表于 2017-4-1 21:18 | 显示全部楼层
使用软件调用键盘的功能。
isseed 发表于 2017-4-2 10:03 | 显示全部楼层
这个是上位机的功能
isseed 发表于 2017-4-2 10:06 | 显示全部楼层
楼主要是实现这个上位机软件还是下位机接收?
lzbf 发表于 2017-4-2 21:06 | 显示全部楼层
这个使用键盘输入数据就行。
lzbf 发表于 2017-4-2 21:11 | 显示全部楼层
软件响应key(e)这个函数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

950

主题

11568

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部