MSP430单片机深入学习笔记
MSP430-复习
第一章MSP430(Mixed Signal Processor混合信号处理器)的特点:优点:1、超低功耗2、强大的处理能力3、高性能模拟技术及丰富的片上外围模块4、系统工作稳定5、方便高效的开发环境缺点:所有总线都在内部,无功能扩展端RAM:随机存储器(可读写),掉电后数据丢失。
ROM:程序存储器(只可读)。
PROM:一次性可编程存储器(只读)。
EPROM:紫外线擦除的可编程存储器(字节写入整片擦除)。
EEPPROM:电擦除可编程存储器(字节写入,字节擦除)。
FLASH:电擦除可编程存储器(字节写入,段擦除/页擦除)。
第二章CPU的编程资源:16位的ALU(算术逻辑运算单元)、16个寄存器、一个指令控制单元。
16个寄存器:程序计数器PC:以字为单位系统堆栈指针SP:压堆栈(PUSH)过程取堆栈(POP)过程状态寄存器SR:类型名称含义状态标志C:进位标志当运算结果产生进位时C置位,否则C复位Z:零标志当运算结果为零时Z置位,否则Z复位N:负标志当运算结果为负时N置位,否则N复位V:溢出标志当运算结果超出有符号数范围时V置位,溢出情况如下:正数+正数=负数负数+负数=正数正数--负数=负数负数--正数=正数控制标志GIE:通用中断允许位控制可屏蔽中断GIE置位CPU可响应可屏蔽中断GIE复位CPU不响应可屏蔽中断CPUOff 置位CPUOff位可是CPU进入闭关模式,可用所有允许的中常数发生寄存器CG1和CG2 :使用常数发生寄存器产生常数的优点:1、不需要特殊的指令2、对6种最常用的常数不需要额外的字操作数3、缩短指令周期:不经过MDB(数据存储器)就能直接访问寻址模式:指在执行一条指令过程中,如何找到操作数地址的方法(指令的操作数包含源操作数和目的操作数)。
访问整个地址空间的不同寻址模式由As(寻址位,源操作数的寻址模式)和Ad(寻址位,目标作数的寻址模式)模式位的内容确定:源操作数可以使用全部的7种寻址方式,而目的操作数只能使用其中4种寻址方式,它们可以访问整个地址空间。
430学习笔记
一,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之间,这样会产生击穿电流。
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_RTC模块学习
今天学习了MSP430F5系列单片机的RTC模块使用,现总结一下以防忘记。
F5系列单片机的RTC模块可以用作日历模式、可编程闹钟和可校准的时钟计数器。
RTCCTL1寄存器中的RTCMODE位决定RTC工作在日历模式还是计数器模式:RTCMODE 0 32位计数器模式1日历模式计数器模式:此时RTCMODE复位。
计数器的时钟源选择:时钟源可选自ACLK、SMCLK或者是经RT0PS和RT1PS对ACLK、SMCLK 的分频值。
RT0PS和RT1PS分别能输出ACLK和SMCLK的2、4、8、16、32、64、128、256分频。
如下图:另外,还可以看到RT1SSEL中的10、11选项练到了RT0PSDIV的输出。
它的作用是将RT0PS和RT1PS级联。
级联后的输出也可以作为32位计数器的时钟源。
4个独立的8位计数器级联成32位计数器,能提供计数时钟的8位、16位、24位、32位溢出间隔,由RTCCTL1寄存器的RTCTEV位选择其中一种触发条件。
置位RTCTEVIE,一个RTCTEV事件可以触发一个中断。
RT0PS和RT1PS可以被配置成两个8位的计数器,或者级联成一个16位的计数器。
通过设置各自的RT0PSHOLD和RT1PSHOLD位,RT0PS和RT1PS可以暂停功能,还原为独立的模块。
当RT0PS和RT1PS级联的时候,通过置位RT0PSHOLD可以导致RT0PS和RT1PS同时停止。
根据不同的配置,32 位的计数器可以有不同的方法被停止。
如果32位的计数器时钟源直接源于ACLK或者SMCLK,则可以通过置位RTCHOLD而被停止;如果它是源于RT1PS的输出,则可以通过置位RT1PSHOLD或者RTCHOLD而被停止;最后,如果它源于RT0PS和RT1PS的级联,则通过置位RT0PSHOLD、RT1PSHOLD或者RTCHOLD 而被停止。
个人理解:RTC的时钟要么来自ACLK,要么来自SMCLK,要么来自RT1PS对ACLK 或SMCLK的分频,要么来自RT0PS与RT1PS级联后对ACLK或SMCLK的分频。
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学习笔记一、简介图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大部分时间都处于低功耗状态,使得系统的整体功耗极大地降低。
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单片机概述
第一章MSP430单片机概述MSP430是一种低功耗、高性能的单片机,由德州仪器(Texas Instruments,TI)公司开发。
它采用了超低功耗的电源管理技术,使其在电池供电下能够持续运行数年之久。
MSP430单片机适用于许多应用领域,包括消费电子、医疗设备、工业自动化、智能家居和传感器网络等。
MSP430单片机的核心是RISC架构的16位处理器,具有较小的指令集,运行速度快,并且能够以较低的能耗完成各种任务。
它采用了哈佛结构,具有16位的定长指令格式,有着高效的编码能力。
此外,它还具有多种中断机制,可以快速响应外部事件或实现多任务操作。
MSP430单片机提供了多个不同的系列,以适应不同应用场景的需求。
不同系列的MSP430单片机在处理器速度、内存容量和外设接口等方面有所差异。
其中,MSP430F系列适用于通用应用,而MSP430G系列适用于低成本和功耗敏感的应用。
此外,MSP430FR系列还具有非易失性存储器,可以在掉电情况下保留数据。
MSP430单片机具有丰富的外设接口,包括通用IO口、模拟输入输出、时钟控制器、串口通信、定时器和比较器等。
这些外设接口使得MSP430单片机能够灵活地与其他设备进行通信,并实现多种功能。
MSP430单片机在低功耗方面具有很大优势。
它采用了多种省电技术,包括多级电源管理、动态电压调节和片上电源管理单元等。
这些技术使得MSP430单片机在待机和运行模式下的功耗都非常低,能够更好地满足移动设备和电池供电设备的需求。
总的来说,MSP430单片机是一种低功耗、高性能的单片机,具有丰富的外设接口和完善的开发工具链。
它适用于多种应用领域,可以满足不同需求的设计要求。
随着物联网的快速发展,MSP430单片机的市场前景十分广阔,并且将继续发挥重要作用。
MSP430单片机,2讲
POR复位的产生条件
1、单片机上电
2、RST/NMI管脚上产生低电平
3、时钟振荡失效标志会触发RST/NMI 管脚,引起POR复位
POR复位后,RST/NMI管脚功能复位,所有I/O 口为普通I/O,各外围模块初始化,状态寄存器SR复 位,看门狗被激活进入工作模式,程序计数器载入初 始地址。
PUC复位的产生条件
{ WDTCTL=WDT_MDLY_32;//设置看门狗定时时间间隔
P1DIR|=BIT0;//设置P1.0为输出 IE1|=WDTIE;//开看门狗中断使能 _EINT( );//开CPU中断使能 For( ; ; ){ LPM0; _NOP();}//进入低功耗休眠 } #pragma vector=WDT_VECTOR//声明中断向量 __interruput void watchdog(void) { P1OUT^=BIT0;//P1.0输出值取反
1、POR信号产生
2、看门狗有效且看门狗溢出
3、写入的看门狗定时器安全键值出错 4、写入FLASH存储器安全键值出错
430单片机的中断系统
(1)可屏蔽中断 (2)不可屏蔽中断 (3)系统复位
中断向量与中断标志
中断向量(VECTOR)代表中断程序的入口地址 430单片机提供的中断向量主要有:端口中断 向量,ADC模块中断向量,串口模块中断向量, 定时器模块中断向量,比较器中断向量,看门 狗中断向量,NMI中断向量
中断与低功耗
中断具有唤醒CPU执行程序指令的能 力。当无特殊事件发生时,可以让CPU 处于休眠状态,即进入某种低功耗模式, 直到有中断请求发生。 这样可以使得单片机在大多数的时间 或工作的间隙里降低功率损耗,相当于 手机的待机模式,不影响电话的正常拨 打和接听一样。
msp430笔记1
中断Msp430单片机具有中断向量列表,位于Rom最高段512B中,事先要将中断服务程序入口地址装入中断向量表内。
中断发生后,如果改中断被允许,CPU会自动将当前程序地址和CPU的状态寄存器SR压入堆栈,然后跳转到改终端服务程序的入口。
中断向量种类:#define BASICTIMER_VECTOR#define PORT2_VECTOR#define PORT1_VECTOR#define TIMERA1_VECTOR#defineTIMERA0_VECTOR#define USART0TX_VECTOR#define USART0RX_VECTOR#define WDT_VECTOR#defineSD16_VECTOR#define NMI_VECTOR#define RESET_VECTORMsp430单片机的中断源数量很多,比如P1,P2口的每一个IO口都能产生中断,3个ADC 采样结束以及遇到错误都会产生中断,为了便于管理,msp430的中断管理机制把同类的中断合并成一个总的中断源,具体的中断需要由软件判断中断标志位来确定。
例如:P1口的任何一个IO发生中断,程序都会执行P1口中断服务程序,在P1口中断服务程序中,再根据P1IFG标志位来判断具体是哪一根IO口发生了中断。
内部函数标准c语言具有普遍适用性,但是每种cpu都有独特之处,对于某个cpu来说一个简单的操作,用标准c语言表达出来却很复杂,为了解决这个问题,编译器会提供一些内部函数:__low_power_mode_0();__low_power_mode_1();__low_power_mode_2();__low_power_mode_3();上述可以简化为:LPM0;LPM1;LPM2;LPM3__low_power_mode_off_on_exit();这个函数可以退出唤醒cpu__delay_cycles(long int sycles); 靠cpu空操作延迟cycles个时钟周期__enable_interrupt(); _EINT();开总中断__disable_interrupt(); _DINT();关总中断_nop(); 空操作文件管理初学者往往将所有的代码都写在一个c文件中,这是一种非常坏的习惯。
一起来学MSP430F6638-基础篇之UCS
基础篇之统一时钟系统(UCS)接上一篇帖子,一起来学MSP430F6638基础篇之GPIO(2)。
在这篇我主要学习它的时钟系统。
时钟对于单片机就像心脏对于人类,有了它单片机才能正常的运行。
6638的时钟系统很强大,有多个时钟源。
选择合适的时钟源,对于降低MSP430单片机的功耗有很大的帮助。
6638的时钟源有:针对频率稳定的锁频环路控制环路FLL,低功耗低频内部时钟源VLO,低频修整内部参考源REFO,32KHZ晶体XT1,高达32MHZ的高频晶振XT2。
这些时钟源模块可以提供三种时钟信号,ACLK,MCLK,SMCLK。
每一个时钟信号可以进行分频从而降低信号的频率。
ACLK可以选作各个外设模块(比如:ADC,定时器,DAC等),常用于低速外设模块;MCLK主要用于CPU和系统;SMCLK主要用于各个高速外设模块。
学习的必备资料任然是,数据手册和用户指导书。
请经常查阅它们。
资料里有一句话很重要:The UCS module can be configured to operate without any external components,with one or two external crystals,or with resonators,under full software control.它说,统一时钟系统模块可以在一两个晶振或震荡器下完全由软件控制,不需要其他任何外部器件。
就是说,时钟系统可以用软件来控制。
PUC指上电清除,POR指上电复位。
这段英文说,PUC后,UCS模块的默认配置是:1、ACLK的信号来自XT1CLK。
2、MCLK,SMCLK的信号都来自DCOCLKDIV。
3、FLL的参考时钟源来自XT1CLK。
4、XIN和XOUT 两个脚默认为通用IO口,XT1不起作用。
5、XT2IN和XT2OUT也作为普通IO口,XT2不起作用。
为了使能XT1,PSEL必须得置位。
一旦晶振启动,锁频环会使MCLK和SMCLK稳定在1.048576MHZ,而Fdco稳定在2倍的MCLK。
MSP430经典例程讲解
这只是我在学习TI公司生产的16位超的功耗单片机MSP430的随笔,希望能对其他朋友有所借鉴,不对之处还请多指教。
下面,开始430之旅。
讲解430的书现在也有很多了,不过大多数都是详细说明底层硬件结构的,看了不免有些空洞和枯燥,我认为了解一个MCU的操作首先要对其基础特性有所了解,然后再仔细研究各模块的功能。
1、首先你要知道msp430的存储器结构。
典型微处理器的结构有两种:冯 ? 诺依曼结构----程序存储器和数据存储器统一编码;哈佛结构----程序存储器和数据存储器。
MSP430系列单片机属于前者,而常用的mcs51系列属于后者。
0-0xf特殊功能寄存器;0x10-0x1ff外围模块寄存器;0x200-?根据不同型号地址从低向高扩展;0x1000-0x107f seg_b0x1080_0x10ff seg_a 供flash信息存储,剩下的从0xffff 开始向下扩展,根据不同容量,例如149为60KB,0xffff-0x11002、复位信号是MCU工作的起点,430的复位型号有两种:上电复位信号POR和上电清楚信号PUC。
POR信号只在上电和RST/NMI复位管脚被设置为复位功能,且低电平时系统复位。
而PUC信号是POR信号产生,以及其他如看门狗定时溢出、安全键值出现错误是产生。
但是,无论那种信号触发的复位,都会使MSP430在地址0xffff处读取复位中断向量,然后程序从中断向量所指的地址开始执行。
复位后的状态不写了,详见参考书,嘿嘿。
3、系统时钟是一个程序运行的指挥官,时序和中断也是整个程序的核心和中轴线。
430最多有三个振荡器:DCO内部振荡器;LFXT1外接低频振荡器,常见的32768HZ,不用外接负载电容;也可接高频450KHZ-8M,需接负载电容;XT2接高频450KHZ-8M,加外接电容。
430有三种时钟信号:MCLK系统主时钟,可分频1/2/4/8,供CPU使用,其他外围模块在有选择情况下也可使用;SMCLK系统子时钟,供外围模块使用,可选则不同振荡器产生的时钟信号;ACLK辅助时钟,只能由LFXT1产生,供外围模块。
msp430单片机教程
msp430单片机教程MSP430单片机是一种经典的低功耗、高性能的微控制器,被广泛应用于嵌入式系统中。
它具有很多特点,比如低功耗、宽工作电压范围、快速启动速度等。
本文将介绍MSP430单片机的基本知识和使用方法。
首先,我们需要了解MSP430单片机的结构。
MSP430包括CPU、内存、I/O接口等多个部分。
CPU是控制单元,负责处理指令和数据。
内存是存储器,用于存储程序和数据。
I/O接口用于与外部设备进行通信。
MSP430单片机使用C语言进行编程。
编程的基本步骤包括初始化、读取输入、处理数据、输出结果等。
编程时,需要了解寄存器的使用方法和I/O接口的配置。
MSP430提供了丰富的库函数和工具,方便开发人员进行程序开发和调试。
MSP430单片机的应用范围广泛。
它可以用于物联网设备、传感器、控制器、无线通信等多个领域。
由于其低功耗的特点,MSP430单片机在电池供电设备中得到了广泛应用。
其性能优越和易用性也使得它成为嵌入式系统中的首选单片机。
MSP430单片机教程包括了一系列基础和高级的内容。
基础教程首先介绍了MSP430单片机的基本知识,包括硬件结构、编程环境和工具的使用等。
然后,通过一系列实践案例,教授学生如何编写简单的程序。
高级教程则深入讲解了MSP430单片机的一些高级特性和应用,如中断、定时器、串口通信等。
在学习MSP430单片机时,还需要学习如何使用开发板和调试工具。
开发板是连接MSP430单片机和计算机的桥梁,提供了丰富的外设接口。
通过合理配置开发板,可以实现多种外设的功能。
调试工具可以帮助开发人员进行程序的调试和性能优化,提高开发效率和质量。
总之,MSP430单片机是一种功能强大、易用且低功耗的微控制器。
学习MSP430单片机的教程可以帮助我们掌握嵌入式系统的开发和应用。
通过学习,我们可以深入了解MSP430单片机的原理和使用方法,为实际应用提供有力的支持。
msp430基础知识
5:完善的中断服务功能。
6:4种计数功能的选择
7:8种输出计数功能的选择。
8:支持多种时序控制
9:DMA使能
TAR 16位计数器
1:修改Timer _A:当计数时钟不是MLCK时,写入应该计数器在计数器停止计数时,因为它与CPU不同步,可能引起时间的竞争。
2:增计数模式
捕获/比较寄存器CCR0用作Timer_A增计数模式的周期寄存器。因为CCR0为16位寄存器,所以该模式适用于定时周期小于65536的连续计数情况。计数器TAR可以增计数到CCR0的值,当计数值与CCR0的值相等(或定时器值大于CCR0的值)时,定时器复位并从0开始重新计数。
LFXT1CLK:低频时钟源
XT2CLK:高频时钟源
DCOCLK:数字控制RC振荡器
时钟发生器的原理说明
问题的提出:
1: 高频,以便对系统硬件请求和事件作出快速的响应。
2:低频 以便将电流消耗降至最小
{
;
}
基本定时器
MSP430具有基本定时器(Basic Timer1),Basic Timer1经常用在低功耗应用中,它的工作目的就是支持软件和外围模块工作在低频率、低功耗条件下。Basic Timer1通过对SMCLK 和ACLK进行分频,向其他外围模块提供低频率控制信号。Basic Timer1非常适合于周期性地产生中断
。(F14系列没有该定时器)
Timer_A 的特性
1:输入时钟可以有多种选择,可以是慢始终、快时钟以及外部时钟。
2:没有自动重装时间常数功能,但产生的定时脉冲或PWM(脉宽调制)信号没有软件带来的误差。
3:不仅能捕获外部事件发生的时间还可以锁定其发生时的高低电平。
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发生了中断,也不会漏掉每一次中断。
计算机硬件技术基础MSP430_复习知识点
第一章基本原理1.冯诺依曼计算机:工作原理为存储程序+程序控制,结构为输入设备,存储器,运算器,控制器,输出设备2.基本概念【Bit:位】【Byte:字节,8个二进制位】【word:字,CPU内部数据处理基本单位,二进制位数和内部寄存器,运算装置,总线宽度一致】3.CPU,存储器,输入输出设备,输入输出设备通过I/O接口和系统连接,各个部位通过总线链接。
4.总线分为:地址总线(AB),数据总线(DB),控制总线(CB)。
地址总线宽度,决定CPU寻址能力,能够使用多大的内存或I/O端口。
数据总线的宽度决定一次最多传送数据的宽度。
5.存储单元:存储信息的基本单元。
存储单元内容:存储的数据。
存储单元地址:每个单元有唯一的编制,译码后可以得到相应的选通信号。
6.读操作:发出地址信号选中存储单元,发出读控制信号,将存储单元的内容通过数据总线传入CPU中。
写操作:CPU发出地址信号,选中相应的存储单元;CPU发出存储器写控制信号;将写的内容通过数据总线写入选中存储单元中。
7.定址原则:任何操作对象都有确定的地址,译码电路将地址信号实现定制功能。
8.微机的工作过程:取指令,将指令取出到CPU并且进行译码。
执行指令,由控制电路发出执行指令所需要的信号,控制CPU执行响应操作。
第二章数字的表示运算9.N进制到十进制:略。
十进制到N进制:整数部分为除n取余,商零为止,先低后高。
小数部分为乘2取整,到零为止,先高后低。
10.二进制数和十六进制数的运算:算术运算,进位和借位都存储在标志寄存器中。
11.无符号数:所有各位都表示数值大小,最高位无符号意义。
用于处理全部是正数的场合。
12.带符号数:用补码来表示带符号数。
求补运算:按位取反,最低位+1,相当于(0-该数)补码:正数的补码:全部为数字位(最高位是0)。
负数的补码:对该数正数进行求补运算(最高位为1)。
补码真值计算:最高位为0,等于二进制的数值。
最高位为1,先求补运算,再求数值大小。
学习笔记-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单片机学习心得总结改变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单片机入门知识
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带硬件乘法器
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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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)一般情况下,均使用宏定义去配置寄存器,这样做省事省力,可读性好。