msp430串口接收函数.docx
《msp430串口接收函数.docx》由会员分享,可在线阅读,更多相关《msp430串口接收函数.docx(9页珍藏版)》请在冰豆网上搜索。
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发送数据函数
//**************************************************