MSP430 标准库printf函数实现

MSP430 标准库printf函数实现
关键是增加一个putchar函数。

代码如下:


#include
#include
void NOP10(void)
{
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
_NOP();
}
int putchar( int c )//注意不要改参数的类型和返回值的类型,否则printf调用是就有问题了。
{
if (c == '\n')
{
TXBUF1 = '\r';
while((UTCTL1&0x01)==0);
}
TXBUF1 = c;
while((UTCTL1&0x01)==0);
return c;
}

void InitalUart1(void)
{
P4SEL |= 0x03; // P4.0,1 = USART1 TXD/RXD
ME2 |= UTXE1 + URXE1; // Enable USART1 TXD/RXD
UCTL1 |= CHAR; // 8-bit character
UTCTL1 |= SSEL1; // UCLK = SMCLK
UBR01 = 0x36; // 1MHz 19200
UBR11 = 0x00; // 1MHz 19200
UMCTL1 = 0x6B; // Modulation
UCTL1 &= ~SWRST; // Initalize USART state machine
IE2 |= URXIE1; // Enable USART1 RX interrupt
//IFG2 |= UTXIFG1;

}
void main(void)
{
unsigned char i;
i=0x10;
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
FLL_CTL0 |= XCAP18PF; // Configure load caps
InitalUart1();
_EINT();
// LPM0;
while(1)
{
// while (!(IFG2 & UTXIFG1)); // USART1 TX buffer ready?
// TXBUF1 = 'H';

//putchar(0x05);
//putchar('c');
printf("%d",i);
NOP10();
}

}

#pragma vector=USART1RX_VECTOR
__interrupt void usart1_rx(void)
{
while (!(IFG2 & UTXIFG1)); // USART1 TX buffer ready?
TXBUF1 = RXBUF1; // RXBUF1 to TXBUF0
//LPM0_EXIT;
}

相关文档
最新文档