打印

串口通信求解

[复制链接]
1874|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tsxswpu|  楼主 | 2012-7-30 16:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在做串口调试,使用G2553的单片机   求一个程序模版、实现的功能如下:在串口调试助手的数据发送区域里利用电脑的键盘输入一个字母,就可以显示在串口调试助手的接受数据区里面,我写了很多程序都没有办法实现

相关帖子

沙发
qiujiahongde| | 2012-7-30 20:49 | 只看该作者
不知道G2553单片机,不过你可以先确定下是硬件原因还是软件原因
1、用示波器量电脑的发送,如果有波形量单片机接受引脚,如果有波形量发送引脚,如果有波形则量电脑接收;
2、如果到单片机接收没波形则可能是硬件原因;如果发送开始无波形则可能是软件原因;
程序 估计你得自己想办法了!!!

使用特权

评论回复
板凳
tsxswpu|  楼主 | 2012-7-31 10:41 | 只看该作者
我现在编写的程序可以实现单片机给PC发送数据的功能,就是把想要显示的数据写在程序里面,然后下载运行,在串口调试助手里面就可以在数据接收区显示了,但是就是不能实现在数据发送区里面手动输入,然后再数据接收区里显示

使用特权

评论回复
地板
tsxswpu|  楼主 | 2012-7-31 10:43 | 只看该作者
//通行格式: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--);
}

使用特权

评论回复
5
vivilzb1985| | 2012-8-1 14:15 | 只看该作者
4楼楼主给的很直观的code,我是暂时没看出多大问题的,不过还是建议多检查下initUART()函数中个相关配置寄存器的使用情况的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

7

帖子

0

粉丝