社区导航

 

搜索
查看: 1199|回复: 5

[求助] 通信接口

[复制链接]

40

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2015-8-8 19:56 | 显示全部楼层 |阅读模式
usb转串口可以用来做PC机和单片机的串口通信实验么,硬件怎么连接。。打开串口调试助手,为什么没有显示接收到的数据?

回复

使用道具 举报

1万

TA的帖子

143

TA的资源

版主

Rank: 6Rank: 6

技术导师勋章

发表于 2015-8-8 20:24 | 显示全部楼层
当然可以与MCU的串口通迅,但要注意正确安装驱动且会存在兼容性问题。至于说“没有收到”,先确定USB转的串口是否正常工作,再检查MCU是否有发送。
上传了一些书籍资料,也许有你想要的:http://download.eeworld.com.cn/user/chunyang

回复

使用道具 举报

40

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-8-8 20:30 | 显示全部楼层
嗯,我没找到问题,神帮我看一下程序/*****************************************************
程序功能:MCU不停向PC机发送数据,在屏幕上显示三行字符,
       换行后重复显示0~9字符,采用程序查询方式 UTXIFG0
      串口采用USART0,

#include  

typedef unsigned char uchar;
typedef unsigned int  uint;

void Delays(void);
void PutString(uchar *ptr);
uchar value = 0x39;

/********************主函数**********************/
void main(void)
{
    uchar *tishi = " www.nuist.edu\
                    \n welcome to my class!\
                    \n 0~9 ASCII code as follows:";
   
    WDTCTL = WDTPW + WDTHOLD;                 // 关闭看门狗定时器
    UCTL0 &= ~SWRST;                          // 初始化UART0状态机
    P3SEL |= 0x30;                            // P3.4,5选择为UART收发端口   00110000
    UCTL0 |= CHAR;                            // 8-bit character
    UTCTL0 |= SSEL0;                          // UCLK = ACLK  32768Hz
    UBR00 = 0x0D;                             // 32k/2400 - 13.65
    UBR10 = 0x00;                             // 高位表示整数分频?,0x000D=13
    UMCTL0 = 0x6B;                            // Modulation, 0110 1011
    IE1 |= URXIE0;                            // 使能接收中断
    _EINT();                                  //开全局中断
    ME1 |= UTXE0 + URXE0;                     // 使能USART0收发
    PutString(tishi);                        //循环的外围的字符串的发送
    while(1)
    {     
        while (!(IFG1 & UTXIFG0));     //查询到如果没有完成就继续等待
        TXBUF0 = value--;             //0~9 增加显示哦!                        
        
        while (!(IFG1 & UTXIFG0));
         TXBUF0 = '\n';      //换行,下一面一句是同一行空格
        //TXBUF0 = 0x20;       //注意区别换行和同一行空一格显示方式
        Delays();
        if(value==0x2f)       //显示到9后返回重新显示0
          value=0x39;         
    }
}
/*******************************************
函数名称:PutSting
功    能:向PC机发送字符串
参    数:无
返回值  :无
********************************************/
void PutString(uchar *ptr)
{
      while(*ptr != '\0')                             //判断待发数据的开始
      {
            while (!(IFG1 & UTXIFG0));              // TX缓存空闲?空闲就发,否则等待哦
            TXBUF0 = *ptr++;                       // 发送数据,指针
      }
      while (!(IFG1 & UTXIFG0));
      TXBUF0 = '\n';                        //换行啊,也可以空格的,那就一行显示
}
/*******************************************
函数名称:Delays
功    能:延时一会
参    数:无
返回值  :无
********************************************/
void Delays(void)
{
    uchar i=20;
    uint j;

    while(i--)
    {
            j=2000;
            while(j--);
    }
}

回复

使用道具 举报

40

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-8-9 20:45 | 显示全部楼层
我用MSP430F149自带AD接口写的一个测量电压的程序,为什么只显示汉字而电压值没有显示,求高手指点
/********************************************************************
//DM430-A型开发板数码管显示ADC转换结果程序,显示输入到ADC的电压转换后的数字量,再把数字量通过串口发到串口调试助手
**************************************************/

#include
#include "Config.h"                     //开发板配置头文件,主要配置IO端口信息

static uchar Flag=0;                    //标志变量
uint TEMP=0;                            //ADC值暂存变量
void Delays(void);
void PutString(uchar *ptr);
//***********************************************************************
//               MSP430IO口初始化
//***********************************************************************
void Port_Init()
{
  LED8SEL  = 0x00;                      //设置IO口为普通I/O模式,此句可省
  LED8DIR  = 0xFF;                      //设置IO口方向为输出
  LED8PORT = 0xFF;                      //P2口初始设置为FF
  
  DATASEL  = 0x00;                      //设置IO口为普通I/O模式,此句可省
  DATADIR  = 0xFF;                      //设置IO口方向为输出
  DATAPORT = 0xFF;                      //P4口初始设置为FF
  
  CTRSEL  =  0x00;                      //设置IO口为普通I/O模式,此句可省
  CTRDIR |=  BIT3 + BIT4;               //设置IO口方向为输出,控制口在P63,P64
  CTRPORT =  0xFF;                      //P6口初始设置为FF  
}

//*************************************************************************
//        74HC573控制数码管动态扫描显示函数,显示采集到的温度
//*************************************************************************

void Display(uint data_q,uint data_b,uint data_s,uint data_g)
{
  uchar i,j;

  j=0x01;                         //此数据用来控制位选
  for(i=0;i<4;i++)                //用后4位数码管来显示
  {
     DCTR1;                     
     WCTR1;                     
     DATAPORT=~j;               
     WCTR0;                     
     j=(j<<1);
     DATAPORT=0x00;               //前4位都不显示,送数据00即可
     DCTR0;                     
     delay_ms(2);               
  }
  
  DCTR1;                          //开始显示千位
  WCTR1;                    
  DATAPORT=~j;               
  WCTR0;                    
  j=(j<<1);
  DATAPORT=table[A1];         
  DCTR0;                    
  delay_ms(1);
  
  DCTR1;                          //开始显示百位
  WCTR1;                    
  DATAPORT=~j;               
  WCTR0;                    
  j=(j<<1);
  DATAPORT=table[A2];         
  DCTR0;                    
  delay_ms(1);              

  DCTR1;                           //开始显示十位
  WCTR1;                     
  DATAPORT=~j;               
  WCTR0;                     
  j=(j<<1);
  DATAPORT=table[A3];           
  DCTR0;                     
  delay_ms(1);               

  DCTR1;                           //开始显示个位
  WCTR1;                     
  DATAPORT=~j;               
  WCTR0;                     
  j=(j<<1);
  DATAPORT=table[A4];           
  DCTR0;                     
  delay_ms(1);               
     
  DCTR1;                     
  WCTR1;                     
  DATAPORT=0xff;               
  WCTR0;                     
}

//*************************************************************************
//                电压数据处理函数
//*************************************************************************
void Data_do(uint temp_d)
{
  uint temp_1,temp_2;
  A1=temp_d/1000;                       //分出千,百,十,和个位
  temp_1=temp_d%1000;
  A2=temp_1/100;
  temp_2=temp_1%100;
  A3=temp_2/10;
  A4=temp_2%10;
}

//*************************************************************************
//        ADC初始化程序,用于配置ADC相关寄存器
//*************************************************************************
void ADC_Init()
{
  P6SEL|=0x01;                                    //选择ADC通道
  ADC12CTL0|= ADC12ON + SHT0_2 + REF2_5V + REFON; //ADC电源控制开,16个CLK,内部基准2.5V
  ADC12CTL1|= ADC12SSEL1 + ADC12SSEL0;            //SMCLK做时钟源
  ADC12MCTL0= SREF0 + INCH_0;                     //参考控制位及通道选择,这里选择通道0
  ADC12IE|= 0x01;                                 //中断允许
  ADC12CTL0|= ENC;                                //使能转换器
}

//*************************************************************************
//        USART0初始化程序,用于配置USART相关寄存器
//*************************************************************************
void USART0_Init()
  {
    UCTL0 &= ~SWRST;                          // 初始化UART0状态机
    P3SEL |= 0x30;                            // P3.4,5选择为UART收发端口   00110000
    UCTL0 |= CHAR;                            // 8-bit character
    UTCTL0 |= SSEL0;                          // UCLK = ACLK  32768Hz
    UBR00 = 0x0D;                             // 32k/2400 - 13.65
    UBR10 = 0x00;                             // 高位表示整数分频?,0x000D=13
    UMCTL0 = 0x6B;                            // Modulation, 0110 1011
    ADC12MCTL0=SREF0+INCH_0+EOS;
    IE1 |= URXIE0;                            // 使能接收中断
    _EINT();                                  //开全局中断
    ME1 |= UTXE0 + URXE0;                    // 使能USART0收发
  }
//*************************************************************************
//        ADC中断服务程序
//*************************************************************************
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR(void)
{
  uchar j;
  while((ADC12CTL1&0x01)==1);           //如果ADC忙,则等待,否则读取ADC转换数值
  Flag = 1 ;
  TEMP = ADC12MEM0;                     //读取ADC转换值
  Data_do(TEMP);                        //处理ADC值,用于显示
  for(j=0;j<50;j++)
  {
    Display(A1,A2,A3,A4);               //显示ADC的数据
  }

}

//***********************************************************************
//            主程序
//***********************************************************************
void main(void)
{
  WDT_Init();                         //看门狗初始化
  Clock_Init();                       //时钟初始化
  Port_Init();                        //端口初始化,用于控制IO口输入或输出
  Close_LED();                        //LED数码管先关闭
  ADC_Init();                         //初始化ADC配置
  USART0_Init();
  _EINT();                            //使能中断
  Flag=1;                             //标志位先置1
  uchar *tishi = " www.nuist.edu\
                    \n welcome to my class!\
                    \n ad zhuanhuan shuju as follows:";
     
    PutString(tishi);                        //循环的外围的字符串的发送
  while(1)
  {
    while(Flag==1)
    {
      ADC12CTL0 |= ADC12SC;           //开启转换
      ADC12CTL0 &= ~ADC12SC;          //清零
      Flag=0;                         //清零标志位
    while (!(IFG1 & UTXIFG0));     //查询到如果没有完成就继续等待
        TXBUF0 =TEMP;  
    }
  }
}

/*******************************************
函数名称:PutSting
功    能:向PC机发送字符串
参    数:无
返回值  :无
********************************************/
void PutString(uchar *ptr)
{
      while(*ptr != '\0')                             //判断待发数据的开始
      {
            while (!(IFG1 & UTXIFG0));              // TX缓存空闲?空闲就发,否则等待哦
            TXBUF0 = *ptr++;                       // 发送数据,指针
      }
      while (!(IFG1 & UTXIFG0));
      TXBUF0 = '\n';                        //换行啊,也可以空格的,那就一行显示
}


回复

使用道具 举报

1366

TA的帖子

0

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

发表于 2015-8-9 23:11 | 显示全部楼层
你首先得确定你的串口有没有配置对,然后就是usb转串口驱动有没有装上,最后就是串口连线是否正确吧

回复

使用道具 举报

40

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2015-8-10 13:37 | 显示全部楼层
恩,是我程序代码的问题。。现在问题解决了,在考虑用AD采集更高的电压0~12v,我也知道分压,可是具体怎样还不是很清楚,摸索中。。

回复

使用道具 举报

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

关闭

站长推荐上一条 1/7 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-5-31 21:49 , Processed in 0.211534 second(s), 25 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表