当前位置:文档之家› MSP430串口收发数据程序

MSP430串口收发数据程序

MSP430串口收发数据程序

单片机MSP430F149-DS1302读写及串口收发程序

/******************************************************** * 文件名称: * IIC.c * 文件说明: * 使用口线模拟IIC * 程序使用波特率为2400,程序运行时需要在pc机上使用一个串口* 接收发送程序,任意发送字符,接收的字符为十六进制时间数据* MSP-FET430P149 Demo - Basic Clock, MCLK Sourced from HF XTAL XT2 * L.TCH * Feb 2007 * Built with IAR Embedded Workbench Version: 3.10A *******************************************************/ /*********************************************************/ #include /********************************************************* * 定义 *********************************************************/ #define RST BIT7 #define SDA BIT6 #define SCLK BIT5 char pbuf[7]; char clok[7]={0x16,0x15,0x14,0x13,0x12,0x04,0x07}; char cbuf; char bbuf; char *pda; char *pck; char *prg; /************************************************ 说明 ************************************************/ void Port_Init(void); void Init_CLK(void); void Init_UART0(void); void RST_Enable(void); void RST_Disable(void); void SCLK_HI(void); void SCLK_LO(void); void WriteByte(char nVal); char ReadByte(void); void WriteTo1302(char nAddr, char nVal); char ReadFrom1302(char nAddr);

msp430f5529简单uart程序

/*****用串口助手发什么回复什么****/ #include "" // ACLK = REFO = 32768Hz, MCLK = SMCLK = default DCO/2 = 1048576Hz // ,5——USCI_A0 TXD/RXD;,5——USCI_A2 TXD/RXD;,5——USCI_A3 TXD/RXD; void main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT P4SEL |=BIT4+BIT5 ; // ,7 = USCI_A1 TXD/RXD UCA1CTL1 |= UCSWRST; // **Put state machine in reset** UCA1CTL1 |= UCSSEL_2; // SMCLK UCA1BR0 = 9; // 1MHz 115200 (see User's Guide) UCA1BR1 = 0; // 1MHz 115200 UCA1MCTL |= UCBRS_1 + UCBRF_0; // Modulation UCBRSx=1, UCBRFx=0 UCA1CTL1 &= ~UCSWRST; // **Initialize USCI state machine** UCA1IE |= UCRXIE; // Enable USCI_A1 RX interrupt __bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled } // Echo back RXed character, confirm TX buffer is ready first,发送数据之前确定发送缓存准备好 #pragma vector=USCI_A1_VECTOR __interrupt void USCI_A1_ISR(void) { switch(__even_in_range(UCA1IV,4)) { case 0:break; // Vector 0 - no interrupt case 2: // Vector 2 - RXIFG while (!(UCA1IFG&UCTXIFG)); // USCI_A1 TX buffer ready UCTXIFG(USCI Transmit Interrupt Flag) //等待数据发送完成完成UCTXIFG置1 跳出循环 UCA1TXBUF = UCA1RXBUF; // TX -> RXed character break; case 4:break; // Vector 4 - TXIFG default: break; } } // UCTXIFG=0x02,UCA1IFG&UCTXIFG,当UCA1IFG的UCTXIFG位为1时,说明UCA1TXBUF 为空, //跳出while循环循环;当UCTXIFG位为0时UCA1TXBUF不为空,停在循环。

msp430串口1收发程序

#include char UART1_TX_BUF[60]; // 串口1 的发送缓冲区 char UART1_RX_BUF[60]; // 串口1 的接收缓冲区 int nTX1_len; char nRX1_len; char nRX1_Len_temp; //临时文件 char nTX1_Flag; int nSend_TX1; char UART1_RX_Temp[60]; inti; void Init_UART1(void) { U1CTL =0x00; //将寄存器的内容清零 U1CTL &=~SWRST; //SWRDT复位,uart允许 U1CTL += CHAR;//数据位为8bit U1TCTL |=SSEL0; //波特率发生器选择ACLK UBR0_1 = 0x03; UBR1_1 = 0x00; UMCTL_1 = 0x4A; //使用32khz晶振时,波特率为9600 ME2 |= UTXE1 + URXE1; //使能UART1的TXD和RXD IE2 |= URXIE1; //使能UART1的RX中断 IE2 |= UTXIE1; //使能UART1的TX中断 P3SEL |= BIT6; //设置P3.6为UART1的TXD P3SEL |= BIT7; //设置P3.7为UART1的RXD P3DIR |= BIT6; //P3.6为输出管脚 return; } voidInit_Port(void) { //将所有的管脚在初始化的时候设置为输入方式 P3DIR = 0; //将所有的管脚设置为一般I/O口 P3SEL = 0; return; } voidInit_CLK(void) { unsignedinti; BCSCTL1 = 0x00; //将寄存器的内容清零//XT2震荡器开启//LFTX1工作在低频模式//ACLK的分频因子为1 //xts=0

串口通信UART(msp430g2553)

#include "io430.h" #include "in430.h" #include "shumaguan.h" void UartPutchar(unsigned char c); unsigned char UartGetchar(); unsigned char temp=0; unsigned char number[2]={0}; void main( void ) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT BCSCTL1 = CALBC1_1MHZ; // Set DCO DCOCTL = CALDCO_1MHZ; P1DIR|=BIT6; P1OUT&=~BIT6; P1SEL = BIT1 + BIT2; // P1.1为RXD, P1.2为TXD P1SEL2 = BIT1 + BIT2; // P1.1为RXD, P1.2为TXD UCA0CTL1 |= UCSSEL_2; // 选择时钟BRCLK UCA0BR0 = 106; // 1MHz 9600 UCA0BR1 = 0; // 1MHz 9600 UCA0MCTL = UCBRS2 + UCBRS0; // 波特率=BRCLK/(UBR+(M7+...0)/8) UCA0CTL1 &= ~UCSWRST; // 初始化顺序:SWRST=1设置串口,然后设置SWRST=0,最后设置相应中断 IE2 |= UCA0RXIE; // 使能接收中断 while(1) { //UartPutchar(9); display_int(temp,0); delay(); } } /**********************************UART接收中断********************************/ #pragma vector=USCIAB0RX_VECTOR __interrupt void USCI0RX_ISR(void) { //while (!(IFG2&UCA0TXIFG)); // 等待发送完成

MSP430串口通信讲解

串行通信接口是处理器与外界进行数据传输最常用的方式之一。顾名思义,串行通信是指使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。与并行通信相比,串行通信速度较慢,但占用更少的I/O 资源,只需要少数几条线就可以在系统间交换信息,特别适用于计算机与计算机、计算机与外设之间的远距离通信。 串行通信可以分为同步通信和异步通信两种类型。如果带有同步时钟,则称为同步串行 通信,如常用的 SPI 和 I2C 接口就属于同步串行通信接口。如果没有同步时钟,依靠严格的时间间隔来传输每一比特,则称为异步串行通信。MSP430 系列单片机有两种串行通信接口,较早的 USART 模块和较新的 USCI 模块。 同步通信方式,是把许多字符组成一个信息组,这样,字符可以一个接一个地传输。但是,在每组信息(通常称为信息帧)的开始要加上同步字符,在没有信息要传输时,要填上空字符,因为同步传输不允许有间隙。同步方式下,发送方除了发送数据,还要传输同步时钟信号,信息传输的双方用同一个时钟信号确定传输过程中每1位的位置。 在异步通信方式中,两个数据字符之间的传输间隔是任意的,所以,每个数据字符的前后都要用一些数位来作为分隔位。

MSP430G2553单片机USCI模块原理图 串口通信所需配置: 1、时钟选择——以SMCLK时钟频率为1MHz为例。 ①选择SMCLK为串口通信频率。(P95页) ②设置SMCLK时钟频率为1MHz。 需要设置的寄存器:UCA0CTL1;(P95页)。

2、IO口定义为第二功能,即串口发送接收端口。 需要设置的寄存器:P1SEL|=BIT1+BIT2;,P1SEL2|=BIT1+BIT2;(中文P44页)。 2、数据传输格式

430单片机串口的程序升级

摘要:介绍了一种MSP430单片机通过串口升级程序的方法,并在MSP430F5438上得以实现。通过实验,证明此方法稳定、可靠,避免了利用仿真器更新程序的 繁琐,提高了效率。 关键词:MSP430F5438;串口;程序更新 随着性能的不断提高以及成本的降低,单片机在各个领域都得到了广泛的应用。尤其在信号的控制和处理方面,单片机以其超低的功耗、简单的操作成为设计者的首选。TI公司推出的MSP430x5xx系列单片机具有低电压、低功耗、高速处理能力以及配置灵活的接口等特点,是当今主流单片机之一。 同其他处理器一样,单片机正常工作除了需要硬件电路以外,还需要相应的用户应用程序。但应用程序在调试阶段以及实际使用时往往都需要更新,常规的方法需要打开机箱,将仿真器与单片机连接好,再更新程序。这种步骤比较繁琐,如果操作不当还会损坏设备。因此,如果能通过单片机已有的简单接口(如串口)更新应用程序,那么将给单片机的使用带来更大的方便。 1 总体思想 首先通过仿真器向单片机中写入一段小程序,称之为Bootloader程序。这个程序不是用户的应用程序,它的作用有两个:第一是在上电的一小段时间里实时检测串口,如果有上位机发出的更新程序命令,就发送握手信号,通知上位机发送更新代码,并将收到的更新代码写入单片机相应的Flash中;第二个作用是当检测到有应用程序存在时,跳转到应用程序的入口地址,执行应用程序。其流 程如图1所示。 上位机程序(VC++语言编写)的功能是,当用户发出更新程序的指令后,在一段时间内连续发送更新程序命令。如果收到单片机的应答信号,表示单片机准备开始接收更新代码。此时上位机读取已选择的代码文件,分段发给单片机。其流程如

MSP430g2553串口通信

MSP430g2553串口通信 MSP430的不同型号,其串行通讯工作模式是一样的。以MSP430G2553为例进行说明。MSP430G2553是20个引脚的16位单片机。具有内置的16位定时器、16k 的FLASH 和512B 的RAM ,以及一个通用型模拟比较器以及采用通用串行通信接口的内置通信能力。此外还具有一个10位的模数(A/D)转换器。其引脚排布如图1.1所示。其功能表如表1.1所示。 串行通讯模块主要由三个部分组成:波特率生成部分、发送控制器以及接收控制器。如图1.2所示。 一、UART 模式 在异步模式下,接收器自身实现帧的同步,外部的通讯设备并不使用这一时钟。波特率的产生是在本地完成的。异步帧格式由1个起始 位、7或8个数据位、校验位(奇/偶/无)、1个地址位、和1或2个停止位。一般最小帧为9个位,最大为13位。 图1.2 串行通讯模块内部结构图 图1.1 MSP430G2553引脚图

(一)UART的初始化 单片机工作的时钟源来自内部三个时钟或者外部输入时钟,由SSEL1、SSEL0,以决定最终进入模块的时钟信号BRCLK的频率。所以配置串行通讯的第一步就是选择时钟。 通过选择时钟源和波特率寄存器的数据来确定位周期。所以波特率的配置是串行通讯中最重要的一部分。波特率设置用三个寄存器实现:UxBR0(选择控制器0):波特率发生器分频系数低8位。UxBR1(选择控制器1):波特率发生器分频系数高8位。UxMCTL 数据传输的格式,以及数据传输的模式是通过配置控制寄存器UCTL来进行设置。 接收控制部分和发送控制部分。首先需要串行口进行配置、使能以及开启中断。串口接收数据一般采用中断方式,发送数据采用主动发送。当接收到一个完整的数据,产生一个信号:URXIFG0=1(类似于51单片机的接收中断标志位),表示接收完整的数据。当数据正在发送中,UTXIFG0=1,此时不能再发送数据,必须等当前数据发送完毕(UTXIFG0=0)才能进行发送。程序实例如下: Void UART_init() { WDTCTL = WDTPW + WDTHOLD; P1SEL|= 0x06;//I/O口的功能寄存器配置。为1时作为模块输出或者输出,0 为端口输入或者输出。配置P1.1,P1.2为串行口。 P2DIR=0x04;//串口发送端为输出,串口接收端为输入。0为输入,1为输出 U0CTL |= CHAR; // 配置控制寄存器,数据类型为8位。 U0TCTL |= SSEL0; // 选择时钟UCLK= ACLK。 U0BR0 = 0x45; // 分频系数的高8位,8MHz 时钟下波特率为115200 U0BR1 = 0x00; // 分频系数的低8位。 U0MCTL = 0x00; // 波特率的调整。 U0CTL&= ~SWRST;//系统复位。只有对SWRST 复位,USART 才能重新被允许。 而接收和发送允许标志URXE和UTXE不会因SWRST 而 更改。 ME1 |= UTXE0 + URXE0; //使能USART0 TXD/RXD模块USART中特有的使能配置。 IE1 |= URXIE0;//使能USART0 接收中断 _EINT();//开启全部中断。 _BIS_SR(LPM0_bits + GIE); // 初始化完毕,进入睡眠状态。等待工作。该程序直接调用。 } 发送数据函数: __interrupt void usart0_rx (void) { while (!(IFG1 & UTXIFG0)); // 判断发送缓冲区是否为空。 TXBUF0 = RXBUF0; // 将数据发送到串口。 }

msp430串口带缓存printf代码

#ifndef __sm_uart__ #define __sm_uart__ #endif #include "stdio.h" #define uart_rate 115200 #define MaxLenStr 100 #define uart_buf_tx_size 100 #define uart_buf_rx_size 100 #define MCLK_rate 1000000 //#define CH_TAB_OT //------------- char uart_rx_buf[uart_buf_rx_size]; char *inRxBuf = uart_rx_buf; char *outRxBuf = uart_rx_buf; //------------- char uart_tx_buf[uart_buf_tx_size]; char *inTxBuf =uart_tx_buf; char *outTxBuf =uart_tx_buf; u16 TIflag=1;//Note:It must be 1. /*---------------------------------------------------------------------*/ #ifndef uart_rate void init_uart(void) { P3SEL |= 0x30; // 3.4 3.5 USART0 TXD/RXD ME1 |= UTXE0 + URXE0; // Enabled USART0 TXD/RXD UCTL0 |= CHAR; // 8-bit character, SWRST=1 #if ENABLE_PENA UCTL0 |=PENA; //允许校验 #endif UTCTL0 |= SSEL0; // UCLK = Uclki UBR00 = 0x03; //L UBR10 = 0x00; //H UMCTL0 = 0x4a; // Modulation UCTL0 &= ~SWRST; // Initialize USART state machine IE1 |= URXIE0 + UTXIE0; // Enable USART0 RX/TX interrupt IFG1 &= ~UTXIFG0; // Clear inital flag on POR } #else //------------------------------------------- void init_uart(void) { P3SEL |= 0x30; // 3.4 3.5 = USART0 TXD/RXD ME1 |= UTXE0 + URXE0; // Enabled USART0 TXD/RXD UCTL0 |= CHAR; // 8-bit character, SWRST=1

MSP430单片机串口通信详解

MSP430单片机串口通信详解 #include"msp430G2553.h" #include "in430.h" void UartPutchar(unsigned char c); unsigned char UartGetchar(); unsigned char temp=0; unsigned char number[2]={0}; void main( void ) { WDTCTL = WDTPW + WDTHOLD; // Stop WDT BCSCTL1 = CALBC1_1MHZ; // Set DCO DCOCTL = CALDCO_1MHZ; P1DIR|=BIT6; P1OUT&=~BIT6; P1SEL = BIT1 + BIT2; // P1.1为 RXD, P1.2为TXD P1SEL2 = BIT1 + BIT2; // P1.1为 RXD, P1.2为TXD UCA0CTL1 |= UCSSEL_2; // 选择时钟BRCLK UCA0BR0 = 106; // 1MHz 9600 UCA0BR1 = 0; // 1MHz 9600 UCA0MCTL = UCBRS2 + UCBRS0; // 波特率

=BRCLK/(UBR+(M7+...0)/8) UCA0CTL1 &= ~UCSWRST; // 初始化顺序:SWRST=1设置串口,然后设置SWRST=0,最后设置相应中断 IE2 |= UCA0RXIE; // 使能接收中断 while(1) { //UartPutchar(9); // display_int(temp,0); __delay_cycles(10000); } } /**********************************UART接收中断*************************/ #pragma vector=USCIAB0RX_VECTOR __interrupt void USCI0RX_ISR(void) { //while (!(IFG2&UCA0TXIFG)); // 等待发送完成 //UCA0TXBUF = UCA0RXBUF; // TX ->; RXed character temp=UCA0RXBUF; }

MSP430单片机串口通信实例(已验证)

/*main.c ******************************************************************************* 功能:串口通信 日期:2013.9.11 姓名:MRT notice:无论接收发送只要标志位(TI RI)置位立马进入中断一般情况即使中断 不允许的情况下buffer中任然接收到数据并存储 ******************************************************************************* * **/ #include"msp430x14x.h" #include"whole.h" #include"main.h" struct power guss; unsigned char buffer_value; void main() { WDTCTL = WDTPW + WDTHOLD; init_usart(); init_clk(); _EINT(); while(1) { } } #pragma vector = USART0RX_VECTOR __interrupt void usart0_rx(void) { buffer_value++; guss.buffer[0] = RXBUF0; if(buffer_value==1) { guss.buffer[1] = RXBUF0; guss.value = guss.buffer[1]; guss.value<<=4; } if(buffer_value==2) { guss.buffer[2] = RXBUF0; buffer_value = 0; } }

msp430串口接收函数

msp430串口接收函数 篇一:基于msp430串口接收中断 #include void main { WDTCTL = WDTPW + WDTHOLD; BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; P1SEL |= BIT1 + BIT2; P1SEL2 |= BIT1 + BIT2;//需要对照着手册来看UCA0CTL1 |= UCSSEL_2;//选择串口的校验位 UCA0BR0 = 104;//9600 波特率的计算一般都存在误差 UCA0BR1 = 0; UCA0MCTL = UCBRS0;//校准波特率用所以要使用校准UCA0CTL1 &= ~UCSWRST;//让串口进行复位 IE2 |= UCA0RXIE;//开启接收中断 __bis_SR_register; } #pragma vector = USCIAB0RX_VECTOR __interrupt void USART_RECEIVE { UCA0TXBUF = UCA0RXBUF+1; while);//等待发送完毕可加可不加 }

篇二:MSP430串口收发程序 MSP430 标准库printf函数实现 20XX-08-02 21:22 关键是增加一个putchar函数。 代码如下: #include #include void NOP10 { _NOP ; _NOP ; _NOP ; _NOP ; _NOP ; _NOP ; _NOP ; _NOP ; _NOP ; _NOP ; } int putchar//注意不要改参数的类型和返回值的类型,否则printf调用是就有问题了。

msp430AD采样并串口发送

#include void clk_init() { P5SEL |= BIT4+BIT5; // Select XT1 UCSCTL6 &= ~(XT1OFF); // XT1 On UCSCTL6 |= XCAP_3; // Internal load cap UCSCTL0 = 0x0000; UCSCTL6 &= ~(XT1DRIVE_3); // Xtal is now stable, reduce drive strength UCSCTL3 = SELREF_0+FLLREFDIV_1; // Set DCO FLL reference = XT1 __bis_SR_register(SCG0); // Disable the FLL control loop UCSCTL1 = DCORSEL_3; // Select DCO range 16MHz operation UCSCTL2 =249; // Set DCO Multiplier for 8MHz // (N + 1) * FLLRef = Fdco // (249 + 1) * 32768 = 8MHz __bic_SR_register(SCG0); // Enable the FLL control loop UCSCTL4 |= SELS_0; // ACLK = LFTX1 (by default) // __delay_cycles(250000); } void adc_init() { P6SEL |= 0x01; // Enable A/D channel A0 ADC12CTL0 = ADC12ON+ADC12SHT0_12+ADC12MSC; // Turn on ADC12, set sampling time // set multiple sample conversion ADC12CTL1 = ADC12SHP+ADC12CONSEQ_2+ADC12DIV_0+ADC12SSEL_3; // Use sampling timer, set mode ADC12MCTL0 |= ADC12INCH_1; ADC12CTL1 = ADC12SHP+ADC12CONSEQ_2; // Use sampling timer, set mode ADC12IE = 0x01; // Enable ADC12IFG.0 ADC12CTL0 |= ADC12ENC; // Enable conversions ADC12CTL0 |= ADC12SC; // Start conversion } void uart1() { WDTCTL = WDTPW + WDTHOLD; // Stop WDT P3SEL |= BIT3+BIT4; // P3.3,4 = USCI_A0 TXD/RXD UCA0CTL1 |= UCSWRST; // **Put state machine in reset**

MSP430单片机串口的程序升级方法

MSP430单片机串口的程序升级方法 摘要:介绍了一种MSP430单片机通过串口升级程序的方法,并在MSP430F5438上得以实现。通过实验,证明此方法稳定、可靠,避免了利用仿真器更新程序的繁琐,提高了效率。关键词:MSP430F5438;串口;程序更新随着性能的不断提高以及成本的降低,单片机在各个领域都得到了广泛的应用。尤其在信号的控制和处理方面,单片机以其超低的功耗、简单的操作成为设计者的首选。TI公司推出的MSP430x5xx系列单片机具有低电压、低功耗、高速处理能力以及配置灵活的接口等特点,是当今主流单片机之一。同其他处理器一样,单片机正常工作除了需要硬件电路以外,还需要相应的用户应用程序。但应用程序在调试阶段以及实际使用时往往都需要更新,常规的方法需要打开机箱,将仿真器与单片机连接好,再更新程序。这种步骤比较繁琐,如果操作不当还会损坏设备。因此,如果能通过单片机已有的简单接口(如串口)更新应用程序,那么将给单片机的使用带来更大的方便。1 总体思想首先通过仿真器向单片机中写入一段小程序,称之为Bootloader程序。这个程序不是用户的应用程序,它的作用有两个:第一是在上电的一小段时间里实时检测串口,如果有上位机发出的更新程序命令,就发送握手信号,通知上位机发送更新代码,并将收到的更新代码写入单片机相应的Flash中;第二个作用是当检测到有应用程序存在时,跳转到应用程序的入口地址,执行应用程序。其流程。 上位机程序(VC++语言编写)的功能是,当用户发出更新程序的指令后,在一段时间内连续发送更新程序命令。如果收到单片机的应答信号,表示单片机准备开始接收更新代码。此时上位机读取已选择的代码文件,分段发给单片机。其流程。2 相关知识2.1 IAR设置常用的MSP430单片机软件开发环境是IAR C/C++Compiler for MSP430。用仿真器进行程序烧写以及仿真调试时,在Options→Linker→ Output→Format选项中选择的是“Debug information for C-SPY”,但如果要得到该程序文本格式的代码文件,需要选择Format中的Other选项。2.2 代码文件格式下面是一个生成的txt文件的内容: @后面的6C00表示起始地址,接下来的内容需要依次写入6C00开始的地址中。@FCFF表示程序的复位入口地址,单片机上电或者复位后,程序从这里开始运行。最末行q 表示结束。2.3 xcl文件上面生成的txt文件中的代码存放地址、复位入口地址以及中断入口地址都可以通过配置文件进行修改,这个文件就是xcl文件。该文件在安装目录的IAR Systems\Embedded Workbench 5.4 Evaluation\430\config中,本文所使用的单片机对应的配置文件是lnk430F543 8.xcl,将其复制到自己创建的工程中以便修改。在编译器的Options→Linker→Config→Linker command file选项中指定这个配置文件。下面是xcl文件中的部分内容:上面的配置信息含义是代码(Code)和数据常量(Constant data)放在5C00~FF7F和10000~45BFF两个空间中。中断向量的地址是FF80~FFFF,其中复位向量的地址是FFFE~FFFF。2.4 Bootloader程序和用户应用程序的关系地址空间分配。图3左面是MSP430F5438的空间分配。在正常的使用中,用户代码占用5C00~FF7F、10000~45BFF两块区域,中断向量为FF80~FFFF。但含有Bootloader的程序,就与之有所区别了。即Bootloader程序占用了一部分代码区,同时占有中断向量FF80~FFFF。而用户需要重新编写一个中断向量表,以及相应的入口地址。图3右面是Bootloader程序和用户程序以及自定义的中断向量在Flash中的位置。关于空间位置以及空间大小可以根据实际情况进行调整。 从图中可以看出,在代码空间中存在着两个独立的程序:Bootloader程序和用户程序。Bootloader完成的功能是在复位时通过上位机更新用户程序或者调用已经存在的用户程序。

MSP430f5437uart串口总结

MSP430F5437通过串口向PC发送字符串,使字符串显示在串口助手中。单片机不停地发送字符,流程图如图所示。 程序代码如下: #include "msp430x54x.h" unsigned char buffer[] = {"I'm MSP430!\n"}; void delay(unsigned int n) { unsigned int i,j; for(i=0;i

} void main(void) { unsigned int i; WDTCTL = WDTPW + WDTHOLD; // 关狗 P5SEL = 0xC0; // P5_6和P5_7第二功能打开,设置方向P5DIR = 0x40; UCA1CTL1 |= UCSWRST; // 首先使RST位置位,只有这样后面的设置才有效UCA1CTL1 |= UCSSEL_2; // SMCLK,为系统时钟1048576Hz UCA1BR0 = 9; // 1MHz 115200 UCA1BR1 = 0; // 1MHz 115200 UCA1MCTL |= UCBRS_1 + UCBRF_0; // 设置调整参数UCBRSx=1, UCBRFx=0 UCA1CTL1 &= ~UCSWRST; // RST复位 UCA1IE |= UCTXIE; // 使能发送中断允许 while(1) { while (!(UCA1IFG&UCTXIFG)); //等待BUF区准备好,当IFG=1时就表示准备好了for(i=0; i

MSP430串口收发程序

MSP430 标准库printf函数实现 2011-08-02 21:22 关键是增加一个putchar函数。 代码如下: #include #include void NOP10(void) { _NOP(); _NOP(); _NOP(); _NOP(); _NOP(); _NOP(); _NOP(); _NOP(); _NOP(); _NOP(); } int putchar( int c )//注意不要改参数的类型和返回值的类型,否则printf 调用是就有问题了。 { if (c == '\n') { TXBUF1 = '\r'; while((UTCTL1&0x01)==0); } TXBUF1 = c; while((UTCTL1&0x01)==0); return c; } void InitalUart1(void) { P4SEL |= 0x03; // P4.0,1 = USART1 TXD/RXD ME2 |= UTXE1 + URXE1; // Enable USART1 TXD/RXD UCTL1 |= CHAR; // 8-bit character UTCTL1 |= SSEL1; // UCLK = SMCLK UBR01 = 0x36; // 1MHz 19200 UBR11 = 0x00; // 1MHz 19200

UMCTL1 = 0x6B; // Modulation UCTL1 &= ~SWRST; // Initalize USART state machine IE2 |= URXIE1; // Enable USART1 RX interrupt //IFG2 |= UTXIFG1; } void main(void) { unsigned char i; i=0x10; WDTCTL = WDTPW + WDTHOLD; // Stop WDT FLL_CTL0 |= XCAP18PF; // Configure load caps InitalUart1(); _EINT(); // LPM0; while(1) { // while (!(IFG2 & UTXIFG1)); // USART1 TX buffer ready? // TXBUF1 = 'H'; //putchar(0x05); //putchar('c'); printf("%d",i); NOP10(); } } #pragma vector=USART1RX_VECTOR __interrupt void usart1_rx(void) { while (!(IFG2 & UTXIFG1)); // USART1 TX buffer ready? TXBUF1 = RXBUF1; // RXBUF1 to TXBUF0 //LPM0_EXIT; msp430各模块函数整合(1) 2010-08-13 14:27 /*************************************************** 程序功能:控制8个LED闪烁,用于测试下载功能是否正常 测试说明:观察LED闪烁 ***************************************************/ #include #include "EEPROM.c"

MSP430串口波特率的设置与计算

MSP430波特率的计算 给定一个BRCLK时钟源,波特率用来决定需要分频的因子N: N = fBRCLK/Baudrate 分频因子N通常是非整数值,因此至少一个分频器和一个调制阶段用来尽可能的接近N。 如果N等于或大于16,可以设置UCOS16选择oversampling baud Rate模式 注:Round():指四舍五入。 Low-Frequency Baud Rate Mode Setting 在low-frequency mode,整数部分的因子可以由预分频实现: UCBRx = INT(N) 小数部分的因子可以用下列标称公式通过调制器实现: UCBRSx = round( ( N –INT(N) ) × 8 ) 增加或减少UCBRSx一个计数设置,对于任何给定的位可能得到一个较低的最高比特误码率。如果确定是这样的情况UCBRSx设置的每一位必须执行一个精确的错误计算。 例1:1048576Hz频率下驱动以115200波特率异步通讯 ACLK = REFO = ~32768Hz, MCLK = SMCLK = default DCO = 32 x ACLK = 1048576Hz。 N = fBRCLK/Baudrate = 1048576/115200 = ~9.10 UCBRx = INT(N) = INT(9.10) = 9 UCBRSx = round( ( N –INT(N) )×8 ) = round( ( 9.10 –9) × 8 )=round(0.8 )=1 UCA0CTL1 |= UCSSEL_2;// 选SMCLK为时钟 UCAxBR0 = 9; UCAxBR1 = 0; UCAxMCTL = 0x02;//7-4:UCBRFx,3-1:UCBRSx,0:UCOS16 UCBRSx 为寄存器UCAxMCTL的1-3位,所以写入0x02(00000010) 例2:32768Hz频率下驱动以2400波特率异步通ACLK = REFO = ~32768Hz, MCLK = SMCLK = DCO ~1.045MHz N = fBRCLK/Baudrate = 32768/2400 = ~13.65 UCBRx = INT(N) = INT(13.65) = 13 UCBRSx = round( ( N –INT(N) )×8 ) = round( ( 13.65 –13) × 8 )=round(5.2)=5 UCA0CTL1 |= UCSSEL_1; // 选ACLK为时钟 UCAxBR0 = 13;UCAxBR1 = 0 ; UCAxMCTL = 0x0A;//7-4:UCBRFx,3-1:UCBRSx,0:UCOS16 UCBRSx为寄存器UCAxMCTL的1-3位,所以写入0x0A(00001010) Oversampling Baud Rate Mode Setting

相关主题
文本预览
相关文档 最新文档