📄 p229_s1.c
字号:
//书本配套代码参考P229_S1_F44X.C文件
//修改实例如下
//例1 MSP430F149在ACLK = LFXT1 = 32768Hz,MCLK = SMCLK = UCLK0 = XT2 = 8MHz频率驱动下以115200波特率异步串行通信,采用中断方式接收并发送收到的数据。P229
//计算波特率分频因子:8000000Hz/115200~9.1(069h|52h)。
//相关程序如下:
#include <msp430x14x.h>
void main(void)
{
unsigned int i;
WDTCTL = WDTPW + WDTHOLD;
P3SEL |= 0x30; //P3.4,5用作USART0 TXD/RXD
P3DIR |= 0x10; //P3.4输出
BCSCTL1 &= ~XT2OFF; // XT2on
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG)); // OSCFault flag still set?
BCSCTL2 = 0x88 ; // MCLK = SMCLK = XT2 (safe)
ME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD
UCTL0 = CHAR; // 8-bit character
UTCTL0 = SSEL1; // UCLK = SMCLK
UBR00 = 0X41; // 8Mhz/112500 = 104.167
UBR10 = 0X3; //
UMCTL0 = 0X49; // modulation
UCTL0 &= ~SWRST; // Initialize USART state machine
IE1 |= URXIE0; // Enable USART0 RX interrupt
_EINT(); // 允许中断
for(;;)
{
_BIS_SR(CPUOFF); //进入LPM0
_NOP();
}
}
#pragma vector = UART0RX_VECTOR
__interrupt void usart0_rx (void)
{
while ((IFG1 & UTXIFG0) == 0); //USART0接收缓存有数据吗?
TXBUF0 = RXBUF0; //读出接收到数据,再转发回去
}
/*
//同理,当ACLK = UCLK0 = LFXT1 = 32768Hz,MCLK = SMCLK = DCO~800k,波特率为2400时,实现上述同样功能,只需要改变相关波特率寄存器设置:
UBR00 = 0x0D; //32k/2400=13.65
UBR10 = 0x00;
UMCTL0 = 0x6B; //波特率调整
//当ACLK=LFXT1=32768Hz,MCLK=SMCLK=UCLK0=DCOCLK=1048576Hz,波特率为9600时,相关波特率寄存器设置:
UBR00 = 0x6D; //1048576Hz/9600~109.23
UBR10 = 0x00; //1MHz 9600
UMCTL0 = 0x81; //波特率调整
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -