📄 uart.c
字号:
/****************************************************************************************************
* 文件名: UART.c *
* Copyright (c) 2008 *********武汉理工大学信息工程学院电信系 *
* 创建人: 王康 *
* 日 期: 2008.8.13 *
* 修改人: 王康 *
* 日 期: *
* 描 述: 本文件包含了MSP430F149的串口通信的各个模块,能完成与PC机的串口通信,包括数据接收和数据发送*
* 所有的函数均以UART开头来命名.注意数据的发送和接收都是从最低位开始的. *
* 接口定义: UTXD0--P3.4 *
* URXD0--P3.5 *
* 版 本: IAR V4.11 *
****************************************************************************************************/
//头文件
#include "config.h"
/*****************************************************************************
* 函数名: UART_Init
* 输 入: 无
* 输 出: 无
* 功能描述: 本函数为UART初始化子函数
* UART模块初始化顺序如下:
* 1.在SWRST=1的情况下设置串口(时钟源选择,通信方式,波特率设置等)
* 2.然后设置SWRST=0
* 3.最后设置相应的中断使能
* 全局变量: 无
* 调用模块: 无
* 作 者: 王康
* 日 期: 2008.8.13
* 修 改: 王康
* 日 期:
* 版 本: IAR V4.11
******************************************************************************/
void UART_Init(void)
{
UCTL0 |= SWRST; //在控制位SWRST为1的情况下设置串口
UTCTL0 |= SSEL1; //时钟源选择,UCLK=SMCLK=8MHz
UCTL0 |= CHAR; //设置字符长度为8bit
UBR00 = 0x41; //在8MHz下进行9600波特率通信
UBR10 = 0x03; //在8MHz下进行9600波特率通信
UMCTL0 = 0x00; //设置波特率调整控制寄存器
UCTL0 &= ~SWRST;
ME1 |= UTXE0 + URXE0; //使能USART0 TXD/RXD
IE1 |= URXIE0; //使能USART0 RX中断
IFG1 = 0x00;
P3SEL |= BIT4 + BIT5; //P3.4,P3.5用作USART0 TXD/RXD
P3DIR |= BIT4; //将P3.4设为输出(发),P3.5默认为输入(收)
_EINT();
}
/*****************************************************************************
* 函数名: UART_Send
* 输 入: 无
* 输 出: 无
* 功能描述: 本函数为UART发送子函数
* 全局变量: 无
* 调用模块: 无
* 作 者: 王康
* 日 期: 2008.8.13
* 修 改: 王康
* 日 期:
* 版 本: IAR V4.11
******************************************************************************/
void UART_Send(void)
{
while((UTCTL0 & 0x01) != 0x01); //等待直到没有数据发送
TXBUF0 = g_Uart_TBuf; //发送数据
}
/*****************************************************************************
* 函数名: UART_Receive
* 输 入: 无
* 输 出: 无
* 功能描述: 本函数为UART0数据接收中断子函数
* 全局变量: 无
* 调用模块: 无
* 作 者: 王康
* 日 期: 2008.8.13
* 修 改: 王康
* 日 期:
* 版 本: IAR V4.11
******************************************************************************/
#pragma vector = UART0RX_VECTOR
__interrupt void UART_Receive(void) //将接收到的数据发送回去
{
g_Uart_RBuf = RXBUF0;
while((UTCTL0 & 0x01) != 0x01); //等待直到没有数据发送
TXBUF0 = g_Uart_RBuf;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -