map430f149的串口问题

2019-07-15 16:40发布

我想要单片机在接收到一个数据时返回一个字符A,发现无论如何都实现不了,大家帮忙看看程序有么有问题,而且我还想在主函数中处理一些其他的问题,比如点亮一盏灯,发现都实现不了,大家帮忙看看什么问题,哪里出错了,要怎么弄,谢谢

#include <msp430x14x.h>
#include "Config.h"
uchar n;
uchar data=0;
//*************************************************************************
//               MSP430串口初始化
//*************************************************************************
void UART_Init()
{
  U0CTL|=SWRST;               //复位SWRST
  U0CTL|=CHAR;                //8位数据模式
  U0TCTL|=SSEL1;              //SMCLK为串口时钟
  // U0BR1=baud_h;               //BRCLK=8MHZ,Baud=BRCLK/N      //在config里有设置   提取高位
  //U0BR0=baud_l;               //N=UBR+(UxMCTL)/8            //在config里有设置   提取低位
  //U0MCTL=0x00;                //微调寄存器为0,波特率9600bps

U0BR0 = 0x41;//波特率9600
U0BR1 = 0x03;                        //有串口波特率计算公式的   
U0MCTL = 0x00;

  ME1|=UTXE0;                 //UART1发送使能
  ME1|=URXE0;                 //UART1接收使能
  U0CTL&=~SWRST;
  IE1|=URXIE0;                //接收中断使能位
// IE1|=UTXIE0;                //发送中断使能位

  P3SEL|= BIT4;               //设置IO口为外围模式
  P3DIR|= BIT4;               //设置IO口方向为输出
  P3SEL|= BIT5;                    //看原理图进行设置。。注意有跳
  P3DIR&=~ BIT5;               //设置IO口方向为输入
}

//*************************************************************************
//              串口0发送数据函数
//*************************************************************************

void Send_Byte(uchar data)
{
  while(!(IFG1&UTXIFG0));          //发送寄存器空的时候发送数据
    U0TXBUF = data;
    IFG1&=~UTXIFG0;
}

//*************************************************************************
//               处理来自串口 0 的接收中断
//*************************************************************************

#pragma vector=UART0RX_VECTOR
__interrupt void UART0_RX_ISR(void)
{

    data = U0RXBUF;                       //接收到的数据存起来
    n=1;
    Send_Byte('A');                    //将接收到的数据再发送出去
}

//*************************************************************************
//            处理来自串口 0 的发送中断,预留
//*************************************************************************

//#pragma vector=UART0TX_VECTOR
//__interrupt void UART0_TX_ISR(void)
//{

//}

//*************************************************************************
//           主函数
//*************************************************************************
void main(void)
{
  WDT_Init();                         //看门狗设置
  Clock_Init();                       //系统时钟设置
  UART_Init();                        //串口设置初始化
  _EINT();    //开中断

  while(1)                            //无限循环
    {   

      if(n==1){
  Send_Byte('A');
  n=0;
              }  


    }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
武力戡乱
1楼-- · 2019-07-15 17:41
如果我说的对,分给我哈!
U0CTL|=SWRST;               //复位SWRST
我也有点记不住了,但你看这个手册。

The USART is reset by a PUC or by the SWRST bit. After a PUC, the SWRST
bit is automatically set, keeping the USART in a reset condition. When set, the
SWRST bit resets the URXIEx, UTXIEx, URXIFGx, OE, and FE bits and sets
the UTXIFGx flag. The USPIEx bit is not altered by SWRST. Clearing SWRST
releases the USART for operation.
你可以在初始化后读一下ME2
撒旦天魔
2楼-- · 2019-07-15 17:56
好东西!!!!!!!!分享
bingn430
3楼-- · 2019-07-15 22:47
上来就不合适,你给的是置位,标注的是复位,串口的初始化,必须要先SWRST=1;
liumsde
4楼-- · 2019-07-16 04:27
 精彩回答 2  元偷偷看……
liumsde
5楼-- · 2019-07-16 05:33
很不错的程序,我就编不出来
liumsde
6楼-- · 2019-07-16 05:48

真是好东西啊 受益匪浅。。。。

一周热门 更多>