注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
0212009623的个人空间 https://home.eeworld.com.cn/space-uid-286755.html [收藏] [复制] [分享] [RSS]
日志

eZ430-学习心得(一)

已有 2246 次阅读2011-4-19 10:04

串口是系统与外界联系的重要手段,在嵌入式系统开发和应用中,经常需要上位机实现系统调试及现场数据的采集和控制。一般是通过上位机本身配置的串行口,通过串行通信技术,和嵌入式系统进行连接通信。USART 模块可以自动从任何一种低功耗模式 LPMx 开始自动工作。功能有USART模式,空闲线多级模式,地址位多机模式和UART自动波特率探测模式。

在芯片上的管脚位置为:

P3.4/UCA0TXD/UCA0SIMO P3.5/UCA0RXD/UCA0SOMI

串口配置的步骤是:

1、将相应的管脚设置为串口的功能

P3SEL = 0x30; // P3.4,5 = USCI_A0 TXD/RXD

  P3DIR |=BIT4; //P3.4为输出方向

2、设置波特率,由于硬件有波特率小数寄存器,所以误差比较小

//Baud rate divider with 1MHz = 1MHz/9600 = ~104.2

  UCA0CTL1 |= UCSSEL_2;                     // SMCLK

  UCA0BR0 = 104;                            // 1MHz 9600

  UCA0BR1 = 0;                              // 1MHz 9600

3、开启串口功能

UCA0MCTL = UCBRS0;  // Modulation UCBRSx = 1

UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**

IE2 |= UCA0RXIE;  // Enable USCI_A0 RX interrupt

__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled

3、中断函数

//  Echo back RXed character, confirm TX buffer is ready first

#pragma vector=USCIAB0RX_VECTOR

__interrupt void USCI0RX_ISR(void)

{

  while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?

  UCA0TXBUF = UCA0RXBUF;                    // TX -> RXed character

}

 

 

UCA0MCTL = UCBRS0;  // Modulation UCBRSx = 1

这句不是很懂,哪位高手解答下,这个寄存器是根据什么做设置的。

这里选用32K时钟,UCA0MCTL设置的是3,为什么?

UCA0CTL1 |= UCSSEL_1;                     // CLK = ACLK

  UCA0BR0 = 0x03;                           // 32kHz/9600 = 3.41

  UCA0BR1 = 0x00;                           //

  UCA0MCTL = UCBRS1 + UCBRS0;  // Modulation UCBRSx = 3
发表评论 评论 (1 个评论)
回复 洛川子 2012-12-8 15:08
我也不懂,应该是发送的一种格式??不知道你搞懂没?求解释啊,我认为这个UCA0MCTL设置的是3和时钟没关系吧。。

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章