[求助] 自己写的第一个程序就不成功~来骂我顿吧

飞翔的兔子   2012-3-30 20:41 楼主

/*程序功能:接收PC机十六进制数据后传至pc机显示
数据格式:十六进制

帧头:FD

帧尾: FE*/
#include "msp430x14x.h"
#define   uint  unsigned int
#define   uchar unsigned char
#define CPU_F ((double)8000000)
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
uchar RBuff[250]; // 接受缓冲区
uchar rindex;//接受计数
uchar tindex;//发送计数
//**********************函数声明****************************//
void int_clk();
void int_usart();
void UART0_TXISR(uchar *date,uchar i);
//**********************函数声明****************************//
int main(void)
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  int_clk();
  int_usart();
  _EINT();
   while(1);
 
}
//*********************************************************//
void int_clk()
{
    uchar i;
    BCSCTL1&=~XT2OFF;  //打开XT振荡器
    BCSCTL2|=SELM1+SELS;//MCLK 8M and SMCLK 1M 
    do
 {
        IFG1 &= ~OFIFG;                 //清除振荡错误标志
        for(i = 0; i < 100; i++)
   _NOP();   //延时等待
        }
    while ((IFG1 & OFIFG) != 0); //如果标志为1继续循环等待
    IFG1&=~OFIFG;
}
//**********************初始化串口****************************//
void int_usart()

  U0CTL|=SWRST;//复位串口
  U0CTL|=CHAR; //8位数据
  U0TCTL|=SSEL1;//select SMCLK AS CLK
  U0BR0=0X03;
  U0BR1=0X69;
  UMCTL0=0Xff;//1200
  ME1|=UTXE0+URXE0;//使能接收和发送
  U0CTL&=~SWRST;//清除串口复位信号
  IE1|=URXIE0+UTXIE0;//使能接收发送中断
  P3SEL|=BIT4;
  P3SEL|=BIT5;//选择I/O口使用扩展功能和方向
  P3DIR|=BIT4; 
}
//**********************接受函数****************************//
  #pragma vector = UART0RX_VECTOR
__interrupt void UART0_RXISR()
{
    RBuff[rindex++] = RXBUF0;
    if(RBuff[0]==0xFD&RBuff[rindex-1]==0xFE) //接收完毕
    {
        tindex = rindex;
        rindex=0;
        UART0_TXISR(RBuff,tindex);
    }
  
    
}
//**********************************************************//
void UART0_TXISR(uchar *date,uchar i)
{
  uint v=0;
  uchar *tend_date;
  tend_date=date;
  delay_us(10);
  for(v=0;v<i;v++)
  {
    U0TXBUF=*tend_date;
    while((IFG1&UTXIFG0)==0);//等待发送完成
    tend_date++;
  }
  delay_ms(10);
}

回复评论 (12)

这很正常,我从来没有一次成功过,楼主加油
点赞  2012-3-31 08:57
不急,慢慢来
点赞  2012-3-31 09:30
加油,一起努力
点赞  2012-3-31 09:41
我也入门,一起学习交流.
点赞  2012-3-31 12:24
第一次不成功很正常的,成功了才不正常,再接再励
点赞  2012-3-31 16:55
把串口时钟的SMCLK换成ACLK就实现了,谁能告诉我为什么啊??
点赞  2012-3-31 20:03
引用: 原帖由 飞翔的兔子 于 2012-3-31 20:03 发表 把串口时钟的SMCLK换成ACLK就实现了,谁能告诉我为什么啊??
波特率
点赞  2012-3-31 21:20

回复 5楼 iceiceice1 的帖子

这不我用过的头像么
点赞  2012-4-1 19:34
跌跌撞撞,一路走来
点赞  2012-4-4 11:09

回复 10楼 yangyifeng01 的帖子

干开始学什么都不懂~愁死了
点赞  2012-4-4 11:28
应该是波特率吧,波特率的设定可以查询手册。
用5系列的很容易实现串口通信的,放弃一系列,直接学5系列的吧
(其实也没这么容易,5系列把收发都放在一个中断向量了,这点很不习惯)
点赞  2012-4-4 12:34
都拿板子了7天了,还不会烧呢~~~~那我该怎么办
点赞  2012-4-5 14:19
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复