求MSP430,串口初始化程序。

我用的是F149的芯片。要求能够通过串口调试助手发送和接收数据。又中断最好。QQ:448906288我用的是串口1。是串口1的最好,省的我自己改,呵呵。... 我用的是F149的芯片。要求能够通过串口调试助手发送和接收数据。又中断最好。QQ:448906288
我用的是串口1。是串口1的最好,省的我自己改,呵呵。
展开
 我来答
百度网友c4a1b4f28
推荐于2016-11-27
知道答主
回答量:23
采纳率:0%
帮助的人:11.1万
展开全部
不用中断 也行
#include <msp430x14x.h>
#define uint unsigned int
#define uchar unsigned char
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;
}
int_usart()
{
U0CTL|=SWRST;//复位串口
U0CTL|=CHAR; //8位数据
U0TCTL|=SSEL1;//select SMCLK AS CLK
U0BR0=0Xa0;
U0BR1=0X01;
UMCTL0=0Xc0;//19200
ME1|=UTXE0+URXE0;//使能接收和发送
U0CTL&=~SWRST;//清除串口复位信号
IE1|=URXIE0;//使能接收中断
P3SEL|=BIT4;
P3SEL|=BIT5;//选择I/O口使用扩展功能和方向
P3DIR|=BIT4;
}
sent_byte(uchar data)
{
while((IFG1&UTXIFG0)==0);//判断发送缓冲区是否结束
U0TXBUF=data;
}
#pragma vector=UART0RX_VECTOR
__interrupt void UART0_RX_ISR(void)
{
uchar data=0;
data=U0RXBUF; //读取接受到的数据并且发送到PC机
sent_byte( data);
}
int main( void )
{
WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
int_clk(); //系统时钟初始化
int_usart();//初始化串口
_EINT(); //使能中断
while(1);
}
追问
..
眼大5子
2011-10-08 · TA获得超过768个赞
知道小有建树答主
回答量:517
采纳率:0%
帮助的人:227万
展开全部
这个简单的程序 TI的例程里面就有

//******************************************************************************
// MSP-FET430P140 Demo - USART0, UART 9600 Echo ISR, HF XTAL ACLK
//
// Description: Echo a received character, RX ISR used. Normal mode is LPM0,
// USART0 RX interrupt triggers TX Echo. Though not required, MCLK = LFXT1
// ACLK = MCLK = UCLK0 = LFXT1 = 3.58MHz
// Baud rate divider with 3.58Mhz XTAL @9600 = 3.58MHz/9600 = 372 (0174h)
// //* An external 3.58Mhz XTAL on XIN XOUT is required for ACLK *//
//
// MSP430F149
// -----------------
// /|\| XIN|-
// | | | 3.58MHz
// --|RST XOUT|-
// | |
// | P3.4|------------>
// | | 9600 - 8N1
// | P3.5|<------------
//
//
// M. Buccini
// Texas Instruments Inc.
// Feb 2005
// Built with CCE Version: 3.2.0 and IAR Embedded Workbench Version: 3.21A
//******************************************************************************

#include <msp430x14x.h>

void main(void)
{
volatile unsigned int i;
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD
BCSCTL1 |= XTS; // ACLK = LFXT1 = HF XTAL

do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG)); // OSCFault flag still set?

BCSCTL2 |= SELM_3; // MCLK = LFXT1 (safe)
ME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD
UCTL0 |= CHAR; // 8-bit character
UTCTL0 |= SSEL0; // UCLK = ACLK
UBR00 = 0x74; // 3.58Mhz/9600 - 372
UBR10 = 0x01; //
UMCTL0 = 0x00; // no modulation
UCTL0 &= ~SWRST; // Initialize USART state machine
IE1 |= URXIE0; // Enable USART0 RX interrupt

_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt
}

#pragma vector=USART0RX_VECTOR
__interrupt void usart0_rx (void)
{
while (!(IFG1 & UTXIFG0)); // USART0 TX buffer ready?
TXBUF0 = RXBUF0; // RXBUF0 to TXBUF0
}
追问
TI上我没有找到,呵呵。太晚了,我明早再来调试。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dc1205
2011-10-09 · TA获得超过295个赞
知道答主
回答量:616
采纳率:0%
帮助的人:50.3万
展开全部
串口一和串口0该的地方很少 我这里有个串口0的串口调试程序 你可以在调试助手上输入响应的命令完成串口波特率的修改 关于波特率计算的问题你可以 在网上搜个波特率计算器 然后根据你自己设置的时钟 可以自己计算出来波特率的 ,我把程序发你邮件吧!我也是用的 149 程序自己调试过 没问题哈!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式