中级会员
- 积分
- 380
- 金钱
- 380
- 注册时间
- 2014-12-13
- 在线时间
- 89 小时
|
发表于 2016-4-23 19:48:53
|
显示全部楼层
/**************************************************************
MSP430F149 有两个串口0与1
***************************************************************/
#include "uart.h"
#define CPU_CLK 8000000 //系统时钟8M
u8 flag,flag1;
/**************************************************************
*函数功能:初始化UART0
*P3.4 TXD P3.5 RXD
***************************************************************/
#if UART0_ENable
void UART0_Init(u32 baud)
{
u16 baudset;
baudset=(u16)(CPU_CLK/baud);
P3SEL |= BIT4 + BIT5; // P3.4,5 = USART0 TXD/RXD
ME1 |= UTXE0 + URXE0; // 使能UART0的TXD和RXD
UCTL0 |= CHAR; // 数据位为8bit
UTCTL0 |= SSEL1; // 选择时钟源,SSEL0 32.768KHZ SSEL1 8M
UBR00 = (u8)(baudset); // 初值整数部分低8位
UBR10 = (u8)(baudset>>8); // 初值整数部分高8位
UMCTL0 =(u8)((baudset-U0BR0)*8); //初值小数部分
UCTL0 &= ~SWRST; // Initialize USART state machine
IE1 |= URXIE0; // 使能UART0的RX中断
_EINT(); // 打开全局中断控制位
}
/**************************************************************
函数功能:从UART0发送一个字符
输入参数:Byte -- 要发送的字符
***************************************************************/
void UART0_SendChar(u8 Byte)
{
while (!(IFG1 & UTXIFG0));
TXBUF0 = Byte; // 将要发送的字符送到数据寄存器
}
/**************************************************************
函数功能:发送字符串函数
输入参数: s 要发送的字符串
**************************************************************/
void UART0_Send_Str(char *s)
{
while (*s)
{
UART0_SendChar(*s);
s++;
}
}
/**************************************************************
函数功能: 重定义fputc函数
备 注:使用printf需重定义fputc函数,并且
修改在General Options 中的Library Configuration
和Library Options
***************************************************************/
/*int fputc(int Byte, FILE *f)
{
while (!(IFG1 & UTXIFG0));
TXBUF0 = Byte; // 将要发送的字符送到数据寄存器
return Byte;
}*/
//串口0中断函数
#pragma vector=UART0RX_VECTOR
__interrupt void UART0_RX_ISR(void)
{
u8 c;
IFG1&=~URXIFG0;
c = RXBUF0; // 接收到数据了
if(c==0xBB)
flag=1;
}
#endif
//==================================================================
/**************************************************************
*函数功能:初始化UART1
*P3.6 TXD P3.7 RXD
***************************************************************/
#if UART1_ENable
void UART1_Init(u32 baud)
{
u16 baudset;
baudset=(u16)(CPU_CLK/baud);
P3SEL |= BIT6 + BIT7; // P3.6,7 = USART0 TXD/RXD
ME2 |= UTXE1 + URXE1; // 使能UART1的TXD和RXD
UCTL1 |= CHAR; // 数据位为8bit
UTCTL1 |= SSEL1; // 选择时钟源,SSEL0 32.768KHZ SSEL1 8M
UBR01 = (u8)(baudset); // 初值整数部分低8位
UBR11 = (u8)(baudset>>8); // 初值整数部分高8位
UMCTL1 =(u8)((baudset-U0BR0)*8); //初值小数部分
UCTL1 &= ~SWRST; // Initialize USART state machine
IE2 |= URXIE1; // 使能UART1的RX中断
_EINT(); // 打开全局中断控制位
}
/**************************************************************
函数功能:从UART1发送一个字符
输入参数:Byte -- 要发送的字符
***************************************************************/
void UART1_SendChar(u8 Byte)
{
while (!(IFG2 & UTXIFG1));
TXBUF1 = Byte; // 将要发送的字符送到数据寄存器
}
/**************************************************************
函数功能:发送字符串函数
输入参数: s 要发送的字符串
**************************************************************/
void UART1_Send_Str(char *s)
{
while (*s)
{
UART1_SendChar(*s);
s++;
}
}
/**************************************************************
函数功能: 重定义fputc函数
备 注:使用printf需重定义fputc函数,并且
修改在General Options 中的Library Configuration
和Library Options
***************************************************************/
/*int fputc(int Byte, FILE *f)
{
while (!(IFG2 & UTXIFG1));
TXBUF1 = Byte; // 将要发送的字符送到数据寄存器
return Byte;
}*/
//串口1中断函数
#pragma vector=UART1RX_VECTOR
__interrupt void UART1_RX_ISR(void)
{
u8 c;
IFG2&=~URXIFG1;
c = RXBUF1; // 接收到数据了
if(c==0xBB)
flag1=1;
}
#endif
|
|