📄 main.c
字号:
/*****************************************************************************\
文件名: main.c
描述: 用于MSP430F149。
异步通讯。
版本:1.0 2007-8-15
\*****************************************************************************/
#include <MSP430x14x.h>
#define USART_DIR P3DIR
#define USART_SEL P3SEL
#define USART_IN P3IN
#define USART_OUT P3OUT
#define UTXD0 BIT4
#define URXD0 BIT5
unsigned char aRxBuff[N_XY_BAO]; //接收数据缓冲区
unsigned char NRxBuff=0;
unsigned char aTxBuff[N_XY_BAO]; //发送数据缓冲区
unsigned char NTxBuff=0;
void UartInit();
void SendUart(unsigned char *pBuffer,unsigned char n_byte);
void AddUsData(unsigned char sq0);
void InitSys(); //初始化
int main( void )
{
unsigned char q0;
unsigned char *pq0;
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
InitSys();
//初始化
while(1)
{
pq0=DoUart(&q0);
//发送数据
if(q0!=0)
{
SendUart(pq0,q0);
}
LPM3;
}
}
/*****************************************************************************
系统初始化
******************************************************************************/
void InitSys()
{
unsigned int iq0;
BCSCTL1&=~XT2OFF; //打开XT2振荡器
do
{
IFG1 &= ~OFIFG; // 清除振荡器失效标志
for (iq0 = 0xFF; iq0 > 0; iq0--); // 延时,等待XT2起振
}
while ((IFG1 & OFIFG) != 0); // 判断XT2是否起振
BCSCTL2 =SELM_2; //选择MCLK为XT2
UartInit(); //初始化USART0
_EINT(); //打开全局中断控制,若不需要打开,可以屏蔽本句
}
/*****************************************************************************
向接收缓冲区中增加一个数据
******************************************************************************/
void AddUsData(unsigned char sq0)
{
if(NRxBuff<N_XY_BAO)
{
aRxBuff[NRxBuff]=sq0;
NRxBuff++;
}
}
void UartInit()
{
USART_SEL |= UTXD0 +URXD0; //设置管脚为第二功能
UCTL0 = CHAR+PENA+SWRST; //8位数据,1位停止位,无校验
UTCTL0 = SSEL0; //选择UCLK = ACLK
UBR00 = 0x3; //设置波特率4800bit/s
UBR10 = 0;
UMCTL0 = 0x4A;
UCTL0 &= ~SWRST;
ME1 |= UTXE0 + URXE0; //打开模块USART0
IE1 |= URXIE0; //打开USART0接收中断
}
/*****************************************************************************
发送函数。采用查询方式。
pBuffer:指向发送数据缓冲区的指针
n_byte:发送的字节数
******************************************************************************/
void SendUart(unsigned char *pBuffer,unsigned char n_byte)
{
unsigned char q0;
for(q0=0;q0<n_byte;q0++)
{
while((IFG1&UTXIFG0)==0); //查询是否发送完毕
TXBUF0=*pBuffer;
pBuffer++;
}
}
/*****************************************************************************
USART0接收中断函数
******************************************************************************/
#pragma vector=USART0RX_VECTOR;
__interrupt void Usart0Rx()
{
if((U0RCTL&RXERR)==0)
{
AddUsData(RXBUF0);
}
else
{
SetBaoErr();
U0RCTL &= ~(FE+PE+OE+BRK);
}
LPM3_EXIT;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -