搜索
bottom↓
回复: 10

急啊~!还是串口问题,不知道原因,各位帮帮忙~! 在线等

[复制链接]

出0入0汤圆

发表于 2010-11-5 13:18:07 | 显示全部楼层 |阅读模式
我的5438接了16M的晶振,要实现简单的把温度传感器数据通过串口发送给PC观察,弄了好久,串口调试助手硬是收不到数据,时钟函数和UART如下
void Init_Clock(void)
{
    P11DIR = BIT0 | BIT1 | BIT2; // P11.1-2 to output direction
    P11SEL |= BIT0 | BIT1 | BIT2; // P11.1-2 to output SMCLK,MCLK

    // configure clock system
   // P5SEL &= ~0x0C;
    P7SEL |= 0x03;
    UCSCTL6 &= ~XT1DRIVE_3;
    UCSCTL6 |= XT1DRIVE_2;
    UCSCTL6 &= ~(SMCLKOFF | XT1BYPASS | XT1OFF);
    UCSCTL6 |= XTS;
    UCSCTL3 |= SELREF_0 | FLLREFDIV_0;
    UCSCTL4 &= 0x00;
    UCSCTL5 &= 0x00;
    do {
        UCSCTL7 &= ~(XT1LFOFFG + XT1HFOFFG + DCOFFG);
        SFRIFG1 &= ~OFIFG;
    }while(SFRIFG1&OFIFG);
}


void Uart_Init(void)
{
  P3SEL = 0x30;                             // P3.4,5 = USCI_A0 TXD/RXD
  P3DIR |= BIT4;  //bit4 tx
  P3DIR &= ~BIT5; // bit5 rx
  UCA0CTL1 |= UCSWRST; // **Put state machine in reset**
  UCA0CTL0 = UCMODE_0;  //  uart mode;
  UCA0CTL0 &= ~UC7BIT; // 8 bit
  UCA0CTL1 |= UCSSEL_2;// CLK = SMCLK
  UCA0BR0 = 0x8a;                          // 16M/115200 (see User's Guide)
  UCA0BR1 = 0x00;                           //
  UCA0MCTL = UCBRS_7+UCBRF_0;              // Modulation UCBRSx=7, UCBRFx=0
  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  UCA0IE |= UCTXIE;//UCRXIE;                         // Enable USCI_A1 RX interrupt

  __bis_SR_register(  LPM3_bits + GIE );//      // Enter LPM3, interrupts enabled
// __no_operation();                         // For debugger
}


void main(void)
{
    WDTCTL = WDTPW + WDTHOLD;  //关狗
    Init_Clock();
    Uart_Init();
}

#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
  switch(__even_in_range(UCA0IV,4))
  {
  case 0:break;                             // Vector 0 - no interrupt
  case 2:                                   // Vector 2 - RXIFG
    while (!(UCA0IFG&UCTXIFG));             // USCI_A1 TX buffer ready?
    UCA0TXBUF = UCA0RXBUF;                  // TX -> RXed character
    break;
  case 4:
    UCA0TXBUF = 0x00;
     while (!(UCA0IFG&UCTXIFG)); // USCI_A1 TX buffer ready?
     temture_h = temture & 0xff00;
     UCA0TXBUF = temture >> 8;
     while (!(UCA0IFG&UCTXIFG));
     temture_l = temture & 0x00ff;
     UCA0TXBUF = temture_l;
    break;                             // Vector 4 - TXIFG
  default: break;
  }  
}

请给我帮我看看,谢谢了,看有什么错误,怎么处理

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2010-11-5 13:21:52 | 显示全部楼层
用示波器

出0入0汤圆

 楼主| 发表于 2010-11-5 13:25:32 | 显示全部楼层
回复【1楼】dengting  守望者
用示波器
-----------------------------------------------------------------------

谢谢,看程序有没有错误,比如各寄存器设置方面?

出0入0汤圆

发表于 2010-11-5 16:13:15 | 显示全部楼层
可能是没有产生TX中断

出0入0汤圆

 楼主| 发表于 2010-11-5 16:24:22 | 显示全部楼层
回复【3楼】liquan1010  
可能是没有产生tx中断
-----------------------------------------------------------------------

有中断,我调试的时候能进入中断,并且UA0TXBUF的值也会变动

出0入0汤圆

 楼主| 发表于 2010-11-5 16:50:34 | 显示全部楼层
回复【5楼】hameyou  
可能是没配置好吧
-----------------------------------------------------------------------

上面是我的程序,请问哪里要改,谢谢,请指出下

出0入0汤圆

 楼主| 发表于 2010-11-5 19:44:43 | 显示全部楼层
怎么没有人给出更好的解答呀? 各位大虾没不要吝啬赐教啊

出0入0汤圆

发表于 2012-2-17 08:46:10 | 显示全部楼层
好久的帖子,主函数没有while(1)?

出0入0汤圆

发表于 2012-2-17 15:32:18 | 显示全部楼层
串口调试不通需从硬件和软件两个方面找问题。硬件方面考虑电路及串口线。软件方面就要考虑你初始化的问题了。要善于使用调试助手来配合调试。给你一个串口的程序吧
#include "msp430x14x.h"
#define uchar unsigned char
void init(void);
uchar data1[6]={'a','b','c','d','e'};
uchar buff[4];
uchar i=0,flag=0,k=0,n=0;
uchar j=0;
/*  PC机发以Oxff开头,最后发送的数据为前几个数据的和结束的数据包,430发送字符串"abcde"给PC机*/
void main( void )
{
    WDTCTL=WDTPW+WDTHOLD;
    //BCSCTL1=0x07;
    //BCSCTL2=0x88;
    init();
    _EINT();
    while(1)
    {
    //TXBUF1=0xff;
    //while(UTCTL1&0x01==0);
     //i=0;
      if(j==1)
     {
      //i=0;
      for(n=0;n<6;n++)
      {
        TXBUF1=data1[n];
        //for(i=0;i<10;i++);
        while((UTCTL1&0x01)==0);
      }
      j=0;
      
     }  
    }
}

void init(void)
{
  UCTL1|=SWRST;
  //UCTL1&=~SWRST;
  UCTL1=0x10;              //8 bit数据,1bit停止位,无校验
  UBR01=0x03;              //9600波特率
  UBR11=0x00;
  UMCTL1=0x4A;             //位调整
  UTCTL1=0x10;             //选32768ACLK为时钟源
  ME2|=0x30;               //发送接受均允许
  //ME2|=UTXE0+URXE0;       //发送接受均允许
  //P3SEL=0x31;            //设置端口。P3.0,P3.4,P3.5
  //ME2|=0x20;
  P3SEL=0xC0;
  P3DIR=0x40;           // P3.0,P3.4为输出
  //P3OUT|=BIT0;         //设置75176的DE为1,表示使能发送。
  UCTL1&=~SWRST;
  IE2|=URXIE1;             //中断使能接收
  //IE2|=UTXIE1;             //中断使能发送
}                                                                                                                                                                                                                                                                                                     

#pragma vector=UART1RX_VECTOR
__interrupt void UART1RX(void)
{
// if(!RXERR)
  //{
  if(flag==0)
  {
  if(RXBUF1==0xff)
    {
      flag=1;
      i=0;
    }
  }
  else
  {
    buff=RXBUF1;
    if(i>0)
    {
     k+=buff[i-1];
    }
    //i++;
    //k+=buff;
    if(buff==k)
    {
      flag=0;
      j=1;
      k=0;
    }
    i++;
  }
  //}
}

出0入0汤圆

发表于 2012-2-17 15:32:46 | 显示全部楼层
430串口例程ourdev_719635NEL1AL.txt(文件大小:2K) (原文件名:232.c.txt)
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-19 06:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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