⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p229_s1.c

📁 msp430开发版程序
💻 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 + -