MSP430串口
MSP430串口

你参考一下别人的代码看看注释很详细#include <msp430x14x.h>unsigned char RxData;//全局变量,保存接收到的数据。
void BasicClockSet(){/*下面将片外高速晶体设为MCLK分四步:(1) 起动高晶体(2) 清除OFIFG 标志位(3) 至少等待50us。
(4) 查看震荡器失效标志位OFIFG是否清0,如果没有清0,则重复1至4步直到震荡器失效标志位OFIFG清0。
与之相关寄存器为:1.BCSCTL1和BCSCTL2(基础系统时钟控制寄存器)2.IE1中断使能寄存器的第二位OFIE,振荡器失效中断使能位。
3.IFG1中断标志寄存器的第二位OFIFG,振荡器失效标志位。
4.DCOCTL数字震荡器控制寄存器。
一. BCSCTL1设置(基础系统时钟控制寄存器1):1.XT2OFF=0,外部高速晶体开。
2.XTS=0,片外低速晶体的频率,0为低频模式。
3.DIVAx=00B,不将其进行分频,即分频比为14.XT5V不使用设为0。
5.RSELx=111,DOC的电阻选择,此时DOC震荡频率达到最大10000MHZ(理想状态)。
因此BCSCTL1=0000 0111B=0x47。
二.BCSCTL2设置(基础系统时钟控制寄存器2):1.SELMx=10B,选择片外高速晶体作为MCLK。
这两位应等到振荡器失效标志位清0后才置位2.DIVMx=00B,不将其进行分频,即分频比为13.SELS=0B,选择子系统时钟为DCO4.DIVSx=00B,不将其进行分频,即分频比为15.DCOR=0B,选择芯片内部电阻。
三.DCOCTL(数字震荡器控制寄存器)1.DCOx=111,DCO频波段选择,此时诜择最大2.MODx=000,调制选择,当DCOx=111B时MODx无效。
*//*下面将片外高速晶体设为主系统时钟。
*///(1) 起动片外高速晶体BCSCTL1&=~XT2OFF;//XT2OFF的宏为0x80。
基于MSP430的模拟SPI串口通信的实现

基于MSP430的模拟SPI串口通信的实现MSP430是德州仪器(Texas Instruments)公司生产的一款微控制器,内置有模拟外设接口和数字外设接口,非常适合用于嵌入式系统的开发。
SPI(Serial Peripheral Interface)是一种同步串行通信协议,常用于微控制器之间的通信。
在基于MSP430的模拟SPI串口通信实现中,我们需要使用MSP430的GPIO(General-Purpose Input/Output)外设模拟SPI通信协议的时序。
以下是基于MSP430的模拟SPI串口通信实现的步骤:1.配置MSP430的GPIO口为输出模式,并将片选信号(CS)、时钟信号(CLK)、主设备输入信号(MISO)设置为低电平,主设备输出信号(MOSI)设置为高电平。
2.配置MSP430的GPIO口中的片选信号(CS)为输出模式,并将其设置为高电平。
3.编写SPI通信的初始化函数,设置SPI的参数,如时钟分频比、数据位长度等。
4.实现SPI通信的发送函数。
将待发送的数据放入发送缓冲区,按照SPI通信协议的时序,通过MSP430的GPIO口将数据逐位发送出去。
5.实现SPI通信的接收函数。
按照SPI通信协议的时序,通过MSP430的GPIO口接收从外设传入的数据,并存储到接收缓冲区。
6.实现SPI通信的片选控制函数。
控制片选信号的输出,使得与其他外设通信时只选中对应的外设。
7.在主函数中调用上述SPI通信的功能函数,进行数据的发送和接收。
需要注意的是,以上步骤仅是基于MSP430的模拟SPI串口通信实现的一般步骤,具体的实现细节还需根据具体的硬件设备和通信协议来进行调整。
总结起来,基于MSP430的模拟SPI串口通信的实现主要包括配置GPIO口、初始化SPI通信参数、实现发送和接收函数,以及控制片选信号的输出等步骤。
通过这些步骤的完成,可以实现MSP430与其他外设之间的SPI串口通信。
单片机MSP430与PC机串口通讯设计

单片机MSP430与PC机串口通讯设计一、引言串口通信是指通过串行通信接口进行数据传输的一种通信方式。
单片机MSP430和PC机的串口通信设计可以实现二者之间的数据传输和通信交互。
本文将从串口介绍、硬件设计和软件实现等方面详细介绍该设计。
二、串口介绍串口是一种串行通信接口,常用的有RS232和RS485等。
RS232是一种使用较为广泛的串口通信协议。
RS232接口有三根线,分别为发送线Tx、接收线Rx和地线GND。
该协议规定,发送端与接收端之间的电平差为±3至±15V,其中正电平表示逻辑0,负电平表示逻辑1三、硬件设计1.MSP430硬件设计MSP430是一种低功耗的专用于嵌入式应用的16位RISC微控制器。
它具有丰富的外设资源,包括多个通用输入输出引脚(GPIO)和两个USART (UART)接口。
其中一个USART接口用于将MSP430与PC机连接。
2.PC机硬件设计PC机通过串口连接到MSP430。
首先,需要将PC机的串口RS232转换为TTL电平,即RS232转TTL电平转换器。
其次,将转换后的TTL电平通过杜邦线连接至MSP430的USART接口的Tx和Rx引脚。
四、软件实现1.MSP430软件设计(1)串口初始化:设置数据位长度、停止位、奇偶校验等。
(2)发送数据:将要发送的数据存入发送缓冲区,并使能发送中断。
(3)接收数据:开启接收中断,并将接收到的数据存入接收缓冲区。
(4)中断处理:发送中断和接收中断时,分别从发送缓冲区和接收缓冲区读取数据并发送/接收。
2.PC机软件设计(1)打开串口:设置串口参数,如波特率、数据位长度等。
(2)发送数据:向串口发送数据,可以通过打开的串口进行写入。
(3)接收数据:使用轮询或中断方式读取串口接收到的数据。
五、总结与展望本文详细介绍了单片机MSP430与PC机串口通信设计,主要包括了串口介绍、硬件设计和软件实现。
通过串口通信,MSP430和PC机可以实现数据传输和通信交互,从而满足各种嵌入式应用的需求。
MSP430串口波特率的设置与计算

MSP430串口波特率的设置与计算
波特率是指每秒钟传输的位数,单位为波特(bps)。
在MSP430中,我们可以通过计算和设置分频器的值来实现不同的波特率。
下面是计算MSP430串口波特率的步骤:
1.确定MSP430的工作频率。
2.确定所需的波特率。
3.根据波特率和工作频率的关系,计算出分频系数的值。
4.将计算得到的分频系数的低8位和高8位写入UCAxBR0和UCAxBR1寄存器。
例如,假设MSP430的工作频率为16MHz,我们想要设置的波特率为9600bps,那么计算步骤如下:
1.工作频率为16MHz。
2. 波特率为9600bps。
4. 将BRx的值分解为低8位和高8位。
假设取整数部分为104,小数部分取0.1667乘以256,得到43、则UCAxBR0的值为43,UCAxBR1的值为0。
将这两个值写入寄存器即可设置波特率为9600bps。
需要注意的是,不同型号的MSP430可能有不同的时钟源和分频系数的范围。
在设置波特率时,应查阅相关的芯片手册或数据表,对相应的寄存器进行设置。
总结起来,MSP430串口波特率的设置与计算包括确定工作频率,确定所需波特率,计算分频系数,写入寄存器。
通过合适的设置,可以实现稳定和准确的串口通信。
msp430串口接收函数

msp430串口接收函数篇一:基于msp430串口接收中断#includevoid 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#includevoid NOP10{_NOP ;_NOP ;_NOP ;_NOP ;_NOP ;_NOP ;_NOP ;_NOP ;_NOP ;_NOP ;}int putchar//注意不要改参数的类型和返回值的类型,否则printf调用是就有问题了。
{if{TXBUF1 = '\r';while==0);}TXBUF1 = c;while==0);return c;}void InitalUart1{P4SEL |= 0x03; // P4.0,1 = USART1 TXD/RXDME2 |= UTXE1 + URXE1;// Enable USART1 TXD/RXDUCTL1 |= CHAR; // 8-bit characterUTCTL1 |= SSEL1; // UCLK = SMCLK UBR01 = 0x36; // 1MHz 19200UBR11 = 0x00; // 1MHz 19200UMCTL1 = 0x6B; // ModulationUCTL1 &= ~SWRST; // Initalize USART state machine IE2 |= URXIE1; // Enable USART1 RX interrupt//IFG2 |= UTXIFG1;}void main{unsigned char i;i=0x10;WDTCTL = WDTPW + WDTHOLD; // Stop WDTFLL_CTL0 |= XCAP18PF;// Configure load capsInitalUart1 ;_EINT ;// LPM0;while{// while ); // USART1 TX buffer ready?// TXBUF1 = 'H';//putchar;//putchar;printf;NOP10 ;}}#pragma vector=USART1RX_VECTOR__interrupt void usart1_rx{while ); // USART1 TX buffer ready?TXBUF1 = RXBUF1; // RXBUF1 to TXBUF0//LPM0_EXIT;msp430各模块函数整合20XX-08-13 14:27/***************************************************程序功能:控制8个LED闪烁,用于测试下载功能是否正常测试说明:观察LED闪烁***************************************************/#include#include "EEPROM.c"#include "LCD1602.c"#include "DS18B20.c"void LED_delay;void KEY_delay;void EEPROM_delay;void sys_init;void LED_Init;void LED_Set;unsigned char LED_Read_Status;void LED_Test;void KEY_Init;unsigned char key;void KEY_Test;void SEG_Init;void SEG_Show;void EEPROM_Init;void Write_EEPROM;void Read_EEPROM;void LCD1602_Init;void LCD1602_Show;void DS18B20_Init;void TimerA_Delay_CFG;float get_DS18B20_temperature;unsigned char SEG_Table[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0 xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//0-f 段选信号,共阳 uchar UART_Rev_String[20]="\0";uchar rev_string_count=0;uchar rev_string_xxplete=0; //为1代表串口接收了一行字符串// =================================================== ===============// 延时函数// =================================================== ===============//************************************************* // function :LED_delay// parameter:dly// description :用于LED花样显示延时//************************************************* void LED_delay{unsigned int i;whilefor;}//************************************************* // function :KEY_delay// parameter:// description :用于消抖的延时//************************************************* void KEY_delay{uint tmp;for;}//************************************************* // function :EEPROM_delay// parameter:ts// description :用于消抖的延时//************************************************* void EEPROM_delay{while;}// =================================================== =============== // 系统函数// =================================================== ===============//************************************************* // function :sys_init// parameter:// description :延时一段时间//************************************************* void sys_init{WDTCTL = WDTPW + WDTHOLD; //关闭看门狗BCSCTL2 &=0xc0; //XT2CLK+2分频}// =================================================== =============== // LED相关函数//=================================================== ===============//************************************************* // function :LED_Init// parameter:// description :LED初始化程序// 8个LED接在P2.0~P2.7上。
【MSP430趣谈】MSP430第九讲之串口使用

【MSP430趣谈】MSP430第九讲之串⼝使⽤上次⼀讲中我们说到了定时器的两种写法,⼀种是利⽤寄存器进⾏书写的,另外⼀种是利⽤官⽅库函数进⾏书写的。
我们通过对⽐这两种写法,发现库函数居然写的要⽐寄存器还多,这不是更加不⽅便了吗。
其实库函数和寄存器应该说各有好处吧,因为TI官⽅给了我们很多的寄存器定义,所以相对看起来不是那么难懂,库函数的话也相对是简洁明了的。
我个⼈的观点是,在⼀些相对寄存器较少,运⾏速度较慢的单⽚机⾥⾯我们⽤寄存器写的话是最⾼效的,对于430来说,官⽅给的库相对的话运⾏速度不会和寄存器差点哪去(具体我也没测试过,瞎说),但库函数⼀定会⽐操作寄存器慢⼀点,因为他需要多步才可以配置到寄存器。
但是之后⼤家如果接触32的话也会发现同样存在寄存器和库函数的版本,也同样是这个道理,库函数慢⼀点,但是简洁明了,⽅便。
寄存器更快,但是识别度相对会低⼀点。
但对32的72MHz的运⾏速度也就基本没什么差了。
讲了这么多想说明⼀个什么道理呢?我们现在接触的单⽚机是算很底层的操作了,很底层的设计和应⽤了,相对的,我们有ARM9等等,这些复杂的芯⽚,就已经没有办法⽤所谓的寄存器进⾏操作了,因为它拥有的寄存器实在是太多了,所以就会有系统的产⽣,让芯⽚运⾏在系统上⾯,底层的东西集成了,减少了开发难度。
之后⼤家接触了其他语⾔,⽐如c++和java,其实这两个是类似的,只要会了⼀个另⼀个也基本花⼀点时间就可以学会了。
这两个语⾔的思想也和这个类似,把很多东西封装起来,你只要懂得怎么调⽤就好了,和我们调⽤函数类似,不⽤考虑函数具体是怎么实现这个功能的。
所以希望⼤家既可以明⽩寄存器具体是怎么操作的,同时学会应⽤库函数进⾏开发。
这⼀次我们将进⼊⼀个重要的篇章,通信协议,这个我们会通过⼏个章节来讲,主要介绍下⾯三种通信协议,⼀种是串⼝UART,⼀种是SPI,⼀种是IIC,三种我们都讲通过实例来说明。
这次我们要说的是串⼝UART的使⽤,串⼝应该算是⼀种最简单的通信⽅式了,我们通常值得串⼝指的是UART-Lite,也就是说它是由四根线组成,分别是VCC,RX,TX,GND。
430串口通信的资料

1 MSP430单片机I/O端口控制特点与8031单片机相比,MSP430的I/O端口的功能要强大的多,其控制的方法也更为复杂。
MSP430的I/O端口可以实现双向的输入、输出;完成一些特殊功能如:驱动LCD、A/D转换、捕获比较等;实现I/O 各种中断。
MSP430采用了传统的8位端口方式保证其兼容性,即每个I/O端口控制8个I/O引脚。
为了实现对I/O端口每一个引脚的复杂控制,MSP430中的每个I/O口都对应一组8位的控制寄存器(如图1)。
寄存器中的每一位对应一个I/O引脚,实现对该引脚的独立控制。
寄存器的功能和数目是由该I/O口所能完成的功能以及类型确定的。
[2]图1为MSP430的一个I/O端口的控制结构示意图。
对于最基本的只能完成输入、输出功能的I/O端口其控制寄存器只有3个。
其中,输入寄存器保存输入状态;输出寄存器保存输出的状态,方向寄存器控制对应引脚的输入、输出状态。
本文中用来实现I2C总线接口的P6.6、P6.7都属于这类的端口。
此外,有些I/O端口不但可以用作基本的输入输出,而且可以用作其他用途,比如可以作为LCD的驱动控制引脚。
这类端口的控制功能寄存器实现引脚功能状态的切换。
再者,有一类端口不但可以完成上述两种端口的功能,而且可以实现中断功能。
该类端口拥有图1中所有的寄存器,中断触发的方式以及中断的屏蔽性都可以通过相应的寄存器控制。
本文中使用的P2.0就属于该类端口,利用它来接收LM92发出的中断。
通过上述的控制结构,MSP430的I/O端口可以实现很丰富的功能。
不仅如此,其中一些I/O口还可以与MSP430中的特殊模块相结合完成更为复杂的工作。
如与捕获比较模块相结合可以实现串行通信,与A/D 模块结合实现A/D转换等。
此外,MSP430 I/O端口的电器特性也十分突出,几乎所有的I/O口都有20mA 的驱动能力,对于一般的LED、蜂鸣器可以直接驱动无需辅助电路。
许多端口内部都集成了上拉电阻,可以方便与外围器件的接口。
MSP430单片机实用技术讲座15 第10讲 MSP430串行异步通讯原理与实现

本讲讲述串口功能与连接的实现。
大多数MSP430芯片都有硬件异步通讯功能,有一些器件有两个通讯端口,也有少数没有。
没有硬件串口的芯片可以实现软件(模拟)串口。
下面表格为430系列芯片串口的情况。
对于没有硬件串口的芯片也可以实现软件串口,这里先讲硬件串口,后讲软件串口,然后再讲串口的链路实现。
1.串口功能的实现(1)硬件串口 图1是MSP430系列芯片硬件串口的框图。
在该框图中,串口通讯由通讯速度的控制(数据位流的产生)、接收控制、发送控制等三部分构成。
波特率生成部分由时钟输入选择与分频、波特率发生器、调整器、波特率寄存器等组成。
串行通信时,接收与发送以什么样的速率将数据位收进或送出呢,这个速率就由波特率生成构件控制。
图2为其较为详细的结构。
整个模块的时钟源来自内部时钟或外部输入时钟,由SSEL1、SSEL0选择,以决定最终进入模块的时钟信号BRCLK的频率。
时钟信号BRCLK送入一个15位的分频器,通过一系列的硬件控制,最终输出移出与移进两移位寄存器使用的移位位时钟BITCLK信号。
那么这个信号(BITCLK)究竟是怎样产生的呢,从图的下半部分的一个波特率产生例子可以看出,是分频器在起作用。
当计数器减计数到“0”时,输出触发器翻转,送给BITCLK信号。
所以BITCLK信号周期的一半就是定时器(分频计数器)的定时时间。
接收控制部分与发送控制部分分别由两个移位寄存器构成。
接收时,当接收到一个完整数据,产生一个信号(URXIFG0=1),表示接收到完整数据,可以将此数据取走。
而在发送时,当一个数据正在发送过程中,UTXIFG0=1,此时,不能再发送数据,必须等当前数据发送完毕(UTXIFG0=0)时,方可继续发送。
串口接收一般采用中断方式,而发送数据则多采用主动方式。
在本刊的网站(www.eleworld.com)里给出了一段简单的完整通讯程序,实现的功能是将接收的数据原样送回。
(2)软件串口 而对于没有硬件串口的型号,如何实现异步串口功能呢?先分析异步串口的原理。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
你参考一下别人的代码看看注释很详细#include <msp430x14x.h>unsigned char RxData;//全局变量,保存接收到的数据。
void BasicClockSet(){/*下面将片外高速晶体设为MCLK分四步:(1) 起动高晶体(2) 清除OFIFG 标志位(3) 至少等待50us。
(4) 查看震荡器失效标志位OFIFG是否清0,如果没有清0,则重复1至4步直到震荡器失效标志位OFIFG清0。
与之相关寄存器为:1.BCSCTL1和BCSCTL2(基础系统时钟控制寄存器)2.IE1中断使能寄存器的第二位OFIE,振荡器失效中断使能位。
3.IFG1中断标志寄存器的第二位OFIFG,振荡器失效标志位。
4.DCOCTL数字震荡器控制寄存器。
一. BCSCTL1设置(基础系统时钟控制寄存器1):1.XT2OFF=0,外部高速晶体开。
2.XTS=0,片外低速晶体的频率,0为低频模式。
3.DIVAx=00B,不将其进行分频,即分频比为14.XT5V不使用设为0。
5.RSELx=111,DOC的电阻选择,此时DOC震荡频率达到最大10000MHZ(理想状态)。
因此BCSCTL1=0000 0111B=0x47。
二.BCSCTL2设置(基础系统时钟控制寄存器2):1.SELMx=10B,选择片外高速晶体作为MCLK。
这两位应等到振荡器失效标志位清0后才置位2.DIVMx=00B,不将其进行分频,即分频比为13.SELS=0B,选择子系统时钟为DCO4.DIVSx=00B,不将其进行分频,即分频比为15.DCOR=0B,选择芯片内部电阻。
三.DCOCTL(数字震荡器控制寄存器)1.DCOx=111,DCO频波段选择,此时诜择最大2.MODx=000,调制选择,当DCOx=111B时MODx无效。
*//*下面将片外高速晶体设为主系统时钟。
*///(1) 起动片外高速晶体BCSCTL1&=~XT2OFF;//XT2OFF的宏为0x80。
do{//(2).清除震荡失效标志位。
IFG1 &= ~OFIFG;//OFIFG的宏为0x02,此意是清除振荡器失效标志。
//(3).至少等待50us。
{unsigned char i=0xff;while(i--);}//(4).查看震荡器失效标志位OFIFG是否清0,如果没有清0,//则重复1至4步直到震荡器失效标志位OFIFG清0。
}while((IFG1 & OFIFG));//直到振荡器失效标志清0。
//震荡失效标志清除后表明,高速晶体可以安全起动了。
BCSCTL2 |= SELM_2;//SELM_2的宏为0x1000,这样就起动了高晶体。
/*将片外低速晶体设为子系统时钟。
*///(1)DOC的电阻选择。
BCSCTL1 |= RSEL0+RSEL1+RSEL2;//表示三个都选了,即RSELx=111B。
//(2)DCO频波段选择。
DCOCTL |= DCO0+DCO1+DCO2;//表示三个都选了波段最高。
即DCOx=1110 0000B。
//(3).MODx低5位,调制选择,当DCOx=111B时MODx无效。
/*下面将辅助系统时钟ACLK设为手表晶体32768HZ。
*///ACLK的来源只有片外低速晶体。
且上电默认是片外低速晶体。
//只能设置其分频比,默认最大,DIVAx=00B,分频比为1。
}// /*下面为UARTx初始化过程。
void Uart0Init(){/*下面为UARTx初始化过程(1) 设置SWRST软件复位使能,使UART进入复位状态(2) 初始化所有的UART寄存器(包括UART控制寄存器UxCTL)(3) 设置模块使能寄存器,设置发送使能和接收使能。
(4) 清除软件复柆使能位SWRST(5) 设置中断使能寄存器IEx,使能接收中断使发送中断。
(可以不设置)(未遵守这些步聚可能会导致无法预料的错误。
)相关寄存器有:1. UxCTL,USART控制寄存器。
第7位PENA,奇偶效验使能位。
1使能。
第6位PEV,奇偶效验选择,0奇,1偶。
第5位SPB,停止位数,0,1位;1,2位。
第4位CHAR,数据位设置,0,7位;1,8位。
第3位LISTEN,1使能自己发自己收。
第2位SYNC,0,UART模式;SPI模式。
第1位MM,0,多机通讯空闲线路模式;1.地址位控制模式。
第0位SWRST,软件复位使能,0使能,1不使能。
2. UxTCTL,USART发送控制寄存器。
第7位Unused,第6位CKPL,外部时钟反向使能,0不使能。
第5-4位SSELx,时钟源选择。
01B,ACLK。
第3位URXSE,接收使能(多机通讯),多机通讯时,相当于51单片机中的SM2。
第2位TXWAKE,发送唤醒(多机通讯),0表数据,1表示地址(唤醒对方),相当51单片机中的TB8。
第1位Unused,第0位TXEPT,发送完成标志位,1完成。
3. UxRCTL, USART接收控制寄存器。
第7-4位,错误标志位。
第3位URXEIE,发送错误中断使能。
1.有错误也置位接收中断标志。
第2位URXWIE,接收唤醒中断使能。
1.只有接收到地址才置位接收中断标志。
第1位RXWAKE,唤醒使能(多机通讯),0表数据;1为地址(被唤醒),相当51单片机中的RB8。
第0位RXERR,有错标志位,相当于7-4位或的结果。
4. UxBR0, USART波特率设制寄存器0。
5. UxBR1, USART波特率设制寄存器1。
6. UxMCTL, USART调制波特率设制寄存器(能实行小数波待率)。
7. UxRXBUF, USART接收缓存。
8. UxTXBUF, USART发送缓存。
9. ME1,模块使能寄存器1。
第7位,USART0发送使能。
第6位,USART0接收使能。
第5-0位,其它用途。
10.ME2,模块使能寄存器2。
第7-6位,其它用途。
第5位,USART1发送使能。
第4位,USART1接收使能。
第3-2位,其它用途。
第1位,USART0发送使能。
第0位,USART0接收使能。
11.IE1,中断使能寄存器1。
12.IE2,中断使能寄存器2。
13.IFG1,中断标志寄存器1。
14.IFG2,中断标志寄存器2。
16.GIE,全局中断使能位(SR寄存器中)。
*//*UART初始全过程*/P3SEL |= 0x30;//P3.5/URXD0,P3.4/UTXD0。
//外设模块功能选择。
//(1) 设置USART控制寄存器U0CTL,SWRST软件复位使能,使UART进入复位状态//U0CTL |= PENA+PEV+CHAR+SWRST;//1101 0001B。
偶校验,8位数据。
SWRST默认1不必设置。
U0CTL |=CHAR;//(2) 初始化所有的UART寄存器(包括UART控制寄存器UxCTL)U0TCTL |= SSEL0;//TXEPT默认为1,不用设置。
//3.U0RCTL默认设置即可。
//4. U0BR0, USART波特率设制寄存器0。
//5. U0BR1, USART波特率设制寄存器1。
//6. UxMCTL, USART调制波特率设制寄存器(能实行小数波待率)。
U0BR0 = 0x03;//32768/9600=3.41。
U0BR1 = 0x00;//整数部分为3。
UMCTL0 = 0x56;//小数部分为4。
//(3) 设置模块使能寄存器,设置发送使能和接收使能。
ME1 |= UTXE0 + URXE0;//使能USART0发送和接收。
//(4) 清除软件复柆使能位SWRSTUCTL0 &= ~SWRST;//(5) 设置中断使能寄存器IEx,使能接收中断使发送中断。
IE1 |= URXIE0;//只允许接收中断。
不允许发送中断。
}//发送一个字节。
void SendData(unsigned char Data){TXBUF0=Data;//数据进入发送缓冲。
//UTXIFG0发送中断标志位。
while (!(IFG1 & UTXIFG0));//等待发送完成。
//不用清除发送完成标志位。
下次写一个字节将自动清除。
}//发送一个字符串。
void SendString(unsigned char *Str){while(*Str!='\0')SendData(*(Str++));}void main(void){/*WDTCTL看门狗定时器寄存器,对该寄存器操作时,高字节WDTPW 必须写入5AH,否则会引起PUC复位信号,WDTHOLD的宏为0x80,即WDTHOLD=1表示停止看门狗定时器*/WDTCTL = WDTPW + WDTHOLD; // 关器看门狗WDTCTL看门狗定时。
//系统基础时钟设置。
BasicClockSet();//UARTx初始化。
Uart0Init();//开全局中断。
_BIS_SR(GIE);SendString("开始接收...\n");//进入低功耗3模式。
_BIS_SR(LPM3_bits);while(1)if((IFG1 & URXIFG0)){SendString("我收到一个:");SendData(RxData);SendData('\n');//发完后进入低功耗模式3。
_BIS_SR(LPM3_bits);}}//进入中断将从中断中唤醒。
//下面是中断服务程序的格式。
#pragma vector=UART0RX_VECTOR//UART0RX_VECTOR为接收中断向量。
__interrupt void usart0_rx (void){LPM3_EXIT;//退出低功耗模式。
RxData=RXBUF0;//读接收缓冲区,取走数据。
}。