MSP430单片机深入学习笔记

合集下载

MSP430单片机笔记

MSP430单片机笔记

1、MSP430 端口功能P1、P2 I/O、中断功能、其他片内外设功能P3、P4、P5、P6 I/O、其他片内外设功能S、COM I/O、驱动液晶2、PxDIR 方向寄存器0 为输入模式1 为输出模式在PUC 后全都为位,作为输入时,只能读;作为输出时,可读可定。

3、PxIN 输入寄存器输入寄存器是只读的,用户不能对它写入,只能读取其IO 内容。

此时引脚方向必须为输入。

4、PxOUT 输出寄存器这是IO 端口的输出缓冲器,在读取时输出缓存的内容与脚引方向定义无关。

改变方向寄存器的内容,输出缓存的内容不受影响。

5、PxIFG 中断标专寄存器标志相应引脚是否有待处理中断信息。

0 没有中断请求1 有中断请求6、PxIES 中断触发沿选择寄存器0 上升沿使相应标志置位1 下降沿使相应标志置位7、PxIE 中断使能寄存器0 禁止中断1 允许中断8、PxSEL 功能择寄存器0 择引脚为I/O 功能。

1 择引脚为外围模块功能9、关于端口P3、P4、P5、P6端口P3、P4、P5、P6 是没有中断功能的,其它功能与P1、P2 相同。

所以在此不再作详尽说明。

10、关于端口COM、S这些端口实现与LCD 片的驱动接口,COM 端是LCD 片的公共端,S 端为LCD片的段码端。

LCD 片输出端也可以用软件配置为数字输出端口,详情使用请查看其册。

11、WDT 看门狗看门狗定时器实际上是一个特殊的定时器,它的的功能是当程序运行发生故障序时能使系统从新启动。

其原理就是发生的故障的时间满足规定的定时时间后,产一个非屏蔽中断,使系统的位。

12、定时器各种定时器功能看门狗定时器基本定时,当程序发生错误时执行一个受控的系统重启动。

基本定时器基本定时,支持软件和各种外围模块工作在低频率、低功耗条件下。

定时器A基本定时,支持同时进行的多种时序控制、多个捕获、比较功能和多种输出波形(PWM),可以以硬件方式支持串行通信。

定时器B基本定时,功能基本同定时器A,但比较定时器 A 灵活,功能更强大。

MSP430f5529学习笔记

MSP430f5529学习笔记


发板或目标板,同时也会得到很好的技术支持。如果自己制作的话也行, 也未尚不可,那就看个人水平了。

软件工具,因为现在都有学习板的工具软件,如 I建议还是使用 IAR 软件较方便, 因为使用的人群 较多,有问题还可请教,容易解决。

MSP430学习资料及教程,<<MSP430系列16位超低功耗单片机原理与应
(一)通用 I/O 口的设置-1
1.1 I/O 的简介 特点:①多种复用和设置(即可控制是否输入、是否输出、是否接上拉电 阻、是否接下拉电阻、是否可接受中断) ; ②一般情况下, P1和 P2都是具有中断能力的。 从 P1和 P2接口的各个 I/O 管脚引入的中断可以独立的被使能并且设置为上升沿或者下降沿触发。对应 的中断向量表分别为 P1IV 和 P2IV,它们只能进行字操作,并且 PAIV 这个寄存器 根本不存在。 ③P1、P2可合为 PA,P3、P4可合为 PB,…PC、PD。所以 P1为8位 BCD 0x00,PA 为16位 BCD 0x0000。当进行字操作写入 PA 口时,所有的16位都被 写入这个端口;当利用字节操作写入 PA 口的低字节时,高字节保持不变; ④由于430很多 I/O 和外围电路接线,所以这里常用位操作。如事先 定义(接下来也会用到,先在此声明)BIT0=0X01、BIT1=0X02、 BIT3=0X04…BIT7=0X80, 那么将 P1.1、 P1.3的输出设为1的时候, 就可以这样操作: P1OUT|=(BIT1+BIT3) 。这样显得很清楚。 ⑤没有用到的 I/O,要统一拉低为好。此外,当读入的数据长短小于 端口最大长度时,那些没有用到的位会被视零。 1.2 I/O 的简单配置 430I/O 的配置是用软件来实现的, 是通过相应的配置寄存器来实 现的。 (用到某个 I/O 时,一定要先配置好该 I/O,否则易出错) 1.2.1 I/O 方向设定寄存器 PXDIR 如设定 P1.1和 P1.2为输出状态 操作为: P1DIR |=(BIT1+BIT2)等价于 PADIR |=(BIT1+BIT2) 也等价于 PADIR_L|=(BIT1+BIT2。 拉高设定为输出,拉低设定为输入(默认) 。 1.2.2 I/O 输入设定寄存器 PXIN 如设定 P1.1和 P1.2的输入为低电平 操作为: P1IN &=~(BIT1+BIT2) 。 1.2.3 I/O 输出设定寄存器 PXOUT ①当只用为简单的输出时: 如设定 P1.1和 P1.2输出高电平 操作为: P1OUT |=(BIT1+BIT2) 。 ②如果该引脚为正常 I/O 功能,且当前已设定为输入方向,且上拉/ 下拉电阻寄存器是有效地。那么 PXOUT 可以用来配置上拉和下拉电阻: 低电平为下拉电阻; 高电平为上拉电阻; 1.2.4 上拉/下拉电阻使能寄存器 PXREN 低电平该寄存器为无效状态; 高电平该寄存器为有效状态;

MSP430f247单片机笔记

MSP430f247单片机笔记

POR信号产生源:1.给器件上电2.复位管脚产生复位信号超级电压监视电路发现电压不稳时,产生POR信号PUC信号产生源:1.产生了POR信号2.看门狗定时器溢出3.看门狗定时器安全密匙错误空间安全密匙错误系统复位后器件的初始化状态:POR信号后NMI管脚为复位模式O被切换到输入状态3.外设模块和相应的寄存器被初始化到确定的状态4.状态寄存器被复位5.看门狗定时器被打开回到以确定位置重新开始读取数据软件初始化:1.设置看门狗2.配置外设资源430单片机中断种类有三种:1.系统复位2.非可屏蔽中断3.可屏蔽中断非可屏蔽中断产生有三种情况:1.非可屏蔽管脚RST/NMI被配置为NMI模式时,产生了用户设定的电平跳变2.振荡器失效3.对FLASH空间的错误访问非屏蔽中断NMI为多源中断,只有一个中断向量,该中断向量对应着多个中断标志,进入该中断向量后用户先要判断那种原因导致了非可屏蔽中断(通过标志位判断,OFIFG=1,振荡器失效中断;ACCVIFG=1,.对FLASH空间的错误访问中断;NMIFG=1,非可屏蔽管脚RST/NMI被配置为NMI模式时,产生了用户设定的电平跳变产生的中断;),这些中断的中断标志位都要通过软件进行手动清除;可屏蔽中断:可通过状态寄存器中的通用中断标志位GIE来使能控制;可屏蔽中断的执行过程:1.可屏蔽中断发生到执行一般需要大约6个机器周期2.单源中断的中断标志位可通过硬件自动清除,多源中断的中断标志位要通过软件清除;状态寄存器被清除,所有低功耗模式结束,CPU进入活跃模式,同时GIE通用中断标志位被清除,其它中断无法打断,用户可通过软件再次打开;4.中断返回时,SR状态寄存器被还原,CPU置为中断前的模式,GIE重新置位,GIE=1;在PUC信号后,由DCOCLK作MCLK的时钟信号,根据需要可将MCLK的时钟源另外设置为LFXT1或XT2,设置顺序如下。

(1). 清OSCOFF/XT2(开启外部晶振)(2). 清OFIFG(3). 延时等待至少50uS(4). 再次检查OFIFG,如果仍置位,则重复(1)~(4)步,直到OFIFG=0为止。

MSP430单片机深入学习笔记

MSP430单片机深入学习笔记

复位1.POR信号只在两种情况下产生:➢微处理器上电。

➢RST/NMI管脚被设置为复位功能,在此管脚上产生低电平时系统复位。

2.PUC信号产生的条件为:➢POR信号产生。

➢看门狗有效时,看门狗定时器溢出。

➢写看门狗定时器安全健值出现错误。

➢写FLASH存储器安全键值出现错误。

3.POR信号的出现会导致系统复位,并产生PUC信号。

而PUC信号不会引起POR信号的产生。

系统复位后(POR之后)的状态为:➢RST/MIN管脚功能被设置为复位功能。

➢所有I/O管脚被设置为输入。

➢外围模块被初始化,其寄存器值为相关手册上注明的默认值。

➢状态寄存器(SR)复位。

➢看门狗激活,进入工作模式。

➢程序计数器(PC)载入0xFFFE(0xFFFE为复位中断向量)处的地址,微处理器从此地址开始执行程序。

4.典型的复位电路有以下3种:(1)由于MSP430具有上电复位功能,因此,上电后只要保持RST/NMI(设置为复位功能)为高电平即可。

通常的做法为,在RST/NMI管脚接100kΩ的上拉电阻,如图1-5(a)所示。

(2)除了在RST/NMI管脚接100kΩ的上拉电阻外,还可以再接0.1μF的电容,电容的另一端接地,可以使复位更加可靠。

如图1-5(b)所示。

(3)由于MSP430具有极低的功耗,如果系统断电后立即上电,则系统中电容所存储的电荷来不及释放,此时系统电压不会下降到最低复位电压以下,因而MSP430不会产生上电复位,同时RST/NMI管脚上也没有足够低的电平使MSP430复位。

这样,系统断电后立即上电,MSP430并没有被复位。

为了解决这个问题,可增加一个二极管,这样断电后储存在复位电容中的电荷就可以通过二极管释放,从而加速电容的放电。

二极管的型号可取1N4008。

如图1-5(c)所示。

系统时钟振荡器:1.DCO 数控RC振荡器,位于芯片内部。

不用时可以关闭2.LFXT1 可以接低频振荡器,典型的如32.768kHz的钟表振荡器,此时振荡器不需要接负载电容。

msp430学习的深度解析和总结

msp430学习的深度解析和总结

msp430学习的深度解析和总结一、MSP430开发环境建立1.安装IAR dor msp430 软件,软件带USB仿真器的驱动。

2.插入USB仿真器,驱动选择安装目录的/drivers/TIUSBFET3.建立一个工程,选择"option"选项,设置a、选择器件,在"General"项的"Target"标签选择目标器件b、选择输出仿真,在"Linker"项里的"Output"标签,选择输出"Debug information for C-SPY",以输出调试信息用于仿真。

c、若选择"Other",Output下拉框选择"zax-m"即可以输出hex文件用以烧录,注意,此时仿真不了。

d、选择"Debugger"项的"Setup"标签,"Driver"下拉框选择"FET Debugger"e、选择"FET Debugger"项的"Setup"标签,"Connection"下拉框选择"Texas Instrument USB-I"4.仿真器的接口,从左到右分别为" GND,RST,TEST,VCC"二、IO口数字输入/输出端口有下列特性:每个输入/输出位都可以独立编程。

允许任意组合输入、输出。

P1 和P2 所有8 个位都可以分别设置为中断。

可以独立操作输入和输出数据寄存器。

可以分别设置上拉或下拉电阻。

在介绍这四个I/O口时提到了一个“上拉电阻”那么上拉电阻又是一个什么东东呢?他起什么作用呢?都说了是电阻那当然就是一个电阻啦,当作为输入时,上拉电阻将其电位拉高,若输入为低电平则可提供电流源;所以如果P0口如果作为输入时,处在高阻抗状态,只有外接一个上拉电阻才能有效。

Msp430学习笔记

Msp430学习笔记

Msp430学习笔记一、简介图1 基本结构图2 pin designation结论:1.基本每个管脚都可以复用2.外围功能模块丰富端口介绍(32 I/O pins)1.端口P1和P2具有输入、输出、中断和外部模块功能。

这些功能可以通过各自的7个控制寄存器的设置来实现。

(1)PxDIR 输入输出方向寄存器rw(2)PxIN 输入寄存器r(3)PxOUT 输出寄存器r(4)PxIFG 中断标志寄存器r(5)PxIES 中断触发沿选择寄存器rw(6)PxIE 中断使能寄存器rw(7)PxSEL 功能选择寄存器rw2.其他端口:四个控制寄存器(除去中断相关)看看例程二、时钟部分1.时钟寄存器设置SCFQCTL 系统时钟控制寄存器(倍频,反馈后默认是31,31+1=32)SCFI0 系统时钟频率调整器0(锁频环反馈中的分频(实质最终是倍频))SCFI1 系统时钟频率调整器1(自动控制调整,无需软件设置)FLL_CTL0 FLL+控制器0 (反馈中是否分频、选择LFXT1晶振的有效电容)FLL_CTL1 FLL+控制器1 (振荡器控制、时钟源对应的振荡器的选择,默认情况下:振荡器打开,MCLK选择DCOCLK,SMCLK选择DCOCLK)图时钟模块2.工作模式:One Active Mode、Five Power Saving ModesMSP430是一个特别强调低功耗的单片机系列,尤其适用于采用电池供电的长时间工作场合。

系统根据应用和节能使用不同的时钟信号,这样可以合理利用系统的电源,实现整个系统的超低功耗。

中断是MSP430微处理器的一大特色。

有效地利用中断可以简化程序,并且提高执行效率和系统稳定性。

几乎所有的msp430系统单片机的每个外围模块都能产生中断,为MSP430针对事件(外围模块产生的中断)进行的编程打下基础。

MSP430在没有事件发生时处于低功耗模式,事件发生时通过中断唤醒CPU,时间处理完毕后CPU再次进入低功耗模式,由于CPU运算速度和推出低功耗的速度很快,所以在应用中,CPU大部分时间都处于低功耗状态,使得系统的整体功耗极大地降低。

MSP430G2553学习笔记(数据手册)概要

MSP430G2553学习笔记(数据手册)概要

MSP430G2553学习笔记(数据手册)MSP430G2553性能参数(DIP-20) 工作电压范围:1.8~3.6V。

5种低功耗模式。

16位的RISC结构,62.5ns指令周期。

超低功耗:运行模式-230µA;待机模式-0.5µA;关闭模式-0.1µA;可以在不到1µs的时间里超快速地从待机模式唤醒。

基本时钟模块配置:具有四种校准频率并高达16MHz的内部频率;内部超低功耗LF振荡器;32.768KHz晶体;外部数字时钟源。

两个16 位Timer_A,分别具有三个捕获/比较寄存器。

用于模拟信号比较功能或者斜率模数(A/D)转换的片载比较器。

带内部基准、采样与保持以及自动扫描功能的10位200-ksps 模数(A/D)转换器。

16KB闪存,512B的RAM。

16个I/O口。

注意:MSP430G2553无P3口!MSP430G2553的时钟基本时钟系统的寄存器DCOCTL-DCO控制寄存器DCOxDCO频率选择控制1MODxDCO频率校正选择,通常令MODx=0注意:在MSP430G2553上电复位后,默认RSEL=7,DCO=3,通过数据手册查得DCO频率大概在0.8~1.5MHz之间。

BCSCTL1-基本时钟控制寄存器1XT2OFF不用管,因为MSP430G2553内部没有XT2提供的HF时钟XTS不用管,默认复位后的0值即可DIV Ax设置ACLK的分频数00 /101 /210 /411 /8RSELxDCO频率选择控制2BCSCTL2-基本时钟控制寄存器2SELMxMCLK的选择控制位00 DCOCLK01 DCOCLK10 LFXT1CLK或者VLOCLK11 LFXT1CLK或者VLOCLK DIVMx设置MCLK的分频数00 /101 /210 /411 /8SELSSMCLK的选择控制位0 DCOCLK1 LFXT1CLK或者VLOCLK DIVSx设置SMCLK的分频数00 /101 /210 /411 /8DCORDCO直流发生电阻选择,此位一般设00 内部电阻1 外部电阻BCSCTL3-基本时钟控制寄存器3XT2Sx不用管LFXT1Sx00 LFXT1选为32.768KHz晶振01 保留10 VLOCLK11 外部数字时钟源XCAPxLFXT1晶振谐振电容选择00 1pF01 6pF10 10pF11 12.5pFmsp430g2553.h中基本时钟系统的内容/************************************************************* Basic Clock Module************************************************************/#define __MSP430_HAS_BC2__ /* Definition to show that Module is available */SFR_8BIT(DCOCTL); /* DCO Clock Frequency Control */SFR_8BIT(BCSCTL1); /* Basic Clock System Control 1 */SFR_8BIT(BCSCTL2); /* Basic Clock System Control 2 */SFR_8BIT(BCSCTL3); /* Basic Clock System Control 3 */#define MOD0 (0x01) /* Modulation Bit 0 */#define MOD1 (0x02) /* Modulation Bit 1 */#define MOD2 (0x04) /* Modulation Bit 2 */#define MOD3 (0x08) /* Modulation Bit 3 */#define MOD4 (0x10) /* Modulation Bit 4 */#define DCO0 (0x20) /* DCO Select Bit 0 */#define DCO1 (0x40) /* DCO Select Bit 1 */#define DCO2 (0x80) /* DCO Select Bit 2 */#define RSEL0 (0x01) /* Range Select Bit 0 */#define RSEL1 (0x02) /* Range Select Bit 1 */#define RSEL2 (0x04) /* Range Select Bit 2 */#define RSEL3 (0x08) /* Range Select Bit 3 */#define DIVA0 (0x10) /* ACLK Divider 0 */#define DIVA1 (0x20) /* ACLK Divider 1 */#define XTS (0x40) /* LFXTCLK 0:Low Freq. / 1: High Freq. */ #define XT2OFF (0x80) /* Enable XT2CLK */#define DIVA_0 (0x00) /* ACLK Divider 0: /1 */#define DIVA_1 (0x10) /* ACLK Divider 1: /2 */#define DIVA_2 (0x20) /* ACLK Divider 2: /4 */#define DIVA_3 (0x30) /* ACLK Divider 3: /8 */#define DIVS0 (0x02) /* SMCLK Divider 0 */#define DIVS1 (0x04) /* SMCLK Divider 1 */#define SELS (0x08) /* SMCLK Source Select 0:DCOCLK /1:XT2CLK/LFXTCLK */#define DIVM0 (0x10) /* MCLK Divider 0 */#define DIVM1 (0x20) /* MCLK Divider 1 */#define SELM0 (0x40) /* MCLK Source Select 0 */#define SELM1 (0x80) /* MCLK Source Select 1 */#define DIVS_0 (0x00) /* SMCLK Divider 0: /1 */#define DIVS_1 (0x02) /* SMCLK Divider 1: /2 */#define DIVS_2 (0x04) /* SMCLK Divider 2: /4 */#define DIVS_3 (0x06) /* SMCLK Divider 3: /8 */#define DIVM_0 (0x00) /* MCLK Divider 0: /1 */#define DIVM_1 (0x10) /* MCLK Divider 1: /2 */#define DIVM_2 (0x20) /* MCLK Divider 2: /4 */#define DIVM_3 (0x30) /* MCLK Divider 3: /8 */#define SELM_0 (0x00) /* MCLK Source Select 0: DCOCLK */#define SELM_1 (0x40) /* MCLK Source Select 1: DCOCLK */#define SELM_2 (0x80) /* MCLK Source Select 2: XT2CLK/LFXTCLK */#define SELM_3 (0xC0) /* MCLK Source Select 3: LFXTCLK */#define LFXT1OF (0x01) /* Low/high Frequency Oscillator Fault Flag */#define XT2OF (0x02) /* High frequency oscillator 2 fault flag */#define XCAP0 (0x04) /* XIN/XOUT Cap 0 */#define XCAP1 (0x08) /* XIN/XOUT Cap 1 */#define LFXT1S0 (0x10) /* Mode 0 for LFXT1 (XTS = 0) */#define LFXT1S1 (0x20) /* Mode 1 for LFXT1 (XTS = 0) */#define XT2S0 (0x40) /* Mode 0 for XT2 */#define XT2S1 (0x80) /* Mode 1 for XT2 */#define XCAP_0 (0x00) /* XIN/XOUT Cap : 0 pF */#define XCAP_1 (0x04) /* XIN/XOUT Cap : 6 pF */#define XCAP_2 (0x08) /* XIN/XOUT Cap : 10 pF */#define XCAP_3 (0x0C) /* XIN/XOUT Cap : 12.5 pF */#define LFXT1S_0 (0x00) /* Mode 0 for LFXT1 : Normal operation */ #define LFXT1S_1 (0x10) /* Mode 1 for LFXT1 : Reserved */#define LFXT1S_2 (0x20) /* Mode 2 for LFXT1 : VLO */#define LFXT1S_3 (0x30) /* Mode 3 for LFXT1 : Digital input signal */#define XT2S_0 (0x00) /* Mode 0 for XT2 : 0.4 - 1 MHz */#define XT2S_1 (0x40) /* Mode 1 for XT2 : 1 - 4 MHz */#define XT2S_2 (0x80) /* Mode 2 for XT2 : 2 - 16 MHz */#define XT2S_3 (0xC0) /* Mode 3 for XT2 : Digital input signal */基本时钟系统例程(DCO)MSP430G2553在上电之后默认CPU执行程序的时钟MCLK来自于DCO时钟。

MSP430学习小结

MSP430学习小结

从头文件的定义中可以看出主要有两种方式,一种就是当做普通的定时器使用,一种才是作为看门狗, 另 外就是时钟源可选,选择8M 或者32K 的晶振来获得不同的延时,通过上面可以看出看门狗定时器最大的时 间可以到1S,在程序中可以灵活的利用看门狗定时器实现想要的功能。 下面介绍两个典型应用: 1、在动态数码管显示中的应用,具体代码可以参考我之前的笔记,部分代码如下: WDTCTL = WDT_ADLY_1_9; IE1 |= WDTIE; __interrupt void watchdog_timer(void) { } 这个程序主要是将看门狗定时器当做普通定时器使用, 1.9ms 刚好适合动态扫描间隔,在看门狗中断中对 数码管进行动态扫描,这样使用相对于开一个定时器来说要有所方便。因此在需要的定时与看门狗定时器 的几个时间相同时可以考虑使用看门狗。 2、普通延时 WDTCTL = WDT_ADLY_1000; //延时2s for(i = 0; i < 3; i++) { IFG1 &= ~WDTIFG; while(!(IFG1 & WDTIFG)); IFG1 &= ~WDTIFG; } 这个程序同样是将看门狗当普通定时器使用,在主程序中读取中断标志位,实现延时效果,上面的程序为 什么是延时2S 自己分析。 这里面举了两个例子,是最近学习的一点小体会,当然还是不能忘了看门狗的本能工作,在程序较为简单 时可以考虑使用看门狗定时器简化设计。另外还有一点觉得比较重要的是虽然头文件中对寄存器都有了很 好的定义,但是还是很有必要对着头文件和寄存器把主要的寄存器看一面,弄清每一种工作模式的使用方 式和注意点。 //间隔定时器,定时1000ms // 设置内部看门狗工作在定时器模式,1.9ms 中断一次 //可以去看头文件中具体的配置,这里使用的手表晶振64分频计算可得是1.9ms // 使能看门狗中断

个人学习总结:MSP430_TimerA

个人学习总结:MSP430_TimerA

【8种输出模式】 OUTMOD_0:立即,直接输出OUT位 OUTMOD_1:CCRx置位;CCR0保持(all) OUTMOD_2:CCRx翻转;CCR0复位(all) OUTMOD_3:CCRx置位;CCR0复位 OUTMOD_4:CCRx翻转;CCR0保持(all) OUTMOD_5:CCRx复位;CCR0保持(all) OUTMOD_6:CCRx翻转;CCR0置位 OUTMOD_7:CCRx复位;CCR0置位 输出单元只工作于比较模式,捕获时不会产生输出。 输出单元0不能输出2,3,6,7模式 输出是自动而独立的,和中断使能、中断标志都无关。 产生TA中断的原则:只要计数归零就产生TA中断
SCS
捕获与 定时器同步
SCCI
锁定的 捕获信号
未使用
CAP
捕获/比较 选择位
捕获方式
捕获信号输入源
7.rw-(0) OUTMOD2
6.rw-(0) OUTMOD1 输出模式选择
5.rw-0 OUTMOD0
4.rw-(0)
3.rw-(0)
2.rw-(0)
1.rw-(0)
0.rw-(0)
CCIE
中断使能
ID1
ID0
MC1
MC0
未使用
TACLR
TAIE
TAIFG
选择分频因子
选择计数方式
TAR复位清零 TA中断使能 TA中断标志
【计数时钟源】 TASSEL_0:TACLK外部引脚P1.0/TACLK(12脚)信号 TASSEL_1:ACLK内部辅助时钟 TASSEL_2:SMCLK内部子系统时钟 TASSEL_3:INCLK外部P2.1/TAINCLK(21脚)时钟 【TIMER_A的再次分频】 ID_0:1分频 ID_1:2分频 ID_2:4分频 ID_3:8分频 【计数模式】 MC_0:暂停计数,计数停止,但内容不清零,将继续计数。 MC_1:0~CCR0增计数,到达CCR0后归零,重新计数。先CCR0中断,后TA中断。 MC_2:0~FFFFH连续计数,到达TAR最大值后归零,重新计数。归零时产生TA中断。 MC_3:0~CCR0~0增减计数,到达CCR0后开始减1(产生CCR0中断),减至0时重新 计数,并产生TA中断。 【TACLR置位】 1:TAR清零 2:ID1,ID0复位 3:计数方向为增方向( 比如正由CCR0~0减计数,TACLR后会变为从0~CCR0方向增计数) 产生TA中断的原则: 只要计数归零就产生TA中断

430学习1

430学习1

MSP430学习笔记之二:时钟模块MSP430系列单片机基础时钟主要是由低频晶体振荡器,高频晶体振荡器,数字控制振荡器(DCO),锁频环(FLL)及FLL+等模块构成。

由于430系列单片机中的型号不同,而时钟模块也将有所不同。

虽然不同型号的单片机的时基模块有所不同,但这些模块产生出来的结果是相同的.在MSP430F13、14中是有TX2振荡器的,而MSP430F11X,F11X1中是用LFXT1CLK 来代替XT2CLK时钟信号的.在时钟模块中有3个(对于F13,F14)时钟信号源(或2个时钟信号源,对于F11X、F11X1):1-LFXT1CLK: 低频/高频时钟源.由外接晶体振荡器,而无需外接两个振荡电容器.较常使用的晶体振荡器是32768HZ。

2-XT2CLK: 高频时钟源.由外接晶体振荡器。

需要外接两个振荡电容器,较常用的晶体振荡器是8MHZ。

3-DCOCLK: 数字可控制的RC振荡器。

1-ACLK: 辅助时钟信号.由图所示,ACLK是从FLXT1CLK信号由1/2/4/8分频器分频后所得到的.由BCSCTL1寄存器设置DIVA相应为来决定分频因子.ACLK可用于提供CPU外围功能模块作时钟信号使用.2-MCLK: 主时钟信号.由图所示,MCLK是由3个时钟源所提供的。

他们分别是LFXT1CLK,XT2CLK(F13、F14,如果是F11,F11X1则由LFXT1CLK代替),DCO时钟源信号提供.MCLK主要用于MCU和相关系统模块作时钟使用。

同样可设置相关寄存器来决定分频因子及相关的设置。

3-SMCLK: 子系统时钟,SMCLK是由2个时钟源信号所提供.他们分别是XT2CLK(F13、F14)和DCO,如果是F11、F11X1则由LFXT1CLK代替TX2CLK。

同样可设置相关寄存器来决定分频因子及相关的设置。

MSP430X1X1系列产品中,其中XT1时钟源引脚接法有如3种应用。

F13、14的XT1相同。

MSP430学习笔记

MSP430学习笔记

一,MSP430G2553单片机的各个功能模块(一),IO口模块,1,我们所用的MSP430G2553有两组IO口,P1和P2。

2,IO口的寄存器有:方向选择寄存器PxDIR,输出寄存器PxOUT,输入寄存器PxIN,IO口内部上拉或下拉电阻使能寄存器PxREN,IO口功能选择寄存器PxSEL和PxSEL2,IO口中断使能寄存器PxIE,中断沿选择寄存器PxIES,IO口中断标志寄存器PxIFG。

3,所有的IO都带有中断,其中所有的P1口公用一个中断向量,所有的P2口公用一个中断向量。

所以在使用中断时,当进入中断后,还要判断到底是哪一个IO口产生的中断,判断方法可以是判断各个IO口的电平。

4,中断标志PxIFG需要软件清除,也可以用软件置位,从而用软件触发一个中断。

注意:在设置PxIESx时根据PxINx有可能会引起相应的PxIFGx置位(具体的情况见用户指南),所以在初始化完IO口中断以后,正式使用IO中断前要先将对应的PxIFGx清零。

程序如下:void IO_interrupt_init()//IO中断初始化函数{P1REN|=BIT4+BIT5+BIT6+BIT7;//pullup内部上拉电阻使能//使用中断时,使能内部的上拉电阻这样当该脚悬空是,电平不会跳变,防止悬空时电平跳变不停的触发中断P1OUT=BIT4+BIT5+BIT6+BIT7;//当引脚上的上拉或下拉电阻使能时,PxOUT选择是上拉还是下来//0:下拉,1:上拉P1IE|=BIT4+BIT5+BIT6+BIT7;//interrupt enabled P13中断使能P1IES|=BIT4+BIT5+BIT6+BIT7;//Hi/lo edge下降沿中断//P1IES&=~BIT3;//上升沿触发中断P1IFG&=~(BIT4+BIT5+BIT6+BIT7);//中断标志位清零}5,PxOUT:如果引脚选择了内部的上拉或下拉电阻使能,则PxOUT设定电阻是上拉还是下拉,0:下拉,1:上拉6,当IO口不用时,最好不要设为输入,且为浮动状态(这是IO口的默认状态),因为当输入为浮动时,输入电压有可能会在VIL和VIH之间,这样会产生击穿电流。

msp430学习经验总结

msp430学习经验总结

msp430学习经验总结最近学习MSP430,把自己的一些经验分享下,这是我在网上发现的一篇很不错的文章,归纳得很好,简洁明了。

1.MSP430开发环境建立1.安装IAR dor msp430 软件,软件带USB仿真器的驱动。

2.插入USB仿真器,驱动选择安装目录的/drivers/TIUSBFET3.建立一个工程,选择"option"选项,设置a、选择器件,在"General"项的"Target"标签选择目标器件b、选择输出仿真,在"Linker"项里的"Output"标签,选择输出"Debug information for C-SPY",以输出调试信息用于仿真。

c、若选择"Other",Output下拉框选择"zax-m"即可以输出hex 文件用以烧录,注意,此时仿真不了。

d、选择"Debugger"项的"Setup"标签,"Driver"下拉框选择"FET Debugger"e、选择"FET Debugger"项的"Setup"标签,"Connection"下拉框选择"Texas Instrument USB-I"4.仿真器的接口,从左到右分别为 " GND,RST,TEST,VCC"2.IO口数字输入/输出端口有下列特性:□每个输入/输出位都可以独立编程。

□允许任意组合输入、输出。

□ P1 和 P2 所有 8 个位都可以分别设置为中断。

□可以独立操作输入和输出数据寄存器。

□可以分别设置上拉或下拉电阻。

在介绍这四个I/O口时提到了一个“上拉电阻”那么上拉电阻又是一个什么东东呢?他起什么作用呢?都说了是电阻那当然就是一个电阻啦,当作为输入时,上拉电阻将其电位拉高,若输入为低电平则可提供电流源;所以如果P0口如果作为输入时,处在高阻抗状态,只有外接一个上拉电阻才能有效。

MSP430学习笔记

MSP430学习笔记

图和下方CCR2的框图是一样的。此处省略不写。在CCR中, 左上角为一个捕获源选择寄存器。可以从CCI2A、CCI2B、 GND或者VCC选择捕获源,选择捕获源后有一个选择捕获模 式寄存器Capture Mode,然后过来有一个捕获溢出状态寄 存器COV,SCS同步/异步捕获模式选择位,然后连接到捕获 比较寄存器。下方为模式选择寄存器,具体设置可以查看相 应的寄存器设置。 这里仅是大概介绍一下Timer0的寄存器,具体的设置使用还 看参考相应的寄存器并结合例程慢慢学习理解。
//以下为参考处理程序,不使用的端口应当删除其对于中断源的判断。 if((P1IFG&BIT0) == BIT0) { P2OUT&=~BIT0; //处理P1IN.0中断 P1IFG &= ~BIT0; //清除中断标志 //以下填充用户代码 } else if((P1IFG&BIT1) ==BIT1) { P2OUT&=~BIT1; //处理P1IN.1中断 P1IFG &= ~BIT1; //清除中断标志 //以下填充用户代码 } else if((P1IFG&BIT2) ==BIT2) { P2OUT&=~BIT2; //处理P1IN.2中断 P1IFG &= ~BIT2; //清除中断标志 //以下填充用户代码 } else if((P1IFG&BIT3) ==BIT3) { //处理P1IN.3中断 P1IFG &= ~BIT3; //清除中断标志 //以下填充用户代码 } else if((P1IFG&BIT4) ==BIT4) { P2OUT&=~BIT4; //处理P1IN.4中断 P1IFG &= ~BIT4; //清除中断标志 //以下填充用户代码 } else if((P1IFG&BIT5) ==BIT5) { //处理P1IN.5中断 P1IFG &= ~BIT5; //清除中断标志 //以下填充用户代码 } else if((P1IFG&BIT6) ==BIT6) { //处理P1IN.6中断 P1IFG &= ~BIT6; //清除中断标志 //以下填充用户代码

MSP430学习总结

MSP430学习总结

MSP430学习总结MSP430学习总结前言这次主要看的资料是MSP430F425型号的,与MSP430F169有点区别,但由于MSP430单片机采用模块化结构,在不同型号的单片机中,同一种模块的使用方法和寄存器都是相同的。

下面会对它们的功能和区别加以说明。

一、MSP430单片机的特点1、我觉得MSP430最大的特点就是超低功耗,430之所以能够在低功耗的条件下运行,主要是由于引入了“时钟系统”的概念,和采用模块化结构。

让CPU可以间歇性的工作,节省功耗。

在MSP430单片机中,通过时钟配置可以产生3种时钟:MCLK:主时钟,MCLK是专门为CPU运行提供的时钟,MCLK配置的越高,CPU执行的速度就越快。

一旦关闭MCLKE,CPU 就停止工作,所以在超低功耗中通过间接开启MCLK的方式降低功耗。

SMCLK:子系统时钟,为单片机内部某些高速设备提供时钟,并且SMCLK是独立于MCLK的,关闭MCLK让CPU停止工作,子系统SMCLK开启,仍然可以使外设继续工作。

ACLK:活动时钟;ACLK一般是由32.768KHz晶振直接产生的低频时钟,在单片机运行时一般不关闭,和定时器使用间接唤醒CPU。

时钟系统对于3种时钟不同程度的关闭,就可以进入不同的低功耗模式(低功耗在下面讨论)。

2、MSP430单片机采用模块化结构,每一种模块都具有独立而完整的结构,这样就可以单独开启或者关闭某些模块,只需要激活某些使用的模块,以节省电力。

3、MSP430单片机的内核是16位RISC处理器,其运算能力和速度都具有一定的优势。

MSP430还有其它的一些优势在这里就不一一列举了。

二、MSP430单片机的内部资源1、I/O口寄存器PxIN: Px口输入寄存器PxOUT: Px口输出寄存器PxDIR : Px口方向寄存器 0=输入 1=输出PxSET: Px口第二功能选择寄存器 0=普通I/O 1=第二功能使用总结:以上的4个寄存器是所有I/O都具有的,在使用I/O 口之前首先要设置PxDIR,对于要使用第二功能的还要设置PxSET 下面介绍的是430中P1,P2口引发中断需要设置的寄存器(MSP430单片机只有P1、P2口能引发中断)PxIE : Px口中断允许寄存器 0=不允许 1=允许PxIES : Px口中断沿选择寄存器0=上升沿1=下降沿PxIFG :Px口中断标志位寄存器 0=中断条件不成立1=中断条件曾经成立(说明:无论中断是否被允许,也不论是否正在执行中断服务程序,只要I/O满足中断条件,PxIFG的相应位就会置1,只能通过软件清除,这个可以用来判断哪一位I/O发生了中断,也不会漏掉每一次中断。

学习笔记-CCS-MSP430F5529[快速入门篇二]

学习笔记-CCS-MSP430F5529[快速入门篇二]

学习笔记-CCS-MSP430F5529[快速⼊门篇⼆] 由于2021的全国电赛延期了,从今天开始打算好好整理⼀下使⽤CCS编程的经验,本篇笔记会好好整理⼀下我备赛期间⽤CCS写的程序,包括外部中断,定时器部分的定时中断,定时器输⼊捕获,PWM波输出,UART,OLED(IIC),MPU6050,内容涵盖了硬件和软件部分。

鉴于笔者⽔平有限和能⼒不⾜,⽂中有不到之处还请看者多包涵,我的⼯程源代码链接会在⽂章末尾贴出。

先贴⼀张peripheral图,MSP430的外部引脚及其复⽤功能都可在图⾥查到。

⼀·外部中断 外部中断的操作⽅式与GPIO⼀样是使⽤寄存器操作,所以学习相关的寄存器是不可避免的,不过MSP430的寄存器不算太多,操作外部中断主要要⽤到以下寄存器:1.PxIV 中断向量表(字),P1端⼝的中断函数⼊⼝地址应该都放在⾥⾯,只是⼀个地址;2.PxIE 中断使能寄存器,相应引脚位置1表⽰允许产⽣中断;置0表⽰该引脚不产⽣中断;3.PxIES 中断触发⽅式选择寄存器,相应引脚位置1表⽰下降沿触发,置0表⽰上升沿触发;4.PxIFG 中断标志,由于MSP430的中断使能需要使能总中断,所以仅当总中断GIE和中断使能寄存器PxIE都打开后,PxIFG⾼电平表⽰有中断请求等待待响应,等中断服务函数结束时需要软件清该标志位; 这些寄存器在TI的msp430f5xx_6xxgeneric.h头⽂件有如下定义下⾯看⼀个外部中断程序,所⽤引脚为P2.1,对应MSP430F5529⽕箭板的板载按键S1,初始化为下降沿触发void EXTI_Init(){/*按键中断*/P2IE |= BIT1; //P2.1中断使能P2IES |= BIT1; //设置为下降沿触P2IFG &= ~BIT1; //清中断标志位P2REN |= BIT1; //上拉电阻P2OUT |= BIT1; //初始化置⾼}/*中断服务函数*/#pragma vector=PORT2_VECTOR__interrupt void P2_ISR(void){if(P2IFG & BIT1){delay(2); //延时2ms消抖动/*这⾥是函数算法部分*/}P2IFG &=~BIT1; //清空中断标志}⼆·定时器MSP430的定时器资源还算丰富,共有两类共四个定时器,分别是3个TimerA和1TimerB,由于我对TimerA使⽤较多,所以本⽂着重来讲TimerA,三个TimerA分别为Timer0_A(5个捕获/⽐较寄存器),Timer1_A(3个捕获/⽐较寄存器),Timer2_A(3个捕获/⽐较寄存器),下⾯是TimerA的结构图我们结合TimerA的寄存器讲解⼀下这张图上半部分是整个定时器的基础,整个上半部分可通过TACTL控制寄存器来编程,从功能⾓度来讲从左往右分别是,⾃⾝时钟源配置TASSEL,第⼀次分频选择ID,定时器清零位TACLR,计数值存放寄存器TAR,⼯作模式控制位MC,中断标志位TAIFG以及没有在结构图出现的定时器中断使能TAIE。

MSP430单片机学习心得总结

MSP430单片机学习心得总结

MSP430单片机学习心得总结第一篇:MSP430单片机学习心得总结改变CCS字体方法:perferance>General>Apperance>Colors and Fonts >Basic>Text Font将c语言编译成汇编语言之后执行。

如果c语言结构不好,则编译后会出现编译成汇编后代码冗余,使得执行效率不高。

板子有可能与电脑连接出问题,可以拔下重插一次。

在单片机内部flash存储空间有剩余时,可以用于数据存储空间,并且可以使用单片机程序进行数据管理。

POR PUC是复位信号看门狗定时器溢出发生复位复位时设置如下:1.RAM堆栈的指针指到最顶端2.初始化看门狗3.初始化外设 GIE 是总中断具有欠压复位功能工作电流小于20UA 待机电流小于0.8UA 4个特殊功能寄存器 R0是PC指针 R1是堆栈指针 R2是状态寄存器 R3是常数发生器12个通用寄存器R4-R15 27条内核指令 24条仿真指令 7中地址模式无累加器三个时钟:ACLK辅助时钟:频率较低,低速外设MCLK是主时钟,CPU运行的时钟,高频 SMCLK是次主时钟,高速外设DCO是数字震荡控制器1M 8M 12M 16M共4个级别,可以通过内置数据进行设置内置VLO低频振荡器,频率为4-20khz。

所以可以通过DCO进行分频Timer_A频率可达系统振荡频率,用于定时器时,最小单位时间是20ns 2553的电阻有0~15共16中。

用RSEL选择。

RSEL与DCO配合,值越大频率越大。

LF是外接时钟USART支持UART、SPI 共2种通讯方式 USCI支持 UART、I2C、SPI 共3种通讯方式关于变量:static变量是对于局部变量而言,如果不定义成静态变量,则每次执行时都会被重新初始化,静态变量则不重新初始化。

全局变量和静态变量是存储在RAM中的。

extern是外部变量,即将一个文件中的变量在另一个文件中使用。

综合应用开发-MSP430单片机学习-第三课

综合应用开发-MSP430单片机学习-第三课

02
在“Options”对话框中,选 择“Board”选项卡,根据所 使用的MSP430单片机型号选 择相应的配置。
03
确保配置正确的编译器、调试 器等选项,以便进行正确的开 发和调试。
创建MSP430单片机工程
在IAR Embedded Workbench中,选择“Project”菜单,选择“Create New Project”。
特点
可配置为输入或输出模式,具有上拉、下拉、开漏、推挽等输出方式。
GPIO寄存器配置
01
数据寄存器
用于存储GPIO的输入或输出数 据。
控器
用于配置GPIO的工作模式和控 制信号。
用于设置GPIO的输入/输出类型、 上拉/下拉电阻等参数。
GPIO基本操作
1 2
输入操作
读取数据寄存器的值,根据该值判断外部设备的 状态。
医疗设备
用于监测和记录患者的生理参数,如心电图、 血压等。
无线通信
用于无线传输数据和控制信号,如RFID、蓝 牙等。
工业自动化
用于控制和监测生产过程,如电机控制、传 感器数据采集等。
MSP430单片机的发展趋势
更低功耗
随着物联网和智能设备的普及,对低功耗单片机的需求越来越大, MSP430单片机将继续优化低功耗技术。
Timer_B等。
定时器功能
03
定时器的主要功能包括时间延迟、事件计数、脉冲生
成等。
定时器寄存器配置
定时器控制寄存器
用于设置定时器的模式、启动/停止等控制 功能。
定时器计数寄存器
用于存储定时器的计数值,可以设置初始值 和增量。
定时器比较寄存器
用于设置定时器的比较值,当计数值达到比 较值时触发相应的操作。

msp430单片机入门知识

msp430单片机入门知识
#define BASICTIMER_VECTOR (0*2u) /*0xFFE0 基础定时器)
PORT2_VECTOR (1 * 2u) /* 0xFFE2 P2 */ PORT1_VECTOR (4 * 2u) /* 0xFFE8 P1 */ TIMERA1_VECTOR (5 * 2u) /* 0xFFEA Timer A CCR1/2*/ TIMERA0_VECTOR (6 * 2u) /* 0xFFEC Timer A CCR0 */ USART0TX_VECTOR (8 * 2u) /* 0xFFF0 串口发送 */ USART0RX_VECTOR (9 * 2u) /* 0xFFF2 串口接收*/ WDT_VECTOR (10 * 2u) /* 0xFFF4 Watchdog Timer */ SD16_VECTOR (12 * 2u) /* 0xFFF8 16位ADC */ NMI_VECTOR (14 * 2u) /* 0xFFFC Non-maskable */ RESET_VECTOR (15 * 2u) /* 0xFFFE Reset */
20
中断的具体过程
1. 事先将中断服务程序入口地址装入中断 向量表。
2. 中断发生后,如果中断被允许(可屏蔽 中断),CPU将当前程序地址和CPU状 态寄存器SR压入堆栈。
3. 跳转到中断服务程序入口,备份寄存器 入堆栈。
4. 开始执行中断服务程序。 5. 退出中断前,恢复寄存器。CPU取回SR
寄存器,跳转回中断前主程序地址。
6
MSP430FE425A资源 1. 8M/s处理速度 2. 512RAM(数据)+16KB Flash(程序代码) 3. 内置Flash控制器,剩余Flash可存数据。 4. 内置时钟管理单元,可内部倍频 5. 3路同步采样、差分输入、32倍程控增益放大器的16位ADC 6. 温度传感器 7. 1.2V基准源和输出缓冲器 8. 128段LCD驱动器 9. 增强UART串口 10. 看门狗 11. BasicTimer定时器 12. 16位TimeA定时器,3路捕获和2路PWM 13. 内置BOR复位电路 14. 16个双向可中断IO口 15. 内置电能计量模块 16. 后缀带A的,比如FE425A带硬件乘法器

msp430f149学习笔记

msp430f149学习笔记

1.复位信号是MCU工作的起点,430的复位型号有两种:上电复位信号POR和上电清除信号PUC。

POR信号只在上电和RST/NMI复位管脚被设置为复位功能,且低电平时系统复位。

而PUC信号是POR信号产生,以及其他如看门狗定时溢出、安全键值出现错误时产生。

但是,无论那种信号触发的复位,都会使msp430在地址0xffff处读取复位中断向量,然后程序从中断向量所指的地址开始执行。

复位后的状态不写了,详见参考书,嘿嘿。

2.首先你要知道msp430的存储器结构。

典型微处理器的结构有两种:冯。

诺依曼结构——程序存储器和数据存储器统一编码;哈佛结构——程序存储器和数据存储器;msp430系列单片机属于前者,而常用的mcs51系列属于后者。

0-0xf特殊功能寄存器;0x10-0x1ff外围模块寄存器;0x200-?根据不同型号地址从低向高扩展;0x1000-0x107f seg_b0x1080_0x10ff seg_a 供flash信息存储剩下的从0xffff开始向下扩展,根据不同容量,例如149为60KB,0xffff-0x11003.系统时钟是一个程序运行的指挥官,时序和中断也是整个程序的核心和中轴线。

430最多有三个振荡器,DCO内部振荡器;LFXT1外接低频振荡器,常见的32768HZ,不用外接负载电容;也可接高频450KHZ -8M,需接负载电容;XT2接高频450KHZ-8M,加外接电容。

430有三种时钟信号:MCLK系统主时钟,可分频1 2 4 8,供cpu 使用,其他外围模块在有选择情况下也可使用;SMCLK系统子时钟,供外围模块使用,可选则不同振荡器产生的时钟信号;ACLK辅助时钟,只能由LFXT1产生,供外围模块。

4.中断是430处理器的一大特色,因为几乎每个外围模块都能产生,430可以在没有任务时进入低功耗状态,有事件时中断唤醒cpu,处理完毕再次进入低功耗状态。

整个中断的响应过程是这样的,当有中断请求时,如果cpu处于活动状态,先完成当前命令;如果处于低功耗,先退出,将下一条指令的pc值压入堆栈;如果有多个中断请求,先响应优先级高的;执行完后,等待中断请求标志位复位,要注意,单中断源的中断请求标志位自动复位,而多中断的标志位需要软件复位;然后系统总中断允许位SR.GIE复位,相应的中断向量值装入pc,程序从这个地址继续执行。

MSP430学习总结(含远程升级方案)

MSP430学习总结(含远程升级方案)

MSP430学习MSP430系列咩有自带IAP功能的特点,必须自行编写IAP程序来进行片内Flash的烧写,才能达到省级的目的。

系统构思:需要升级的二进制文件下载到相应的地址空间,然后让单片机系统自动执行IAP 升级。

MSP430F149是在片内flash中运行。

1.下载升级文件到相应的外扩flash中。

2.从片外flash中编写到片内flash中(从0x1100开始至0xffff)3.编写引导程序,讲程序拷贝到相应的RAM空间(0x0200)中,并将PC指向0x200。

用户指南:如何使用这些寄存器。

数据手册:看电气特性,引脚等等xcl文件。

该文件在安装目录的IAR Systems\Embedded Workbench 5.4 Evaluation\430\config中。

CTRL+K 快注释,屏蔽选中的代码;CTRL+SHIFT+K 取消快注释,取消屏蔽选中的代码;CTRL+SHITF+F 全局搜索,有可能是因为搜狗输入法占用了快捷键而不行!生成下载文本147与149空间对比4系列的可以直接驱动段氏的液晶,1系不可以。

硬件结构MSP:mix signal processor混合信号处理器。

MSP430F149:F表示储存器是flash,14代表ADC是12位,9代表储存容量60kDSP 或者ARM成本比较高,单片机也有自己的生存空间。

MSP430可以进行片内flash自编程。

三个时钟单元MCLK/ACK/SMCLK内部集成Hardware Multiplier硬件乘法器,运算会更快,51单片机则没有!所以做一次运算会花很多个时钟周期!四种低功耗模式!降低时钟,LPM0:active模式下,哪些模块需要打开,可以由用户确定!LPM1:MCLK(主系统时钟)关掉,CPU则停止工作,ACLK(辅助系统时钟)和SMCLK(子系统四中模式消耗的电流设置CPUOFF/SCG0/SCG1---进入不同的低功耗级别。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

复位1.POR信号只在两种情况下产生:➢微处理器上电。

➢RST/NMI管脚被设置为复位功能,在此管脚上产生低电平时系统复位。

2.PUC信号产生的条件为:➢POR信号产生。

➢看门狗有效时,看门狗定时器溢出。

➢写看门狗定时器安全健值出现错误。

➢写FLASH存储器安全键值出现错误。

3.POR信号的出现会导致系统复位,并产生PUC信号。

而PUC信号不会引起POR信号的产生。

系统复位后(POR之后)的状态为:➢RST/MIN管脚功能被设置为复位功能。

➢所有I/O管脚被设置为输入。

➢外围模块被初始化,其寄存器值为相关手册上注明的默认值。

➢状态寄存器(SR)复位。

➢看门狗激活,进入工作模式。

➢程序计数器(PC)载入0xFFFE(0xFFFE为复位中断向量)处的地址,微处理器从此地址开始执行程序。

4.典型的复位电路有以下3种:(1)由于MSP430具有上电复位功能,因此,上电后只要保持RST/NMI(设置为复位功能)为高电平即可。

通常的做法为,在RST/NMI管脚接100kΩ的上拉电阻,如图1-5(a)所示。

(2)除了在RST/NMI管脚接100kΩ的上拉电阻外,还可以再接0.1μF的电容,电容的另一端接地,可以使复位更加可靠。

如图1-5(b)所示。

(3)由于MSP430具有极低的功耗,如果系统断电后立即上电,则系统中电容所存储的电荷来不及释放,此时系统电压不会下降到最低复位电压以下,因而MSP430不会产生上电复位,同时RST/NMI管脚上也没有足够低的电平使MSP430复位。

这样,系统断电后立即上电,MSP430并没有被复位。

为了解决这个问题,可增加一个二极管,这样断电后储存在复位电容中的电荷就可以通过二极管释放,从而加速电容的放电。

二极管的型号可取1N4008。

如图1-5(c)所示。

系统时钟振荡器:1.DCO 数控RC振荡器,位于芯片内部。

不用时可以关闭2.LFXT1 可以接低频振荡器,典型的如32.768kHz的钟表振荡器,此时振荡器不需要接负载电容。

也可以接450kHz~8MHz的标准晶体振荡器,此时振荡器需要接负载电容。

3.XT2 接450kHz~8MHz的标准晶体振荡器,此时振荡器要接负载电容,不用时可以关闭。

通常低频振荡器用来降低能量消耗,例如使用电池的系统。

高频振荡器用来对事件作出快速反应或者供CPU进行大量运算。

DCO的振荡频率会受周围环境温度和MSP430工作电压的影响而产生变化,并且同一型号的芯片所产生的频率也不相同。

DCO的调节功能可以改善它的性能。

DCO的调节分为以下3步:(1)选择BCSCTL1.RSELx确定时钟的标称频率。

(2)选择DCOCTL.DCOx在标称频率基础上分段粗调。

(3)选择DCOCTL.MODx的值进行细调。

MSP430定义了3种时钟信号,分别为:(1)MCLK 系统主时钟。

除了CPU运算使用此时钟信号外,外围模块也可以使用。

MCLK可以选择任何一个振荡器产生的时钟信号并进行1、2、4、8分频作为其信号源。

(2)SMCLK 系统子时钟。

外围模块可以使用,并且在使用之前可以通过各模块的寄存器实现分频。

SMCLK可以选择任何一个振荡器产生的时钟信号并进行1、2、4、8分频作为其信号源。

(3)ACLK 辅助时钟。

外围模块可以使用,并且在使用之前可以通过各模块的寄存器实现分频。

ACLK只能由LFXT1进行1、2、4、8分频作为其信号源。

PUC结束时,MCLK和SMCLK的信号源为DCO,DCO的振荡频率约为800kHz(详见相关手册)。

ACLK的信号源为LFXT1。

例3.4 设置MCLK 的时钟8 分频。

下列4 条代码均可实现该功能。

BCSCTL2 |= 0x30; //人肉记忆+数脚趾头,原始社会才干的事!BCSCTL2 |= BIT5+BIT4; //需记忆DIVMx在BSCTL中的位置,不推荐!BCSCTL2 |= DIVM1+DIVM0; //由两项组成,看起来不直观,凑合!BCSCTL2 |= DIVM_3; //简洁明了,力荐!在使用按位或操作符“|=”配置寄存器时,要注意宏定义之间的“叠加”效应。

重新用宏定义配置寄存器前,一定要先清零。

(此外,极少数寄存器上电复位后默认值不是0,要特别注意。

)例3.5 先设定MCLK 分频为2,一段时间后改为4 分频。

错误的代码:BCSCTL2 |= DIVM_1; //这确实是2 分频delay( );BCSCTL2 |= DIVM_2; //因为|=赋值的原因,这实际上是8 分频,请自行面壁想清楚正确的代码:BCSCTL2 |= DIVM_1; // 2 分频delay( );BCSCTL2 &= ~( DIVM_0+ DIVM_1+ DIVM_2+ DIVM_3); // 预先把全部相关控制位置0 BCSCTL2 |= DIVM_2; //此时再用|=设置才不出错相关控制位全置0 还可写成:BCSCTL2 &= ~DIVM_3 或BCSCTL2 &=~(DIVM0+DIVM1)低功耗模式上电和外部复位信号产生POR信号,POR信号会引起PUC信号。

看门狗激活时,定时器溢出和安全键值错误也会引起PUC信号。

PUC信号结束后,MSP430进入AM状态。

在AM 状态程序可以选择进入任何一种低功耗模式,然后在适当的时机,由外围模块的中断使CPU 退出低功耗模式。

LPM0(主力休眠,先头部队工作)和LPM3(主力和先头部队都休眠,仅留警戒哨兵)最常用,LPM4 则当关机使用。

中断MSP430可以在没有事件发生时进入低功耗状态,事件发生时,通过中断唤醒CPU,事件处理完毕后,CPU再次进入低功耗状态。

MSP430的中断分为:系统复位、不可屏蔽中断、可屏蔽中断。

系统复位前面已经作过介绍,其中断向量为0xFFFE。

不可屏蔽中断向量为0xFFFC,产生不可屏蔽中断的原因如下:(1)RST/NMI管脚功能选择为NMI时,RST/NMI管脚上产生一个上升沿或者下降沿(具体是上升沿还是下降沿由寄存器WDTCTL中的NMIES位决定)。

NMI中断可以用WDTCTL中的NMIIE位屏蔽。

需要注意的是,当RST/NMI管脚功能选择为NMI时,不要让RST/NMI 管脚上的信号一直保持在低电平。

原因是如果发生了PUC,则RST/NMI管脚的功能被初始化为复位功能,而此时它上面的信号一直保持低电平,使CPU一直处于复位状态,不能正常工作。

(2)振荡器失效中断允许时,振荡器失效。

(3)FLASH存储器的非法访问中断允许时,对FLASH存储器进行了非法访问。

不可屏蔽中断可由各自的中断允许位禁止或打开。

当一个不可屏蔽中断请求被接受时,相应的中断允许位自动复位。

退出中断程序时,如果希望中断继续有效,则必须用软件将相应中断允许位置位。

中断使用的步骤:1)配置子模块中断相关的寄存器,比如外部中断的上升沿触发还是下降沿触发,定时中断的计数方式和定时值。

2)依模板写中断服务子函数框架,添加中断后要干什么的代码(事件处理函数)。

3)使能子模块的中断,使能总中断。

4)一旦中断发生,CPU 停下主函数的活,并标记位置。

进入中断服务子函数里干活,完事后回到主函数标记位置处继续干活。

我们来看MSP430 的中断子函数模板,加粗斜体部分是允许用户“创意”的地方,其他则是固定格式。

其中,PORT1_VECTOR 是中断向量表中的地址宏定义,直接决定了这个中断子函数是响应哪个中断源。

PORT1_ISR 是中断子函数名,这个最好按标准写法取名字,便于理解。

中断向量表和标准的中断子函数名可见头文件<MSP430G2553.h>。

在MSP430 单片机中,中断资源是比较“宝贵的”,很多中断都是共用一个“中断向量入口”。

比如上面写的是P1 口的中断服务子函数,当P1 的8 个IO 口任何一个检测到中断事件(上升沿或下降沿),就会进入中断子函数。

我们需要在子函数里,查询中断标志位#pragma vector = PORT1_VECTOR__interrupt void PORT1_ISR(void){//中断后想干的事写这里;}LaunchPad 口袋实验平台—MSP-EXP430G2 篇50(特殊功能寄存器),判断一下到底是哪个IO 口“出事”了。

& 按位与, | 按位或, ^ 按位异或AND (位与&) OR ( 位或| ) XOR ( 位异或^ )1 & 1 = 1 1 | 1 = 1 1 ^ 1 = 01 & 0 = 0 1 | 0 = 1 1 ^ 0 = 10 & 1 = 0 0 | 1 = 1 0 ^ 1 = 10 & 0 = 0 0 | 0 = 0 0 ^ 0 = 0C语言提供的位运算符列表:运算符含义描述& 按位与如果两个相应的二进制位都为1,则该位的结果值为1,否则为0| 按位或两个相应的二进制位中只要有一个为1,该位的结果值为1^ 按位异或若参加运算的两个二进制位值相同则为0,否则为1~ 取反~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0<< 左移用来将一个数的各二进制位全部左移N位,右补0>> 右移将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0写位操作:在对某字节使用“=”进行写操作时,所有位的值都将被改变。

如果先将原字节读出来,再使用“按位”操作符对原字节进行赋值,则可“等效”实现对单个位的写操作。

将P1.0 置1、P1.1 置0、P1.2 取反,不影响其他位。

P1OUT |= 0x01; P1OUT |= BIT0; //“按位或”,相当于置1P1OUT &= ~0x02; P1OUT &= ~BIT1; //取反后再“按位与”,相当于置0 P1OUT ^= 0x04; P1OUT ^= BIT2;//“按位异或”,相当于取反也可以用加号对多位同时操作。

将P1.0、P1.1、P1.2 均置1,不影响其他位。

P1OUT |= BIT0+BIT1+BIT2; //可用加法进行批量设置读位操作:读位操作主要是通过if 语句判断的方法得到的。

同样,这种变通的办法不意味着MSP430 单片机可以对位进行读取,这种方法同样需要对1 个字节的8 位都操作。

Eg:将P2.0 的输出设置成与P1.1 输入相反,读取P1.0 状态到变量Temp。

unsigned char Temp=0;if((P1IN&BIT1)==0) P2OUT |= BIT0; //读P1.1 写P2.0else P2OUT &= ~BIT0;if(P1IN&BIT0) Temp=1; //读P1.0 写Tempelse Temp=0;寄存器配置小结1)一般情况下,均使用宏定义去配置寄存器,这样做省事省力,可读性好。

相关文档
最新文档