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

2019-03-24 14:40发布

/*程序功能:接收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条回答
ckx提问
2019-03-26 03:02
应该是波特率吧,波特率的设定可以查询手册。
用5系列的很容易实现串口通信的,放弃一系列,直接学5系列的吧
(其实也没这么容易,5系列把收发都放在一个中断向量了,这点很不习惯)

一周热门 更多>

相关问题

    相关文章