MSP430G2553寄存器资料

更新时间:2023-05-11 14:44:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

MSP430G2553学习笔记

常用赋值运算符:

清除:&=~ , 置位:|= ,

看门狗模块:

测试:&= , 取反:^= ,

WDT(看门狗)

IS1,IS0 选择看门狗定时器的定时输出,T是WDTCNT的输入时钟源周期

0 T x 2(15) 1 T x 2(13) 2 T x 2(9) 3 T x 2(6)

SSEL 选择WDTCNT的时钟源

0 SMCLK 1 ACLK

IS0、IS1、SSEL可确定WDT定时时间,WDT只能定时8种和时钟源相关的时间

CNTCL

TMSEL

0 1

NMI

当该位为1时,清除WDTCNT 工作模式选择

看门狗模式 定时器模式

选择RST/NMI引脚功能,在PUC后被复位 RST/NMI引脚为复位端

1

NMIES

0 1

HOLD

0 1

RST/NMI引脚为边沿触发的非屏蔽中断输入 选择中断的边沿触发方式 上升沿触发NMI中断 下降沿触发NMI中断

停止看门狗定时器工作,降低功耗 WDT功能激活

时钟禁止输入,计数停止

WDT(看门狗)配置语句

WDTCTL=WDTPW+WDTHOLD; //将WDTPW+WDTHOLD赋值给WDTCTL,关 闭看门狗定时器控制寄存器(Stop watchdog timer) IE1 |= WDTIE; //使能WDT中断 WDTCTL = WDT_ADLY_1000; //WDT 1 s / 4间隔计时器 WDTCTL = WDTPW + WDTHOLD + WDTNMI + WDTNMIES;

//

WDTCTL 由高8位口令和低8位控制命令组成,要写入操作WDT的控制命令, 出于安全原因必须先正确写入高字节看门狗口令。口令为5AH,如果口 令写错将导致系统复位。读WDTCTL时不需要口令。这个控制寄存器还 可以用于设置NMI引脚功能。 WDT 看门狗定时器(Watch Dog Timer),这是16位增计数器,由MSP430所选 定的时钟电路产生的固定周期时钟信号对计数器进行加法计数。如果计 数器事先被预置的初始状态不同,那么从开始计数到计数溢出为止所用 的时间就不同。WDTCNT不能直接通过软件存取,必须通过看门狗定时 器的控制寄存器WDTCTL来控制。 WDTPW WDTPW=0x5A00,是WDTCTL的密码,只有赋予这个值才能修改WDTCTL 这个寄存器 WDTHOLD WDTHOLD=0x0080,使WDTCTL的HOLD位置1

************************************************************************************** 时钟模块:

DCO(数字控制振荡器)

DCO.0-DCO.2 定义8种频率之一,可以分段调节DCOCLK频率,相邻两种频率相差 10%,而频率由注入直流发生器的电流定义

MOD.0-MOD.4 定义在32个DCO周期中插入的Fdco+1周期个数,而在下的DCO周期 中为Fdco周期,控制改换DCO和DCO+1选择的两种频率。如果DCO 常数为7,表示已经选择最高频率,此时不能利用MOD.0-MOD.4进行频 率调整

DCO配置语句

DCOCTL = 0; //选择最低DCOx和MODx设置 BCSCTL1=CALBC1_1MHZ; //为1MHZ BCSCTL1校准数据 DCOCTL=CALDCO_1MHZ; //为1MHZ DCOCTL校准数据,这两句同时使用 就使DCO设置为1MHZ CALBC1_1MHZ==0xFF; //校准常数抹去 __bis_SR_register(SCG1 + SCG0); //不用DCO Set_DCO(DELTA_1MHZ); //设置DCO和获得常量

BCSCTL1 基本时钟系统控制寄存器1 DCOCTL DCO时钟频率控制寄存器

CALBC1_1MHZ 这是为1MHZ BCSCTL1校准数据时所采用的标签 CALDCO_1MHZ 这是为1MHZ DCOCTL校准数据时所采用的标签

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

MCLK(主系统时钟)和SMCLK(子系统时钟)

SELM.1 SELM.0

0 1 2

3

DIVM.1 DIVM.0

0 1

选择MCLK时钟源

时钟源为DCOCLK(默认) 时钟源为DCOCLK

时钟源为LFXT1CLK(对于MSP430F11/12X),时钟源为XT2CLK(对于MSP430F13/14/15/16X) 时钟源为LFTXTICLK。 选择MCLK分频 1分频(默认) 2分频

2 3

SELS

0 1

4分频 8分频

选择SMCLK时钟源

时钟源为DCOCLK(默认)

时钟源为LFXT1CLK(对于MSP430F11/12X),时钟源为XT2CLK(对 于MSP430F13/14/15/16X)。

DIVS.1 DIVS.0 选择SMCLK分频。

0 1分频 1 2分频 2 4分频 4 8分频 DCOR 选择DCO电阻

0 内部电阻 1 外部电阻

PUC信号之后,DCOCLK被自动选择MCLK时钟信号,根据需要,MCLK的时钟源 可以另外设置为LFXT1或者XT2。 设置顺序如下:

[1]复位OscOff [2]清除OFIFG

[3]延时等待至少50us

[4]再次检查OFIFG,如果仍然置位,则重复[3]、[4]步骤,直到OFIFG=0为止。

XT2Sx

0 1 2 3

LFXT1Sx

XTS=0 XTS=1

0 1 2 3

XT2范围选择,选择XT2的频率范围 0.4~1MHZ 1~3MHZ 3~16MHZ 0.4~16MHZ

低频时钟选择和LFXT1范围选择 在LFXT1和VLO之间选择 选择LFXT1的频率范围 LFXT1上的32768hz晶体 保留 VLOCLK 外部数字时钟源

XCAPx

0 1 2 3

XT2OF

0 1

LFXT1OF

0 1

振荡器电容选择,XTS=0时,用于LFXT1的有效电容 1pf 6pf 10pf 12.5pf

XT2振荡器失效 不存在失效条件 存在失效条件 LFXT1振荡器失效 不存在失效条件 存在失效条件

MCLK(主系统时钟)和SMCLK(子系统时钟)配置语句

BCSCTL2|=SELM_0+DIVM_0; //选择DCOCLK为MCLK的时钟源并且对MCLK 的时钟源进行1/1分频 BCSCTL2|=DIVS_0; //对SMCLK的时钟源进行1/1分频

BCSCTL2 基本时钟系统控制寄存器2 SELM_0 BCSCTL2的第6、7位,对MCLK的时钟源进行选择 DIVM_0 BCSCTL2的第4、5位,对MCLK的时钟源进行分频

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

ACLK(辅助时钟)

XT2OFF 控制XT2振荡器的开启与关闭。

0 XT2振荡器开启。 1 XT2振荡器关闭(默认为XT2关闭)

XTS 控制LFXT1工作模式,选择需结合实际晶体振荡器连接情况

0 LFXT1工作在低频模式(默认) 1 LFXT1工作在高频模式(必须连接有高频相应的高频时钟源)

DIVA.0 DIVA.1 控制ACLK分频

0 不分频(默认) 1 2分频 2 4分频 3 8分频

XT5V 此位设置为0。

Resl1.0,Resl1.1,Resl1.2 三位控制某个内部电阻以决定标称频率。

Resl=0,选择最低的标称频率。 ┇

Resl=7,选择最高的标称频率。

ACLK(辅助时钟)配置语句

BCSCTL1|=DIVA_0; //对ACLK进行1/1分频

DIVA_0 BCSCTL1的第4、5位,对ACLK的时钟源进行分频 *******************************************************************************************

BCSCTL3 |= LFXT1S_2; // LFXT1 = VLO ,低频晶振选择内部的超低功耗,超低频率晶振。

IFG1 &= ~OFIFG; // 清除晶振错误标志位(Clear OSCFault flag)

_EINT();//总中断允许,打开总中断,相当于51的EA=1; _DINT();//关闭总中断,相当于51的EA=0;

LPM0; //开启低功耗模式0,进入低功耗模式,等待中断唤醒 temp = ~temp; //取反

P1OUT = temp; //P1口赋值

TACTL = 0; // Stop Timer

******************************************************************************************* IO端口模块:

IO口

所有P口都可作为通用IO口使用,所有P口都可进行字节操作和位操作

在PUC后全都为复位,作为输入时,只能读;作为输出时,可读可写

输入寄存器是只读寄存器,用户不能对其写入,只能通过读取该寄存器的内容知道IO口的输入信号,此时引脚方向必须为输入。

这是IO端口的输出缓冲器,

在读取时输出缓存的内容与脚引方向定义无关,改变方向寄存器的内容,输出缓存的内容不受影响。

该寄存器有8个标志位,对应相应的引脚是否有待处理的中断请求;这8个中断标志共用一个中断向量,中断标志不会自动复位,必须软件复位;外部中断事件的时间必须>=1.5倍的MCLK的时间,以保证中断请求被接受。

PxIE

1

:允许中断)

中断使能寄存器(0:禁止中断

PxREN 上拉/下拉电阻使能寄存器(0:禁止 1:启用)

IO口配置语句

按字节操作: P1DIR=0xff; PIOUT=0x20; P1DIR=0x00; data=P1IN; P1OUT |= 0x02; P1OUT &= ~0x02; P1DIR |= 0x13; P1SEL |= 0x11; P1OUT^=0X01; P1IE|=0x80; P1IES|=0x00;

按位操作:

P1OUT|=BIT0; P1OUT&=~BIT0; P1DIR=BIT0; P1DIR&=~BIT0; data=P1IN&BIT0; P1IE|=BIT0; P1IE&=~BIT0; P1DIR&=~BIT7; P1SEL = BIT1 + BIT2; P1SEL2 = BIT1 + BIT2; P1IFG=0; P1IFG&=~BIT7;

其他语句:

while (1) // Test P1.4 {

if ((0x08 & P1IN)) P1OUT |= 0x01; // if P1.3 set, set P1.0

//将P1口作为输出口 // P1口输出0x20 //将P1口作为输入口 //读取P1口外部输入值 // P1.1 = 1 // P1.1 = 0

// P1.0,1 和P1.4 输出

// P1.0,4 ACLK、SMCLK 输出 //P1.0取反 //P1.7中断允许 //P1.7上升沿触发

//P1.0输出1 //P1.0输出0

//将P1.0作为输出口 //将P1.0口作为输入

//读取P1.0口外部输入值

//打开P1.0外部中断 ,BIT0的值为0x01,即把P1IE 的第一位置1 //关闭P1.0外部中断 //P1.7为输入

//设置IO口,P1.2为发送TXD,P1.1为接收RXD //设置IO口,P1.2为发送TXD,P1.1为接收RXD //P1.7中断标志清除,对于多源中断必须先清中断标 志再打开中断 //P1.7中断标志清除

else P1OUT &= ~0x01; // else reset }

端口P3、P4、P5、P6是没有中断功能的,其它功能与P1、P2相同,在此不再作详尽说明。端口COM、S实现与LCD片的驱动接口,COM端是LCD片的公共端,S端为LCD片的段码端。LCD片输出端也可以用软件配置为数字输出端口,详情使用请查看其手册。

************************************************************************************** USART串行异步模式:

MSP430器件中有的型号有两个通信模块USART0和USART1,因此他们有两套寄存器.

0 校验禁止 1 校验允许

校验允许时,发送端发送校验,接收端接收该校验,地址位多机模式中,地址位包含校验操作. PEV 奇偶校验位,该位在校验允许时有效

0 奇校验 1 偶校验

SPB 停止位选择.决定发送的停止位数,但接收时接收器只检测1位停止位.

0 1位停止位 1 2位停止位

CHAR 字符长度

0 7位 1 8位

LISTEN 反馈选择.选择是否发送数据由内部反馈给接收器

0 无反馈 1 有反馈,发送信号由内部反馈给接收器

SYNC USART模块的模式选择

0 UART模式[异步] 1 SPI模式[同步]

MM 多机模式选择位

0 线路空闲多机协议 1 地址位多机协议

SWRST控制位 上电时该位置位,此时USART状态机和运行标志初始化成复状态

(URXIFG=0,URXIE=0,UTXIE=0,UTXIFG=1)。所有受影响的逻辑保持在复 位状态,直至SWRST复位。也就是说一次系统复位后,只有对SWRST复

CKPL

位,USART才能重新被允许。而接收和发送允许标志URXE和UTXE不会因SWRST而更改。SWRST位会使URXIE、UTXIE、URXIFG、RXWAKE、TXWAKE、RXERR、BRK、PE、OE及FE等复位。在串行口使用设置时,这一位起重要的作用。一次正确的USART模块初始化设置过程该是这样的: 先在SWRST=1时设置,设置完串口后再设置SWRST=0;最后如需要中断,则设置相应的中断使能。 0 1

时钟极性控制位

UCLKI信号与UCLK信号极性相同 UCLKI信号与UCLK信号极性相反

SSEL1、SSEL0 时钟源选择,此两位确定波特率发生器的时钟源

0 外部时钟UCLKI; 1 辅助时钟ACLK 2 子系统时钟SMCLK 3 主系统时钟MCLK

URXSE 接收触发沿控制位

0 没有接收触发沿检测 1 有接收触发沿检测

TXWAKE 传输唤醒控制

0 下一个要传输的字符为数据 1 下一个要传输的字符是地址

TXEPT 发送器空标志,在异步模式与同步模式时是不一样的。

正在传输数据或者发送缓冲器(UCAxTXBUF)有数据 1 表示发送移位寄存器和UCAxTXBUF空或者SWRST=1

FE

0 1 0 1

PE

OE

帧错误标志位 没有帧错误 帧错误

校验错误标志位 校验正确 校验错误 溢出标志位

0 1

BRK

0 1

URXEIE

0 1

URXWIE 当

0 1

无溢出 有溢出 打断检测位 没有被打断 被打断

接收出错中断允许位

不允许中断,不接收出错字符并且不改变URXIFG标志 允许中断,出错字符接收并且能够置位URXIFG

接收唤醒中断允许位,当接收到地址字符时,该位能够置位URXIFG,URXEIE=0,如果接收内容有错误,该位不能置位URXIFG。 所有接收的字符都能够置位URXIFG 只能接收到地址字符才能置位URXIFG

在各种条件下URXEIE和URXWIE对URXIFG的影响

0 1

RXERR

0 1

唤醒,在线路空闲多机模式,在接收到字符前检测到URXD线路空闲时, 该机被唤起,RXWAKE置位。 没有被唤醒,接收到的字符是数据 唤醒,接收的字符是地址 接收错误标志位 没有接收错误 有接收到错误

UCAxBR0、 UCAxBR1

波特率选择寄存器是用于存放波特率分频因子的整数部分。

UCBRSx 为寄存器UCAxMCTL的1-3位

UCBRFx 为寄存器

UCAxMCTL的4-7位,UCOS16为0位

波特率计算公式:

波特率=BRCLK/(UBR+(M7+M6+…M0)/8)

若波特率发生器的输入频率BRCLK不是所需波特率的整数倍,带有一小数,则 整数部分写UBR寄存器,小数部分由调整寄存器 UCAxMCTL的内容反映。

接收缓存存放移位寄存器最后接收的字符,可由用户访问。读接收缓存可以复位接收时产生的各种错误标志、RXWAKE位和URXIFGx位。如果传输7位数据,接收缓存内容右对齐,最高位为0。当收接和控制条件为真时,接收缓存装入当前接收到的字符。

当接收和控制条件为真时接收数据缓存结果

发送缓存内容可以传至发送移位寄存器,然后由UTXDx传输。对发送缓存进行 写操作可以复位UTXIFGx。如果传输出7位数据,发送缓存内容最高为0。

常用波特率及其对应设置参数与对应误差表

特殊功能寄存器

系统中断处理当各模块发生中断请求时并且相应的中断允许和通用中断允许位(GIE)置位时,中断服务程序按以下顺序动作:

[1]CPU处于活动状态:完成当前所执行的指令. [2]CPU处于停止状态:低功耗模式终止. [3]指向下一条指令的PC值压入堆栈. [4]SR压入堆栈

[5]如果在执行上条指令时已发生多个中断请求等待服务,则选择最高优先级者. [6]单中断源标志的中断请求位自动复位,多中断源标志仍保持置位等待软件服务.

[7]通用中断允许位GIE复位;CPUoff位、OSCOff位和SCG1位置位;状态位V、N、Z和C 复位;SCG0位保持不变.

[8]相应的中断向量值装入PC,程序从此地址继续执行中断处理.

SCG1 SCG0 SCG1 SCG0 OscOff CPUoff GIE N Z C 时钟控制位 置位关闭SMCLK

置位关闭DCO发生器 晶体振荡控制位,置位OscOff使晶体振荡器处于停止状态,置位OscOff 同时CPUoff位也置位。可用NMI或外部中断(系统当前中断允许)将CPU 唤醒。 CPU控制位,置位CPUoff可使CPU进入关闭模式,可以用所中断允许 将CPU唤醒。 全局中断标志位,控制可屏蔽中断,GIE置位CPU可响应可屏蔽中断, GIE复位CPU不响应可屏蔽中断 负标志 零标志 进位标志

初始状态:PUC后为000H

UTXE0、USART0 发送允许位

0 不允许 1 可允许

URXE0、USART0 接收允许位

0 不允许 1 可允许

USPIE0、USART0 发送与接收允许位(在SPI模式)

初始状态:PUC后为082H

UTXIFG0、USART0 表 URXIFG0、USART0

0 1

NMIIFG

OFIFG

0 1 产

WDTIFG

发送中断标志位(F14、15、16、44)此位上电为UTXIFG0=1,示可以向发送缓冲器写操作。对发送缓存进行写操作时可以复位UTXIFG0。

接收中断标志位(F14、15、16、44) 无接收到有效字符

接收到有效字符,读接收缓存可以复位接收时产生的各种错误标志、RXWAKE位和URXIFGx位。 NMI/RST 引脚信号位 振荡器失效时置位 无振荡器失效 振荡器失效,当XT扫荡器丢失大约100个振荡周期时设置TX振荡器失效标志OSCFault。OSCFault标志设置振荡器失效中断标志OFIFG,如果这时振荡器失效中断允许(OFIE)置位,则将生非屏蔽中断请求。OFIFG标志必须由用户软件来清除。 看门狗中断标志,看门狗模式时溢出或密钥不符时产生置位

初始状态:PUC后为000H

UTXIE0

0 1

URXIE0

USART发送中断允许位

不允许 允许

USART0接收中断使能位允许 不允许

1

ACCVIE NMIIE OFIE

0 1

WDTIE

0 1

允许

FLASH存贮器非法访问中断允许 NMI中断允许

振荡器失效中断允许 不允许 允许

看门狗允许,选看门狗模式无效 不允许 允许

UTXE1

0 1

URXE1

0 1

USPIE1

USART1发送允许位 不允许 可允许

USART1接收允许位 不允许 可允许

USART0发送与接收允许位(在SPI模式)

初始状态:PUC后为020H

UTXIFG1

URXIFG1

0 1

USART1发送中断标志位(F14、15、16、44)此位上电为 UTXIFG0=1,表示可以向发送缓冲器写字符。对发送缓存进行写操作时可以复位UTXIFG0。

USART1接收中断标志位(F14、15、16、44) 无接收到有效字符

接收到有效字符,读接收缓存可以复位接收时产生的各种 错误标志、RXWAKE位和URXIFGx位。

初始状态:PUC后为000H

UTXIE1 USART1发送中断允许位(F14、15、16、44)

URXIE1

USART1接收中断允许位(F14、15、16、44)

串口通信的一般步骤

1、选择串口模块(USCI_A0、USCI_B0)。 USCI_A0 : P1SEL = BIT1 + BIT2; P1SEL2 = BIT1 + BIT2; //设置IO口,P1.2为发送TXD,P1.1为接收RXD 2、在SWRST=1时,设置串口。

UCA0CTL=UCSWRST; // SWRST=1,复位USART(SWRST上电置位 时与其相关的位都在复位状态),并设置串口 3、选择波特率发生器时钟。

UCA0IRTCTL1=UCSSEL1; //UCLK=ACLK 4、使能发送、接收。

ME2=UCA0TXE1+UCA0RXE1; //使能RXD TXD 5、设置字符长度。

UCA0CTL=CHAR; //设置字符长度为8位,默认时为7位 6、设置波特率。 注:UCA0BR=UCA0BR0+UCA0BR1; 其值应大于3 UCA0BR0=8; //存放波特率分频因子的整数部分的低字节 UCA0BR1=0; //存放波特率分频因子的整数部分的高字节 UCA0MCTL = UCBRS2 + UCBRS0; //设置波特率为115200 7、SWRST=0,串口设置完毕。

UCA0CTL&=~UCSWRST; //恢复运行,初始化USCI状态机,在SWRST为1 之前设置串口 8、使能中断。

IE2=UCA0RXIE1; //使能接收中断

串口通信配置语句

UCA0CTL1 |= UCSWRST; //设置SWRST=1 UCA0CTL1 = UCSSEL_2 + UCSWRST; //使用SMCLK,保持SW复位 UCA0BR0 = 52; //波特率=8MHz/52=153.8KHz UCA0BR1 = 0;

UCA0MCTL = UCBRF_1 + UCOS16; //设置第一阶段调制器1 UCA0IRTCTL = UCIRTXPL2 + UCIRTXPL0 + UCIRTXCLK + UCIREN;

//脉冲长度= 6个时钟周期的一半 ,启 用UCA0CTL1 &= ~UCSWRST; //恢复运行,初始化USCI状态机,在 SWRST为1之前设置串口

例程1:

int main(void) {

WDTCTL = WDTPW + WDTHOLD; // Stop WDT P1DIR = 0xFF; // All P1.x outputs P1OUT = 0; // All P1.x reset P2DIR = 0xFF; // All P2.x outputs P2OUT = 0; // All P2.x reset P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD P1SEL2 = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD P3DIR = 0xFF; P3OUT = 0;

UCA0CTL1 |= UCSSEL_1; UCA0BR0 = 0x03; UCA0BR1 = 0x00; UCA0MCTL = UCBRS1 + UCBRS0; UCA0CTL1 &= ~UCSWRST; IE2 |= UCA0RXIE;

__bis_SR_register(LPM3_bits + GIE); }

例程2:

int main(void) {

WDTCTL = WDTPW + WDTHOLD; P1DIR = 0xFF; P1OUT = 0; P2DIR = 0xFF; P2OUT = 0; P1SEL = BIT1 + BIT2 ; P1SEL2= BIT1 + BIT2 ; P3DIR = 0xFF; P3OUT = 0; UCA0CTL1 |= UCSSEL_1; UCA0BR0 = 0x03; UCA0BR1 = 0x00; UCA0MCTL = UCBRS1 + UCBRS0; UCA0CTL1 &= ~UCSWRST; IE2 |= UCA0RXIE;

__bis_SR_register(LPM3_bits + GIE); }

例程3:

int main(void)

// All P3.x outputs // All P3.x reset // CLK = ACLK // 32kHz/9600 = 3.41 //

// Modulation UCBRSx = 3

// **Initialize USCI state machine**// Enable USCI_A0 RX interrupt // Enter LPM3, interrupts enabled// Stop WDT // All P1.x outputs // All P1.x reset // All P2.x outputs // All P2.x reset // P1.1 = RXD, P1.2=TXD // P1.1 = RXD, P1.2=TXD // All P3.x outputs // All P3.x reset // CLK = ACLK // 32kHz/9600 = 3.41 //

// Modulation UCBRSx = 3

// **Initialize USCI state machine**// Enable USCI_A0 RX interrupt // Enter LPM3, interrupts enabled

{

WDTCTL = WDTPW + WDTHOLD; // Stop WDT if (CALBC1_1MHZ==0xFF) { }

DCOCTL = 0; // Select lowest DCOx and MODx settings

BCSCTL1 = CALBC1_1MHZ; // Set DCO

// If calibration constant erased

while(1); // do not load, trap CPU!!

DCOCTL = CALDCO_1MHZ;

P1SEL = BIT1 + BIT2 ; P1SEL2 = BIT1 + BIT2 ; UCA0CTL1 |= UCSSEL_2; UCA0BR0 = 52; UCA0BR1 = 0; UCA0MCTL = UCBRS0; UCA0CTL1 &= ~UCSWRST; IE2 |= UCA0RXIE;

__bis_SR_register(LPM0_bits + GIE); }

例程4:

int main(void) {

WDTCTL = WDTPW + WDTHOLD; if (CALBC1_1MHZ==0xFF) {

while(1); }

DCOCTL = 0; settings

BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ;

P1SEL = BIT1 + BIT2 ; P1SEL2 = BIT1 + BIT2 ; UCA0CTL1 |= UCSSEL_2; UCA0BR0 = 104; UCA0BR1 = 0; UCA0MCTL = UCBRS0; UCA0CTL1 &= ~UCSWRST; IE2 |= UCA0RXIE;

__bis_SR_register(LPM0_bits + GIE); // P1.1 = RXD, P1.2=TXD // P1.1 = RXD, P1.2=TXD // SMCLK // 1MHz 19200 // 1MHz 19200

// Modulation UCBRSx = 1

// **Initialize USCI state machine** // Enable USCI_A0 RX interrupt // Enter LPM0, interrupts enabled // Stop WDT // If calibration constant erased

// do not load, trap CPU!!

// Select lowest DCOx and MODx // Set DCO // P1.1 = RXD, P1.2=TXD // P1.1 = RXD, P1.2=TXD // SMCLK // 1MHz 9600 // 1MHz 9600

// Modulation UCBRSx = 1

// **Initialize USCI state machine** // Enable USCI_A0 RX interrupt // Enter LPM0, interrupts enabled

}

*******************************************************************************************

定时器:

ID1,ID0 输入分频选择

00 不分频 01 2分频 10 4分频 11 8分频

MC1,MC0计数模式控制位

00停止模式 01增计数模式 10连续计数模式 11增/减计数模式

CLR定时器清除位

POR或CLR置位时定时器和输入分频器复位。CLR由硬件自动复位,其读出

始终为0。定时器在下一个有效输入沿开始工作。如果不是被清除模式控制暂停, 则定时器以增计数模式开始工作。

TAIE定时器中断允许位 0禁止定时器溢出中断 1允许定时器溢出中断

TAIFG定时器溢出标志位

增计数模式:当定时器由CCR0计数到到0时,TAIFG置位。 连续计数模式:当定时器由0FFFFH计数到0时,TAIFG置位。 增/

减计数模式:当定时器由CCR0减计数到0时,TAIFG置位。

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

TAR 16位计数器15--0

这是计数器的主体,内部可读写。

[1]修改TIMWER_A:当计数时钟不是MCLK时,写入应该在计数器停止计数时写, 因为它与CPU时钟不同步,可能引起时间竞争。

[2]TIMER_A控制位的改变:如果用TACLK控制寄存器中的控制位来改变定时器

工作,修改时定器应停止,特别是修改输入选择位、输入分频器和定时器清除位时。 输入时钟和软件所用的系统时钟异步可能引起时间竞争,使定时器响应出错。

TIMER_A有多个捕获比较模块,每个模块都有自己的控制寄存器CCTLx CAPTMOD1-0选择捕获模式 00禁止捕获模式 01上升沿捕获 10下降沿捕获

11上升沿与下降沿都捕获

CCISI1-0在捕获模式中用来定提供捕获事件的输入端 00选择CCIxA 01选择CCIxB 10选择GND 11选择VCC

SCS选择捕获信号与定时器时钟同步、异步关系 0异步捕获 1同步捕获

异步捕获模式允许在请求时立即将CCIFG置位和捕获定时器值,适用于捕获信 号的周期远大于定时器时钟周期的情况。但是,如果定时器时钟和捕获信号发生时 间竞争,则捕获寄存器的值可能出错。

在实际中经常使用同步捕获模式,而且捕获总是有效的。 SSCIx比较相等信号EQ UCAx将选择中的捕获、比较输入信号 CCIx(CCIxA,CCIxB,Vcc和GND)进行锁存,然后可由SCCIx读出。 CAP选择捕获模式还是比较模式。 0比较模式 1捕获模式

注意:同时捕获和捕获模式选择

如果通过捕获比较寄存器CCTLx中的CAP使工作模式从比较模式变为捕获模式, 那么不应同时进行捕获;否则,在捕获比较寄存器中的值是不可预料的,推荐的指 令顺序为:[1]修改控制寄存器,由比较模式换到捕获模式。 [2]捕获

OUTMODx选择输出模式 000输出 001置位

本文来源:https://www.bwwdw.com/article/n6be.html

Top