msp430学习笔记之uart
2015-07-06 22:06
405 查看
1 相关知识
MSP430系列,usart模块的波特率值设定是通过以下三个参数决定的:UxBR0,UxBR1,UxMCTL波特率=BRCLK/N
BRCLK:时钟源,可以通过寄存器设定何为时钟源;
N:波特率产生的分频因子。N=UxBR1+UxBR0+UxMCTL,其中UxBR1+UxBR0为整数部分,UxMCTL为设定小数部分 。
举个例子:波特率=9600,时钟源=32.768kHz
N=32768/9600=3.41
很明显:UxBR1+UxBR0=13,即UxBR1=0,UxBR0=13。
首先把小数部分0.41×8=3.28,取整后为3。这个5的意思就是在UxMCTL中的8位里要有3个1,剩下来的就是怎么分配这3个1的位置了。注意一点
就是这3个1要相对分散点。
因此:UBR00 = 0x03;UBR10 = 0x00;UMCTL0 = 0x4A;
2 代码实现
//本平台 msp430f149 #include<msp430f149.h> void usart0_config(void){ P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD ME1 |= URXE0 + UTXE0; // Enable USART0 T/RXD UCTL0 |= CHAR; // 8-bit character UTCTL0 |= SSEL0; // UCLK = ACLK UBR00 = 0x03; // 32k/9600 - 3.41 UBR10 = 0x00; // UMCTL0 = 0x4A; // Modulation UCTL0 &= ~SWRST; // Initialize USART state machine IE1 |= URXIE0; // 使能USART0的接收中断 _EINT(); //开总中断,整个系统中断使能 } //字符发送函数 void send_char(char sendchar){ while (!(IFG1 & UTXIFG0)); //等待发送寄存器为空 TXBUF0 = sendchar; } //字符串发送函数 void send_string(char *ptr){ while(*ptr != '\0'){ send_char(*ptr++); // 发送数据 } send_char('\n'); //发送换行指令 } int main(){ WDTCTL = WDTPW + WDTHOLD; //默认MCLK = DCO usart0_config(); P2DIR = 0x80; P2OUT = 0xff; while(1){ } return 0; } //usart0 interrupt receive function #pragma vector=UART0RX_VECTOR __interrupt void usart0_rx (void) { if( RXBUF0 == 0x00 ){ //收到0时,led灯亮,并发送 "led is on" P2OUT = 0x7f; send_string("led is on"); } if( RXBUF0 == 0x01 ){ //收到1时,led灯亮,并发送 "led is off" P2OUT = 0xff; send_string("led is off"); } }
3 实验结果
每次发送0调试助手都可以收到 "led is on"并且led灯亮,发送1时led灯灭,同时调试助手显示"led is off",注意:16进制发送数据
相关文章推荐
- FTDI最新推出安卓免驱USB HOST FT311D
- ARM11 S3C6410系列教程之二:串口
- 深入理解ARM体系架构(S3C6410)---UART实例
- msp430中adc12与PWM配合使用
- 基于LaunchPad的Nokia5110显示
- msp430 按键 中断 轮询
- msp430 timerA interrupt
- MSP430 AD 单通道单次转换
- i/O 中断
- LM3S 串口收发心得
- MSP430F149学习笔记——时钟
- MSP430F149学习笔记——时钟
- mtk UART代码修改配置
- STM32 UART学习笔记
- stm32f207 UART驱动
- MSP430仿真器降级失败的解决办法
- STM32 串口+DMA的使用
- msp430学习笔记之时钟
- 关于软件I2C与MSP430通信的问题
- MSP430 Launchpad MSP430g2452 SHT10 温湿度传感器