WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗 P1DIR = 0xFF; // P1口设为输出
P1OUT = 0; // P1口输出全为低电平
P3SEL = 0x30; // P3.4,5 为UART的 TXD/RXD UCA0CTL1 |= UCSSEL_1; // 选择辅助时钟 ACLK UCA0BR0 = 0x03; // 32kHz/9600 = 3.41 UCA0BR1 = 0x00;
UCA0MCTL = UCBRS1 + UCBRS0; // 分频调制值UCBRSx = 3 UCA0CTL1 &= ~UCSWRST; // USCI状态机初始化完毕 IE2 |= UCA0RXIE; // 使能USCI_A0接收中断 _BIS_SR(LPM3_bits + GIE); // 进入 LPM3, 使能全局中断 }
// USCI A0/B0 Transmit ISR
#pragma vector=USCIAB0TX_VECTOR
__interrupt void USCI0TX_ISR(void) // USCI A0/B0发送中断服务函数 {
UCA0TXBUF = string1[i++]; //发送字符串数组的下一个数据 if (i == sizeof string1) //判断字符串数组数据是否发送完毕 IE2 &= ~UCA0TXIE; // 发送完则禁止USCI_A0发送中断 }
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void) // USCI A0/B0接收中断服务函数 {
string1[j++] = UCA0RXBUF; //将收到的数据写入string数组
P1OUT =UCA0RXBUF; //将收到的数据显示在P1口的LED灯上 if (j > sizeof string1 - 1) //判断字符串数组数据是否写满 {
i = 0; //计数变量i和j清零 j = 0;
IE2 |= UCA0TXIE; // 使能 USCI_A0 发送中断 UCA0TXBUF = string1[i++]; //发送字符串数组的第一个数据 } }
3)仿真结果
双击msp430f249单片机,装载可执行文件Debug\\Exe\\ex7_4.hex,设置仿真参数ACLK=1MHz,如果未设定,则仿真无结果或结果不对。运行后可以在发射数据虚拟终端中用键盘输入字符,每输入一个字符,在P1口的数码管显示该字符的16进制ASCII码;输入八个字符后才在接收数据虚拟终端中显示8个字符的信息,如图实例7_11的仿真结果图。
17
图7_11 实例7_4仿真结果
7.2.4 USCI_A型模式下UART的寄存器
USCI_A0型模式下UART的控制和状态寄存器如表7-3所示: 地址 寄存器标志 操作 寄存器说明 060h UCA0CTL0 R/W 控制寄存器0 061h UCA0CTL1 R/W 控制寄存器1 062h UCA0BR0 R/W 波特率控制寄存器0 063h UCA0BR1 R/W 波特率控制寄存器1 064h UCA0MCTL R/W 调制控制寄存器 065h UCA0STAT R/W 状态寄存器 066h UCA0RXBUF R 接收数据寄存器 067h UCA0TXBUF R/W 发送数据寄存器 05Dh UCA0ABCTL R/W 自动波特率寄存器 05Eh UCA0IRTCTL R/W IrDA发送控制寄存器 05Fh UCA0IRRCTL R/W IrDA接收控制寄存器 001h IE2 R/W 中断使能寄存器2 003h IFG2 R/W 中断标志寄存器2 USCI_A1型模式下UART的控制和状态寄存器如表7-4所示: 地址 寄存器标志 操作 寄存器说明 0D0h UCA1CTL0 R/W 控制寄存器0 0D1h UCA1CTL1 R/W 控制寄存器1
18
0D2h UCA1BR0 R/W 波特率控制寄存器0 0D3h UCA1BR1 R/W 波特率控制寄存器1 0D4h UCA1MCTL R/W 调制控制寄存器 0D5h UCA1STAT R/W 状态寄存器 0D6h UCA1RXBUF R 接收数据寄存器 0D7h UCA1TXBUF R/W 发送数据寄存器 0CDh UCA1ABCTL R/W 自动波特率寄存器 0CEh UCA1IRTCTL R/W IrDA发送控制寄存器 0CFh UCA1IRRCTL R/W IrDA接收控制寄存器 006h UC1IE R/W 中断使能寄存器2 007h UC1IFG R/W 中断标志寄存器2 USCI_Ax控制寄存器0——UCAxCTL0 7 6 5 4 3 2 1 0 UCPEN UCPAR UCMSB UC7BIT UCSPB UCMODEx UCSYNC UCPEN:校验使能位,奇偶校验与发送和接受寄存器有关。在具有地址的多处理器模式下,其奇偶校验位值的计算还包含地址位。
0:校验禁止; 1:校验允许。
UCPAR:奇偶校验位,当UCPEN位禁止时,该位无效。 0:奇校验; 1:偶校验。
UCMSB:最高优先选择位,用于控制发送和接收移位寄存器的方向。 0:最低位优先; 1:最高位优先。 UC7BIT:字符长度。 0:8位数据; 1:7位数据。
UCSPB:停止位选择。 0:1位停止位; 1:2位停止位。
UCMODEx:USCI模式选择位,在UCSYNC=0时,控制异步通信模式。 00b:UART模式;
01h:空闲线多处理器模式; 10b:地址线多处理器模式;
11b:波特率自动检测UART模式。 UCSYNC:同步使能。 0:异步模式; 1:同步模式。
USCI_Ax控制寄存器1——UCAxCTL1 7 6 5 4 3 2 1 0 UCSELx UCXEIE UCBRKIE UCDORM UCTXADDR UCTXBPK UCSWRST UCSELx:USCI时钟选择,决定BRCLK的时钟源。 00b:外部时钟;
19
01b:辅助时钟(ACLK);
10b和11b:子系统时钟(SMCLK)。 UCXEIE:接受错误字符中断使能。 0b:禁止中断;
1b:使能中断,且使UCXIFG置位。 UCBRKIE:接受中止字符中断使能。 0b:禁止中断;
1b:使能中断,且使UCXIFG置位。 UCDROM:休眠控制位。 0b:禁止休眠;
1b:休眠,在空闲线多处理器模式或地址线多处理器模式下,使UCXIFG置
位,在波特率自动检测UART模式下只有设置了中止和同步有效时,才使UCXIFG置位。
UCTXADDR:发送地址位。在多处理器模式下,判断发送的是地址帧还是数据
帧。
0b:下一帧为发送数据; 1b:下一帧发送地址。
UCTXBRK:发送终止位。将发送的终止命令写入发送缓存器中。在波特率自
动检测UART模式下,写55h到UCAxTXBUF缓存器中,其余情况下写00h到UCAxTXBUF缓存器中。 0b:下一帧不是中止;
1b:下一帧是中止或中止/同步信息。 UCSWRST:软件复位使能。 0b:禁止,正常操作; 1b:使能,保持复位状态。
USCI_Ax波特率控制寄存器0——UCAxBR0 7 6 5 4 3 2 1 0 UCBRx USCI_Ax波特率控制寄存器1——UCAxBR1 7 6 5 4 3 2 1 0 UCBRx 这两个寄存器的值,都只有在UCSWRST=1b时,才可以更改。这两个寄存器用于存放波特率的时钟预置定标器的值。其中UCAxBR0为低字节,UCAxBR1为高字节。
USCI_Ax调制控制寄存器——UCAxMCTL 7 6 5 4 3 2 1 0 UCBRFx UCBRSx UCOS16 UCBRFx:第一调制段选择,这些位在UCOS16=1时决定了BITCLK16的调制模式,见表7-2所示。当UCOS16=0时,忽略不计。
UCBRSx:第二调制段选择,这些位在决定了BITCLK的调制模式,见表7-1
所示。
这两个字段值的设定,参见―波特率设定‖一节的说明
20
相关推荐: