msp430串口接收函数.docx

上传人:b****4 文档编号:4415274 上传时间:2022-12-01 格式:DOCX 页数:9 大小:19.92KB
下载 相关 举报
msp430串口接收函数.docx_第1页
第1页 / 共9页
msp430串口接收函数.docx_第2页
第2页 / 共9页
msp430串口接收函数.docx_第3页
第3页 / 共9页
msp430串口接收函数.docx_第4页
第4页 / 共9页
msp430串口接收函数.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

msp430串口接收函数.docx

《msp430串口接收函数.docx》由会员分享,可在线阅读,更多相关《msp430串口接收函数.docx(9页珍藏版)》请在冰豆网上搜索。

msp430串口接收函数.docx

msp430串口接收函数

msp430串口接收函数

篇一:

基于msp430串口接收中断

  #include

  voidmain

  {

  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;

  }

  #pragmavector=USCIAB0RX_VECTOR

  __interruptvoidUSART_RECEIVE

  {

  UCA0TXBUF=UCA0RXBUF+1;

  while);//等待发送完毕可加可不加}

篇二:

MSP430串口收发程序

  MSP430标准库printf函数实现

  20XX-08-0221:

22

  关键是增加一个putchar函数。

  代码如下:

  #include

  #include

  voidNOP10

  {

  _NOP;

  _NOP;

  _NOP;

  _NOP;

  _NOP;

  _NOP;

  _NOP;

  _NOP;

  _NOP;

  _NOP;

  }

  intputchar//注意不要改参数的类型和返回值的类型,否则printf调用是就有问题了。

  {

  if

  {

  TXBUF1='\r';

  while==0);

  }

  TXBUF1=c;

  while==0);

  returnc;

  }

  voidInitalUart1

  {

  P4SEL|=0x03;//P4.0,1=USART1TXD/RXDME2|=UTXE1+URXE1;//EnableUSART1TXD/RXDUCTL1|=CHAR;//8-bitcharacterUTCTL1|=SSEL1;//UCLK=SMCLK

  UBR01=0x36;//1MHz19200

  UBR11=0x00;//1MHz19200

  UMCTL1=0x6B;//Modulation

  UCTL1&=~SWRST;//InitalizeUSARTstatemachine

  IE2|=URXIE1;//EnableUSART1RXinterrupt

  //IFG2|=UTXIFG1;

  }

  voidmain

  {

  unsignedchari;

  i=0x10;

  WDTCTL=WDTPW+WDTHOLD;//StopWDT

  FLL_CTL0|=XCAP18PF;//ConfigureloadcapsInitalUart1;

  _EINT;

  //LPM0;

  while

  {

  //while);//USART1TXbufferready?

  //TXBUF1='H';

  //putchar;

  //putchar;

  printf;

  NOP10;

  }

  }

  #pragmavector=USART1RX_VECTOR

  __interruptvoidusart1_rx

  {

  while);//USART1TXbufferready?

TXBUF1=RXBUF1;//RXBUF1toTXBUF0//LPM0_EXIT;

  msp430各模块函数整合

  20XX-08-1314:

27

  /***************************************************

  程序功能:

控制8个LED闪烁,用于测试下载功能是否正常

  测试说明:

观察LED闪烁

  ***************************************************/

  #include

  #include"EEPROM.c"

  #include"LCD1602.c"

  #include"DS18B20.c"

  voidLED_delay;

  voidKEY_delay;

  voidEEPROM_delay;

  voidsys_init;

  voidLED_Init;

  voidLED_Set;

  unsignedcharLED_Read_Status;

  voidLED_Test;

  voidKEY_Init;

  unsignedcharkey;

  voidKEY_Test;

  voidSEG_Init;

  voidSEG_Show;

  voidEEPROM_Init;

  voidWrite_EEPROM;

  voidRead_EEPROM;

  voidLCD1602_Init;

  voidLCD1602_Show;

  voidDS18B20_Init;

  voidTimerA_Delay_CFG;

  floatget_DS18B20_temperature;

  unsignedcharSEG_Table[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,

  0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//0-f段选信号,共阳ucharUART_Rev_String[20]="\0";

  ucharrev_string_count=0;

  ucharrev_string_xxplete=0;//为1代表串口接收了一行字符串

  //==================================================================

  //延时函数

  //==================================================================

  //*************************************************

  //function:

LED_delay

  //parameter:

dly

  //description:

用于LED花样显示延时

  //*************************************************

  voidLED_delay

  {

  unsignedinti;

  while

  for;

  }

  //*************************************************

  //function:

KEY_delay

  //parameter:

  //description:

用于消抖的延时

  //*************************************************

  voidKEY_delay

  {

  uinttmp;

  for;

  }

  //*************************************************

  //function:

EEPROM_delay

  //parameter:

ts

  //description:

用于消抖的延时

  //*************************************************

  voidEEPROM_delay

  {

  while;

  }

  //==================================================================//系统函数

  //==================================================================//*************************************************

  //function:

sys_init

  //parameter:

  //description:

延时一段时间

  //*************************************************

  voidsys_init

  {

  WDTCTL=WDTPW+WDTHOLD;//关闭看门狗

  BCSCTL2&=0xc0;//XT2CLK+2分频

  }

  //==================================================================//LED相关函数

  //==================================================================//*************************************************

  //function:

LED_Init

  //parameter:

  //description:

LED初始化程序

  //8个LED接在P2.0~P2.7上。

  //*************************************************

  voidLED_Init

  {

  P2SEL=;//相应位为0代表普通IO口功能

  P2DIR=;//相应位为1代表输出功能

  P2OUT=;//从原理图可知,当P2相应端口为高电平时LED亮LED_delay;//我们设置灯初始为闪烁一次

  P2OUT=;

  LED_delay;

  }

  //*************************************************

  //function:

LED_Set

  //parameter:

LED_Status//description:

配置8个LED的状态

  //*************************************************

  voidLED_Set

  {

  P2DIR=;//相应位为1代表输出功能

  P2OUT=;//配置八个LED灯的状态

  }

  //*************************************************

  //function:

LED_Read_Status

  //parameter:

  //description:

读出8个LED的状态

  //*************************************************

  unsignedcharLED_Read_Status

  {

  unsignedchartemp;

  P2DIR=;//配置八个LED灯的状态

  temp=P2IN;

  returntemp;

篇三:

MSP430串口使用总结

  MSP430串口使用总结

  _EINT;是打开全局中断,跟51中EA=1;效果相似_DINT;是关闭全局中断,跟51中EA=0;效果相似

  1、MSP430波特率发生器

  MSP430的波特率发生器比较特别

  波特率发生器是用波特率选择寄存器和调整控制寄存器来产生串行数据位定时。

  2、具有同步串口模式(SPI),异步通信模式(UART)

  作为异步通信时,P3.4、P3.5,P3.6、P3.7的第二功能分别是UTXD0、URXD0,UTXD1、URXD13、使用方法

  3、1程序架构

  配置寄存器设置工作模式{

  设置IO口为第二功能作为串口收发引脚;

  使能串口收发功能;//ME1:

ModuleEnableRegister1

  选择每帧数据位为7或者8;//UxCTL:

USARTControlRegister

  选择波特率发生器时钟源;//UxTCTL,USARTTransmitControlRegister配置波特性(查表得出值再配置UxBR0、UxBR1、UxMCTL);软件清除串口复位位(SWRST);若采用中断方式则使能接收、发送中断;}

  编写接收、发送程序,可采用查询方式或中断方式。

同51单片机不同的是:

UTXIFG、URXIFG在发送下一个数据和读取数据时被自动清零,无需软件清除。

3、2细节描述

  配置波特率时用户手册上有速查表,如下:

设置波特率时:

要选择合适的时钟源。

对于较低的波特率(9600/s),可选择ACLK;大于9600要选用SMCLK,因为波特率发生器分频系数要求大于3。

  UxBRO(低)UxBR1(高)值的计算:

选择的时钟源/波特率,在取整。

为了精确,MSP430设置了最小分频功能,通过UxMCTL来完成。

4、相关寄存器

  4、1ME1:

ModuleEnableRegister1

  {

  UTXE0:

ME1Bit7USART0transmitenable,thisbitenablesthetransmitterforUSART0

  0:

Modulenotenable1:

Modeleenable

  URXEO:

ME1Bit6USARTOreceiveenable,thisbitenablesthereceiverforUSART00:

Modulenotenabled1:

Moduleenable}

  UxCTL:

USARTControlRegister{

  4、2

  }

  CHAR:

UxCTLBit4Characterlength,7-bitor8-bitcharacterlength0:

7-bitdata1:

8-bitdata

  SWRST:

UxCTLBit0Softwareresetenable0:

Disabled,USARTresetreleasedforoperation

  1:

Eable,USARTlogicheldinresetstate

  4、3

  UxTCTL,USARTTransmitControlRegister{

  SSELx:

Bits5-4Sourceselect,ThesebitsselecttheBRCLKsourceclock

  00:

UCLKI01:

ACLK10:

SMCLK11:

SMCLK

  4、4

  4、54、6

  }

  UxBR0,USARTBaudRateControlRegister0,低8位UxBR1,USARTBaudRateControlRegister1,高8位

  UxMCTL,USARTModulationControlRegister

  UxMCTLBits7-0:

Modulationbits,thesebitsselectthemodulationforBRCLK

  IFG1,InterruptFlagRegister1

  UTXIFG0:

IFG1Bit7,USART0transmitinterruptflag,UTXIFGOissetwhenUOTXBUFis

  0:

Nointerruptpending//不挂起中断1:

Interruptpending//等待中断处理

  empty.

  URXIFG0:

IFG1Bit6,USART0receiveinterruptflag,URXIFG0issetwhenU0RXBUFhasreceived.4、7

  0:

Nointerruptpending1:

Interruptpending

  IE1,InterruptEnableRegister1

  UTXIE0Bit7,USART0transmitinterruptenable.ThisbitenablestheUTXIFG0interrupt

  0:

Interruptnotenable1:

Interruptenable

  URXIE0Bit6USART0receiveinterruptenable.ThisbitenablestheURXIFG0interrupt0:

Interruptnotenable1:

Interruptenable实例1

  5、1

  main.c

  /********************************************************************//电脑端必备RS232转RS485模块,否则无法进行直接的连接

  //RS485之间通过双绞线连接,如果距离近,可以不使用120欧电阻匹配

  //电脑端通过串口调试助手操作,先将数据由电脑发往开发板

  //开发板板会将收到的数据再发送到串口调试助手,接收采用中断模块,发送用查询//波特率更改请通过config.h文件,直接更改baud参数即可//时间:

20XX.09.19

  ********************************************************************/#include

  #defineCPU_F8000000)

  #definedelay_us__delay_cyclesx/1000000.0))#definedelay_ms__delay_cyclesx/1000.0))#defineucharunsignedchar#defineuintunsignedint#defineulongunsignedlong

  /*当BRCLK=CPU_F时用下面的公式可以计算,否则要根据设置加入分频系数*/#definebaud9600//设置波特率的#definebaud_settingCPU_F/baud))//#definebaud_h//#definebaud_l//低位

  /*RS485控制管脚*/

  #defineRS485_CTR1P5OUT|=BIT2;//控制线置高,RS485

  发送状态

  波提

  特

  率取

  计

  算高

  大公

  小式位

  #defineRS485_CTR0P5OUT&=~BIT2;//控制线置低,RS485接收状态//***********************************************************************//MSP430IO口初始化

  //***********************************************************************voidPort_Init{

  P5DIR|=BIT2;//P20口为RS485控制口,输出模式P5OUT|=BIT2;//置高P20

  }

  //***********************************************************************//系统时钟初始化

  //***********************************************************************voidClock_Init{uchari;BCSCTL1&=~XT2OFF;//打开XT2振荡器

  BCSCTL2|=SELM1+SELS;//MCLK为8MHZ,SMCLK为8MHZ

  do{

  IFG1&=~OFIFG;//清楚振荡器错误标志for_NOP;

  }

  //***********************************************************************//MSP430内部看门狗初始化

  //***********************************************************************voidWDT_Init{

  }

  while!

=0);//如果标志位1,则继续循环等待IFG1&=~OFIFG;

  WDTCTL=WDTPW+WDTHOLD;//关闭看门狗

  }

  //*************************************************************************//MSP430串口初始化

  //*************************************************************************voidUART_Init{

  U1CTL|=SWRST+CHAR;//复位SWRST,8位数据模式U1TCTL|=SSEL1;//SMCLK为串口U1BR1=baud_h;//BRCLK=8MHZ,Baud=BRCLK/NU1BR0=baud_l;//N=UBR+/8

  U1MCTL=0x00;//微调寄存器为0,波特率9600bpsME2|=UTXE1;//UART1发送使能ME2|=URXE1;//UART1接收使能

  U1CTL&=~SWRST;

  IE2|=URXIE1;//接收中断使能位

  P3SEL|=BIT6+BIT7;//设置IO口为第二功能模式,启用UART功能P3DIR|=BIT6;//设置TXD1口方向为输出

  }

  //*************************************************************************//串口1发送数据函数

  //**************************************************

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1