|
楼主 |
发表于 2013-1-6 19:07:00
|
显示全部楼层
本帖最后由 Cortex_M3 于 2013-1-6 19:09 编辑
CC430F5137学习第一季 之 USART
串口配置函数(直接Copy 的例程代码)
/********************************************
* 函数名 :UCA0_Init(void)
* 功能 :串口USART 配置
* 输入参数 :无
* 输出参数 :无
* 作者 :
*/
void UCA0_Init(void)
{
PMAPPWD = 0x02D52; // Get write-access to port mapping regs 获得端口映射权限
P1MAP5 = PM_UCA0RXD; // Map UCA0RXD output to P1.5 , P1.5 配置为RXD
P1MAP6 = PM_UCA0TXD; // Map UCA0TXD output to P1.6 , P1.6 配置为TXD
PMAPPWD = 0; // Lock port mapping registers, 锁定端口映射寄存器
P1DIR |= BIT6; // Set P1.6 as TX output , P1.6 设置为TX 输出
P1SEL |= BIT5 + BIT6; // Select P1.5 & P1.6 to UART function P1.5 P1.6 配置为USART功能
UCA0CTL1 |= UCSWRST; // **Put state machine in reset**,将状态机复位
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 6; // 1MHz 9600 (see User's Guide)
UCA0BR1 = 0; // 1MHz 9600
UCA0MCTL = UCBRS_0 + UCBRF_13 + UCOS16; // Modln UCBRSx=0, UCBRFx=0,
// over sampling
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt ,使能USCI_A0 RX中断
}
/********************************************
* 函数名 :Send_Single-byte(unsigned char dat)
* 功能 :串口发送单一字节
* 输入参数 :unsigned char dat
* 输出参数 :无
* 作者 :
*/
void Send_Single_byte(unsigned char dat)
{
while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX buffer ready?
//UCA0TXBUF = UCA0RXBUF; // TX -> RXed character
UCA0TXBUF = dat;
}
/********************************************
* 函数名 :Send_Multi-byte(unsigned char *dat,unsigned char Length)
* 功能 :串口发送多字节
* 输入参数 :unsigned char *dat,unsigned char Length
* 输出参数 :无
* 作者 :
*/
void Send_Multi_byte(unsigned char *dat,unsigned char Length)
{
unsigned char i;
for(i=0;i<Length;i++)
{
while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX buffer ready?
//UCA0TXBUF = UCA0RXBUF; // TX -> RXed character
UCA0TXBUF = dat;
}
}
/********************************************
* 函数名 :main(void)
* 功能 :主函数
* 输入参数 :无
* 输出参数 :无
* 作者 :
*/
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
UCA0_Init(); //初始化USART 配置
__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled
__no_operation(); // For debugger _NOP();
}
// Echo back RXed character, confirm TX buffer is ready first
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
switch(__even_in_range(UCA0IV,4))
{
case 0:break; // Vector 0 - no interrupt
case 2: // Vector 2 - RXIFG
if(UCA0RXBUF==0x01) //接收缓冲区数据为 0x01
{
Send_Multi_byte(OK_Dat,9);
}
else Send_Multi_byte(NO_Dat,9);
break;
case 4:break; // Vector 4 - TXIFG
default: break;
}
} |
|