?? 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 + -