当前位置:文档之家› MSP430端口多个引脚中断

MSP430端口多个引脚中断

MSP430端口多个引脚中断

[1] 中断服务程序的格式

// P2 中断服务子程序

#pragma vector = PORT2_VECTOR

__interrupt void P2_IRQ(void)

{

switch(P1IFG)

{

case 0x01: // 引脚0

case 0x02: // 引脚1

case 0x04: // 引脚2

case 0x08: // 引脚3

case 0x10: // 引脚4

case 0x20: // 引脚5

case 0x40: // 引脚6

case 0x80: // 引脚7

}

}

中断服务程序最主要的是中断向量的设置

[2] 用P2.0~P2.3 的引脚中断,控制P4.0~P4.3 的LED闪烁

设置P2.0~P2.3 为输入状态

设置P2.0~P2.3 开中断

设置P2.0~P2.3 中断为上升沿中断

开全局中断_EINT();

设置P4.0~P4.3 为输出模式

写P2 中断服务子程序,如果某引脚有中断,则改变相对应的LED状态。

实验注意事项

[1] 在中断服务程序里面不要占用大量的时间,如果有大量的数据需要处理,则可以使

用在中断服务程序中设置标志变量,然后在主程序里面判断标志变量值,然后处理的方法。

[2] 中断服务程序只有在模块中断允许开启和全局中断开启时才有效

[3] 有的多个中断源使用一个中断向量,则需要在进中断的时候用switch~case语句判断

相关寄存器到底是哪个中断源发出的中断请求。

[4] I/O 口里面只有P1和P2口能响应中断,设计硬件电路的时候需要注意。

MSP430 定时器TB中断应用实例

MSP430 定时器TB中断应用实例 msp430定时器中断,实现功能:利用定时器TB0的中断实现板上led灯得闪烁。 TA和TB的设置相似,需要设置的寄存器有: 1、TBR:定时计数器主体,对定时计数器进行初始值设置。 2、TBCTL:控制寄存器,对定时器的各个属性进行设置,各位如图所示,(图中是TA的控制寄存器,把A改成B就是了) TBSSELx是选择定时器时钟输入源,一般设置为2取系统时钟。 IDx是对输入时钟进行分频,0不分频,1为2分频,2为4分频,3为8分频 MCx为计数模式控制位,0为停止模式,1为增基数模式,2为连续计数模式,3为增/减计数模式 3、TBCCR0寄存器用于设置比较值,例如增加计数模式时,当TBR中的值增加到TBCCR0中的值时,产生中断。 程序代码: #include "msp430.h" #define led P1OUT

int main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; P1DIR = 0x01; TBR = 0;//设置计数器初值 TBCTL |= TBSSEL_2|0xc0|MC_1;//对寄存器TBCTL进行设置,TBSSEL_2为选择MCLK系统时钟,0xc0为8分频,MC_1为增计数模式 TBCCR0 = 0xfffd;//设置比较值,当TBR中的值增加到TBCCR0时,产生中断。TBCCTL0 &= ~CAP;//设置为比较模式 while(1) { led = 0x01; do{;} while(!(TBCCTL0 & CCIFG));//没有中断标志时进行空操作 TBCCTL0 &= 0xfffe;//对中断标志进行软件清零 led = 0x00; do{;} while(!(TBCCTL0 & CCIFG)); TBCCTL0 &= 0xfffe; } //return 0; }

MSP430 中断服务

当系统时钟发生器基本功能建立之后,CPU内状态寄存器SR的SCG1,SCG0,CPUOFF,OSCOFF位是重要的低功耗控制位。只要任意中断被响应,上述控制位就被压入堆栈保存,中断处理之后,又可恢复先前的工作方式。在中断处理子程序执行期间,通过间接访问堆栈数据,可以操作这些控制位;这样允许程序在中断返回(RETI) 后,以另一种功耗方式继续运行。 各控制位的作用如下: SCG1:复位,使能SMCLK;置位,禁止SMCLK。 SCG0:复位,激活直流发生器,只有SCG0置位,并且DCOCLK没有被用作MCLK或SMCLK时,直流发生器才能被禁止。 OSCOFF:复位,激活LFXT1,只有当OSCOFF被置位并且LFXT1CLK不用于MCLK或SMCLK时,FLXT1才能被禁止;当使用晶体振荡器关闭选项OSCOFF时,需要考虑晶体振荡器的启动设置时间 CPUOFF:复位,激活MCLK;置位,关闭MCLK。 控制位SCG1、SCG0、CPUOFF、OSCOFF可由软件配制成六种不同的工作模式:工作模式控制位 CPU状态、振荡器及时钟 SCG1=0 CPU活动 SCG0=0 MCLK活动 AM CPUOFF=0 SMCLK活动 OSCOFF=0 ACLK活动 SCG1=0 CPU禁止 LPM0 SCG0=0 MCLK禁止 OSCOFF=0 SMCLK活动 CPUOFF=1 ACLK活动 SCG1=0 CPU禁止 MCLK禁止 LPM1 SCG0=1 如果DCOCLK位用作MCLK或SMCLK,则直流发生器禁止, 否则,仍然活动 OSCOFF=0 SMCLK活动 CPUOFF=1 ACLK活动 SCG1=1 CPU禁止 如果DCO未被用作MCLK或SMCLK,自动禁止 SCG0=0 MCLK禁止

MSP430 定时器A的使用

第四讲定时器A的使用 MSP430F413芯片中含有TimerA3模块,如图1-2所示。其常用的外引线有三条:TACLK、TA1和TA2。 TACLK:定时器_A输入时钟(48脚),与P1.6和ACLK输出共用同一引脚。 TA1:定时器_A的第一通道输入、输出引脚(51脚)。捕获方式:CCI1A输入;比较方式:OUT1输出。 TA2:定时器_A的第二通道输入、输出引脚(45脚)。捕获方式:CCI2A输入;比较方式:OUT2输出。 1.定时器A功能及结构 定时器A基本结构是一个十六位计数器,由时钟信号驱动工作,结构框图如图4-1所示。 图4-1 定时器A结构图 定时器A具有多种功能,其特性如下: (1)输入时钟可以有三种选择,可以是慢时钟(ACLK)、快时钟(SMCLK与单片机主时钟同频)和外部时钟。 (2)能产生的定时中断、定时脉冲和PWM(脉宽调制)信号,没有软件带来的误差。

(3)不仅能捕获外部事件发生的时间,还可选择触发脉冲沿(由上升沿或下降沿触发)。 定时器A功能模块主要包括: (1)计数器部分:输入的时钟源具有4种选择,所选定的时钟源又可以1、2、4或8分频作为计数频率,Timer_A可以通过选择4种工作模式灵活的完成定时/计数功能。 (2)捕获/比较器:用于捕获事件发生的时间或产生时间间隔,捕获比较功能的引入主要是为了提高I/O 端口处理事务的能力和速度。不同的MSP430单片机,Timer_A模块中所含有的捕获/比较器的数量不一样,每个捕获/比较器的结构完全相同,输入和输出都取决于各自所带控制寄存器的控制字,捕获/比较器相互之间完全独立工作。 (3)输出单元:具有可选的8种输出模式,用于产生用户需要的输出信号,支持PWM输出。 2.定时器工作模式 (1)停止模式:停止模式用于定时器暂停,并不发生复位,所有寄存器现行的内容在停止模式结束后都可用。当定时器暂停后重新计数时,计数器将从暂停时的值开始以暂停前的计数方向计数。例如,停止模式前,Timer_A工作于增/减计数模式并且处于下降计数方向,停止模式后,Timer_仍然工作于增/减计数模式,从暂停前的状态开始继续沿着下降方向开始计数。如果不需这样,则可通过TACTL中的CLR控制位来清除定时器的方向记忆特性。 (2)增计数模式:捕获/比较寄存器CCR0用作Timer_A增计数模式的周期寄存器,因为CCR0为16位寄存器,所以该模式适用于定时周期小于65536的连续计数情况。计数器TAR可以增计数到CCR0的值,当计数值与CCR0的值相等(或定时器值大于CCR0的值)时,定时器复位并从0开始重新计数。增计数模式的计数过程如图4-2所示。通过改变CCR0值,可重置计数周期。 图4-2增计数模式示意图 (3)连续计数模式:在需要65536个时钟周期的定时应用场合常用连续计数模式。定时器从当前值计数到单增到0FFFFH后,又从0开始重新计数如图4-3所示。 图4-3 连续计数模式 (4)增/减计数模式

430中断总结

MSP430的中断分为3种: 1.系统复位、 2.非屏蔽中断、 3.可屏蔽中断。 系统复位指向中断向量表(表3-11)的最高地址0xFFFE。 非屏蔽中断和可屏蔽中断根据能否被SR寄存器中的全局中断使能位GIE禁用来区分,非屏蔽中断不受GIE的控制,具备独立的中断使能; 可屏蔽中断除了受本身的中断使能控制,还接受GIE控制。 1. 在MSP430中 @非屏蔽中断主要有3个,分别是来自MSP430 外部管脚NMI的触发 FLASH非法访问 振荡器错误 非屏蔽中断都指向中断向量表中的0xFFFC地址。 2. MSP430具备大量的@可屏蔽中断,定时器、ADC、DMA、UART、WDT、I/O、比较器等都具备中断功能。不同的可屏蔽中断优先级可根据中断向量表决定。可屏蔽中断的中断向量表从0xFFFA地址开始向低地址扩展,地址越高的中断向量表所对应的中断优先级越高。 3. 每个中断向量在中断向量表里面占据一个2Byte空间的表项,这个2Byte的空间用来存储对应中断服务函数的首地址,CPU根据中断向量表里的地址跳转到中断服务函数。仔细观察中断向量表可以看到,一些中断向量对应于多个中断源。例如,地址为0xFFF8的Timer1_A3中断,当TA1CCR1中断标志位CCIFG置位或者TAIFG置位都会跳转到该向量。又如具备中断功能的P1和P2端口,端口中的任意一个管脚发生中断都会跳转到对应的中断向量。这种中断就叫做多源中断。对于多源中断,中断源中任意一个中断发生都会跳转到公用的中断向量表项,这个时候需要通过中断标志位区别具体的中断源。有了这些中断向量表的基础知识,下面介绍中断的处理过程,包括中断的接收和退出过程。 4. 微控制器使用过程中一些突发的程序跑飞问题,很多时候都是由于没有正确地处理中断造成的。 5. 中断发生的先决条件是对应中断使能位使能, @非屏蔽中断要求其独立的中断使能开启; @可屏蔽中断要求全局中断使能和自身中断使能同时开启。

MSP430教程10:MSP430单片机WDT看门狗定时器解析

看门狗定时器用来防止程序因供电电源、空间电磁干扰或其它原因引起的强烈干扰噪声而跑飞的事故。程序中设置看门狗清零指令 WDTCTL=WDTPW+WDTCNTCL,当程序跑飞不能及时清零看门狗,导致看门狗溢出复位,这样程序可以恢复正常运行状态。 一、WDT寄存器包括WDTCNT和WDTCTL,两个寄存器在上电和系统复位内容全部清零 1.记数单元WDTCNT:WDTCNT是16位增记数器,由MSP430选定的时钟电路产生的固定周期脉冲信号对记数器进行加法记数。WDTCNT不能直接软件存取,必须通过看门狗定时器的控制寄存器WDTCTL来控制。 2.控制寄存器WDTCTL:WDTCTL由两部分组成,高8位用作口令,即5AH(头文件中定义为WDTPW),低8位是对WDT操作的控制命令。写入WDT控制命令时先写入口令WD TPW,口令写错将导致系统复位。读WDTCTL时不需口令,低字节WDTCTL的值,高字节读出始终为69H。 bit 15-8 7 6 5 4 3 2 1 0 口令HOLD NMIES NMI TMSE L CNTCL SSEL IS1 IS0 IS1 SI0 选择看门狗定时器的定时输出,T为WDTCNT的输入时钟源周期。 TMSEL W DT工作模式选择 0 0 T*2的15次 方 0 看门狗模式 0 1 T*2的13次

方 1 定时器模式 1 0 T*2的9次 方 NMI 选择RST/NMI 引脚功能 1 1 T*2的6次 方 RST/NMI为复位端 SSEL 选择WDTCNT的时钟 源 1 RST/NMI为非屏蔽中断输入 0 SMCL K 1 ACLK NMIES 选择NMI中断的边沿触发方 式 HOLD 停止看门狗定时器工作 0 上升沿触发NMI中 断 0 看门狗功能激活 1 下降沿触发NMI中 断 1 时钟禁止输入,记数停止

MSP430 定时器A课件

上次Cloud和大家一起学习完了MSP430的时钟配置,这一篇,我们来学习MSP430 单片机的TimerA(定时/计数器A)。MSP430单片机的TimerA具有非常强大的功能,相关的寄存器配置也相当复杂,Cloud花了好久才逐步理清学习思路,尤其是学习数据手册的相关描述。在这里Cloud提醒大家,虽然现在网上有中文汉化版的数据手册,但Cloud阅读英文原版后对比发现还是英文原版对器件特性描述得更加清楚,而中文汉化版的省略掉了一些内容。好吧,扯远了。下面进入正题: 一、MSP430的Timer结构 首先让我们通过官方描述来初步了解一下MSP430单片机的Timer资源: 定时器A是一个16位的定时/计数器。定时器A支持多重捕获/比较,PWM输出和内部定时。定时器还有扩展中断功能,中断可以由定时器溢出产生或由捕获/比较寄存器产生。 定时器A的特性包括: ·四种运行模式的异步16位定时/计数器 ·可选择配置的时钟源 ·可配置的PWM输出 ·异步输入和输出锁存 ·对所有TA中断快速响应的中断向量寄存器 MSP430G2553单片机共有两个TimerA,分别是Timer0A和Timer1A。 OK,零零总总说了这么多,大家一定带有很多的疑惑,比如什么叫“捕获/比较”等,这里Cloud先不作解释,会用才是王道。我们呢先找来定时器A的结构图给大家初步了解一下定时器A的结构: 我们先从上面部分开始解释。中间红色的是一个16位的TimerA,TAR,这其实就是MSP430单片机内部的一个定时计数器了,类似于51中的TH0和TL0的合体。既然可以拿来计时,那么肯定可以有时钟信号输入,让我们最左边黄色的框,是一个选择器,由上面的TASSEL来选择TACLK、ACLK、SMCLK、INCLK的其中一种时钟。上次我们已经学习过ACLK和SMCLK,也知道如何配置这两个时钟了(这也是为什么先学习时钟的原因),另外两个是外部时钟源,其中TACLK可以由P1.0输入。跟在时钟源后面的是一个分频器,由ID来控制,将时钟源的时钟信号1、2、4、8分频后作为定时/计数器的时钟源。TAR右边的蓝色框代表TimerA在计数模式下由MC来控制TAR的四种计数方式。同时我们还注意到TAR的左下方有一个TACLAR连接至TAR的Clear端,显然是清零作用的,数据手册还告诉我们置位TACLAR,不但会清零TAR的计数值还会清除时钟分频信息。TACLAR 一旦置1,会自动归零,所以可以当做是TimerA的复位按钮。

MSP430简介(超详细·)

msp430简介 MSP430是德州公司新开发的一类具有16位总线的带FLASH 的单片机,由于其性价比和集成度高,受到广大技术开发人员的青睐.它采用16位的总线,外设和内存统一编址,寻址范围可达64K,还可以外扩展存储器.具有统一的中断管理,具有丰富的片上外围模块,片内有精密硬件乘法器、两个16位定时器、一个14路的12位的模数转换器、一个看门狗、6路P口、两路USART通信端口、一个比较器、一个DCO内部振荡器和两个外部时钟,支持8M 的时钟.由于为FLASH型,则可以在线对单片机进行调试和下载,且JTAG口直接和FET(FLASH EMULATION TOOL)的相连,不须另外的仿真工具,方便实用,而且,可以在超低功耗模式下工作对环境和人体的辐射小,测量结果为100mw左右的功耗(电流为14mA左右),可靠性能好,加强电干扰运行不受影响,适应工业级的运行环境,适合与做手柄之类的自动控制的设备.我们相信MSP430单片机将会在工程技术应用中得以广泛应用,而且,它是通向DSP系列的桥梁,随着自动控制的高速化和低功耗化, MSP430系列将会得到越来越多人的喜爱. 一、IO口 (一)、P口端口寄存器: 1、PxDIR 输入/输出方向寄存器 (0:输入模式 1:输出模式) 2、PxIN 输入寄存器 输入寄存器是只读寄存器,用户不能对其写入,只能通过读取该寄存器的内容知道I/O口的输入信号。 3、PxOUT 输出寄存器 寄存器内的内容不会受引脚方向改变的影响。 4、PxIFG 中断标志寄存器 (0:没有中断请求 1:有中断请求) 该寄存器有8个标志位,对应相应的引脚是否有待处理的中断请求;这8个 中断标志共用一个中断向量,中断标志不会自动复位,必须软件复位;外部 中断事件的时间必须>=1.5倍的MCLK的时间,以保证中断请求被接受; 5、PxIES 中断触发沿选择寄存器 (0:上升沿中断 1:下降沿中断) 6、PxSEL 功能选择寄存器 (0:选择引脚为I/O端口 1:选择引脚为外围模块功能) 7、PxREN 上拉/下拉电阻使能寄存器 (0:禁止 1:使能) (二)、常用特殊P口: 1、P1和P2口可作为外部中断口。 2、P6可作为A/D输入口。 3、P1.2和P2.0可作为PWM波输出口。 4、P1.1:MCLK P1.5:ACLK 5、串口通信时:P2.4、 P4.0为发送TXD, P2.5 、P4.1为接收RXD。 (三)、基本操作: 1、所有P口都可作为通用IO口使用 2、所有P口都可进行字节操作和位操作 按字节操作:

MSP430定时器A说明

MSP430的定时器A有比较\捕获两种工作模式 比较模式: 这是定时器的默认模式,当在比较模式下的时候,与捕获模式相关的硬件停止工作,如果这个时候开启定时器中断,然后设置定时器终值(将终值写入TACCRx),开启定时器,当TAR的值增到TACCRx的时候,中断标志位CCIFGx置1,同时产生中断。若中断允许未开启则只将中断标志位CCIFGx置1。 例子:比较模式就像51单片机一样,要能够软件设置定时间隔来产生中断处理一些事情,如键盘扫描,也可以结合信号输出产生时序脉冲发生器,PWM信号发生器。如:不断装载TACCRx,启动定时器,TAR和TACCRx比较产生中断,输出时序脉冲。 捕获模式: 利用外部信号的上升沿、下降沿或上升下降沿触发来测量外部或内部事件,也可以由软件停止。捕获源可以由CCISx选择CCIxA,CCIxB,GND,VCC。完成捕获后相应的捕获标志位CCIFGx置1。 捕获模式的应用: 利用捕获源来触发捕获TAR的值,并将每次捕获的值都保存到TACCRx中,可以随时读取TACCRx的值,TACCRx是个16位的寄存器,捕获模式用于事件的精确定位。如测量时间、频率、速度等。 利用MSP430单片机定时器A和捕获/比较功能模块结合使用,实现脉冲宽度的测量。 本例程用到了定时器A的CCI1A端口(例如MSP430F14X的P1.2引脚)作捕获外部输入的脉冲电平跳变,同时结合简单的软件算法就能实现脉冲宽度的测量。在实际应用中可根据例程中的start,end,overflow三个变量来计算脉冲宽度。此功能模块在实际产品应用中体现出有较高的应用价值。 具体例程 #include unsigned int start,end; unsigned char overflow; void main (void) { WDTCTL = WDTPW+WDTHOLD; //关闭看门狗定时器 P1DIR = BIT0+BIT4; //设置P1.0和P1.4方向为输出 P1SEL = BIT2; //设置P1.2端口为功能模块使用 TACTL = TASSEL0+TACLR+TAIE+MC1; //定时器A时钟信号选择ACLK,同时 //设置定时器A计数模式为连续增计模式

MSP430单片机中断的定义及原理

MSP430单片机中断的定义及原理 430的中断是按照下图1的优先级顺序定义的,有三种中断:1.系统重置、2.不可屏蔽中断(NMI)、3.可屏蔽中断。 图1.中断优先级 部分具体的中断优先级由高到低为: PORT2_VECTOR (1 * 2u)/* 0xFFE2 Port 2 */ PORT1_VECTOR (4 * 2u)/* 0xFFE8 Port 1 */ TIMERA1_VECTOR (5 * 2u)/* 0xFFEA TImer A CC1-2,TA */ TIMERA0_VECTOR (6 * 2u)/* 0xFFEC TImer A CC0 */ ADC_VECTOR (7 * 2u)/* 0xFFEE ADC */ USART0TX_VECTOR (8 * 2u)/* 0xFFF0 USART 0 Transmit */ USART0RX_VECTOR (9 * 2u)/* 0xFFF2 USART 0 Receive */ WDT_VECTOR (10 * 2u)/* 0xFFF4 Watchdog TImer */ COMPARATORA_VECTOR (11 * 2u)/* 0xFFF6 Comparator A */ TIMERB1_VECTOR (12 * 2u)/* 0xFFF8 Timer B CC1-2,TB */ TIMERB0_VECTOR (13 * 2u)/* 0xFFFA Timer B CC0 */ NMI_VECTOR (14 * 2u)/* 0xFFFC Non-maska××e */ RESET_VECTOR (15 * 2u)/* 0xFFFE Reset [Highest Priority]*/ 其中可屏蔽中断分为系统NMI(SNMI)和用户NMI(UNMI),一般来说,不可屏蔽中断不受GIE标志位的影响。用户不可屏蔽中断的中断源为NMIIE、ACCIE和OFIE,当响应用户不可屏蔽中断后,其他不可屏蔽中断就自动被禁止,以防止同级别的中断发生产生中断嵌套。当同时有多个中断来的时候才有优先级的考虑(优先级顺序可查看向量表)。有中断响应以后自动关闭总中断,这个时候即使来更高优先级的中断都不会响应。要中断嵌套的话,就必须在中断中打开总中断。

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-0x1100 2、复位信号是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产生,供外围模块。 4、中断是430处理器的一大特色,因为几乎每个外围模块都能产生,430可以在没有任务时进入低功耗状态,有事件时中断唤醒CPU,处理完毕再次进入低功耗状态。 整个中断的响应过程是这样的,当有中断请求时,如果CPU处于活动状态,先完成当前命令;如果处于低功耗,先退出,将下一条指令的PC值压入堆栈;如果有多个中断请求,先响应优先级高的;执行完后,等待中断请求标志位复位,要注意,单中断源的中断请求标志位自动复位,而多中断的标志位需要软件复位;然后系统总中断允许位SR.GIE复位,相应的中断向量值装入PC,程序从这个地址继续执行。这里要注意,中断允许位SR.GIE和中断嵌套问题。如果当你执行中断程序过程中,希望可以响应更高级别的中断请求时,必须在进入第一个中断时把SR.GIE置位。 其实,其他的外围模块时钟沿着时钟和中断这个核心来执行的。具体的结构我也不罗索了,可以参考430系列手册。 ----------------------------------------------------------- 上面把430单片机的基础特性交待了一下,让大家整体有了结构的印象,后面我想在写一下C语言对430编程的整体结构。基本上属于框架结构,即整体的模块化编程,其实这也是硬件编程的基本法则拉(可不是我规定的法则哦)。 首先是程序的头文件,包括#include ,这是14系列,因为常用149;其他

MSP430单片机定时器实验报告

MSP430单片机定时器实验报告 实验四定时器实验 实验目的: MPS430F5529片内集成的定时器A的使用,学习计数器的补捕获比较模块的使用。实验内容: 定时器采用辅助时钟ACLK作为计数脉冲,fACLK=32768Hz,实现以下功能: 1. 定时器TA0延时1s,点亮或熄灭LED6,即灯亮1s灭1s,如此循环,采用中断服务程序实现。 2. 定时器TA0延时1s,点亮或熄灭LED4,采用捕获比较器CCR0的比较模式,设定输出方式,输出方波,不用中断服务程序 3. 采用捕获比较器CCR1的比较模式LED5,设定输出方式,输出PWM波形,使LED亮2s,灭1s。 4. 用定时器实现30s倒计时,在液晶模块上显示,每过一秒显示数字变化一次。 5. 使用TA1的捕获比较器CCR0捕获按键的间隔时间,在液晶模块上显示。程序代码: 程序1: #include void main() {WDTCTL = WDTPW + WDTHOLD; //关看门狗 P1DIR |= BIT3; //设置P1.0口方向为输出。 TA0CCTL0 = CCIE; //设置捕获/比较控制寄存器中CCIE位为1, //CCR0捕获/比较功能中断为允许。

TA0CCR0 = 32767; //捕获/比较控制寄存器CCR0初值为32767 TA0CTL = TASSEL_1 + MC_1+TACLR; //设置定时器A控制寄存器TACTL,//使时钟源选择为SMCLK辅助时钟。 //进入低功耗模式LPM0和开总中断_BIS_SR(LPM0_bits +GIE); } //定时器A 中断服务程序区 #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer_A (void) { P1OUT ^= BIT3; //P1.0取反输出 } 实验现象: 实验开始后,实验板上LED6亮灭闪烁,间隔为1s。 程序2: #include void main(void) { WDTCTL = WDTPW + WDTHOLD; // 关狗 P1DIR |= BIT1; // P1.1 设置为输出 P1SEL |= BIT1; // P1.1 输出使能 TA0CCR0 = 60000; // PWM Period TA0CCTL0 = OUTMOD_4; // CCR1 模式4 TA0CCR1 = 30000; // CCR1 PWM duty cycle TA0CTL = TASSEL_1 + MC_1 + TACLR; // ACLK, up mode, clear TAR

MSP430F149的定时器A操作

MSP430F149的定时器A定时操作 1)定时器A的图解 图1 定时器A图解 2)定时器A的四种计数模式。 1.停止模式。 2.增计数模式。(产生两个中断标志) 也就是当计数到跟TACCR0一样的时候,就返回0,重新计数。当计数到TACCR0的同时产生一个中断标志CCIFG,而当计数器溢出返回零的同时又同时产生一个中 断标志TAIFG。如图:

图2 增计数模式的波形图 3.连续计数模式。(产生一个中断标志) 也就是计数器将直接计数到计数器所能计数的最大值0FFFFH之后重新返回零,再次计数。返回零的同时产生一个TAIFG中断标志。如图: 4.增减计数模式。(产生两个中断标志) 也就是当计数器计数到跟TACCR0一样的之后,然后从TACCR0开始又减少,直到为零,然后又开始增。当计数跟TACCT0一样的时候产生一 个中断标志CCIFG,当减到为零的时候又产生一个中断标志TAIFG。如图: 注意:当重新写入TACCR0数值的时候,当新的数据大于原来的数值的时候,计数器将计数到新的数值才重新返回零;当新的数据小于原来的数值的时候,计数器将直接返回零重新计数。 3)定时器A的寄存器。 1.TACTL

●TASSELx:计时器A的时钟来源选择。 ●IDx:计时器A时钟的分频选择。 ●MCx:计时器A四种计数模式选择。 ●TACLR:计数器A的TAR计数清零,同时也可以清楚时钟分频器和计 数方向。 ●TAIE:TAIFG中断标志使能。在捕获模式下可以打开所有CCIFG的中 断使能。 ●TAIFG:中断标志位。 2.TAR 计数器的计数寄存器。 3.TACCTLx ●CMx:捕获模式选择。00:关闭;01:上升沿捕获;10:下降沿 捕获;11:上升下降沿捕获。 ●CCISx:捕获引脚选择。 ●SCS:选择捕获电平方式。0异步时钟;1同步时钟。 ●SCCI:锁存同步时钟输入端。也就是锁存EQUx的值,以供CPU 读取。 ●CAP:捕获模式和比较模式选择。0比较;1捕获。 ●OUTMODx:输出模式选择。 ●CCIE:CCIFG中断标志使能。 ●CCI:捕获当时输入信号的值。以供CPU读取。 ●OUT:当前输出的镜像,以供CPU读取。 ●COV:捕获溢出位,当第一次捕获的时候没有将寄存器里面的数 据读走,就又发生了一次捕获,所有溢出。(必须由软件清零) ●CCIFG:中断标志位。

msp430g2553的P1中断

P1口中断 #include unsigned char flag=0; //任务标志 void Iint_Port1(void); //函数声明 void main(void) { WDTCTL=WDTPW+WDTHOLD; //关闭看门狗 Iint_Port1(); //初始化p1.0 _EINT(); //开总中断允许 while(1) { LPM3; //进入低功耗模式3,I/O口中断可将其唤醒 if(!flag) {P1OUT=BIT0;} //中断服务程序 else if(flag) {P1OUT=BIT6;} //其他任务 } } #include unsigned char flag=0; //任务标志 void Iint_Port1(void); //函数声明 void main(void)

{ WDTCTL=WDTPW+WDTHOLD; //关闭看门狗 Iint_Port1(); //初始化p1.0 _EINT(); //开总中断允许 while(1) { LPM3; //进入低功耗模式3,I/O口中断可将其唤醒 if(!flag) {P1OUT=BIT0;} //中断服务程序 else if(flag) {P1OUT=BIT6;} //其他任务 } } #pragma vector=PORT1_VECTOR __interrupt void Port_1(void) { P1IFG=0; //多源中断,需靠软件清除P1IFG flag=1; //置任务标志 _BIC_SR_IRQ(LPM3_bits); //将CPU从睡眠模式唤醒 } void Iint_Port1(void)

MSP430 定时器A和B 中断定时 1秒操作

MSP430 定时器A 和B 中断定时1 秒操作 /********************TimerA0 1 秒定时TIMER B 1 秒定时溢出中断: MCLK = 2MHz DCOCLKLFXT1 = 32768Hz ACLK***********************/ #include unsigned int i;unsigned int times,times_b;unsigned int sec; /***** 定时器A 初使化*******/void TimerA_Init(void){TACTL = TASSEL_1 + ID0 + TACLR ; //ACLK=32768Hz ,清除tar ,2 分频CCTL0 = CCIE; //CCR0 = 819; // (1/32768)*819 =20 ms ??TACTL |= MC0; //增计数}/**** 定时器 B 初使化*****/void TimerB_Init (void){TBCTL = TBSSEL_1 + ID0 + TBCLR ; //ID_2 + ID1 +TBCCTL0 = CCIE; // INTERRUPT ENABLETBCCR0 = 819; //TBCTL |= MC0;}/***** 秒测试 1 秒响一下********/void Sec_Beep(void) //beep every second{ if(sec==1){ sec = 0; P5OUT – 0x10;}}void main( void ){times = 20;times_b = 20;WDTCTL = WDTPW + WDTHOLD;// SYstem clockDCOCTL = 0x60;BCSCTL1 = 0x86;//XT20FF ,XTS=0 LOW FREQ , RESEL=6 DCOCLK=2MHz// XT2on, XTS DIVA.1 DIVA.0 XT5V RSEL.2 RSEL.1 RSEL.0// 1 0 0 0 0 1 1 0BCSCTL2 = 0x00; //MCLK = DCOCLK, DIVM=0, SMCLK=CCOCLK ,DIVS =0P1DIR |= 0x02; //p1.2 OUTP5DIR |= 0x10; //P5.4 OUTTimerA_Init(); //定时器初使化TimerB_Init();_EINT(); // interrupt enablefor(;;) { _BIS_SR(LPM3_bits); _NOP();}} /****** 定时器 A 中断处理***********/#pragma vector = TIMERA0_VECTOR__interrupt void Timer_A (void){ times--;if(times == 0){ times = 20; sec=1; Sec_Beep();}}/****** 定时器B 中断 处理***********/#pragma vector = TIMERB0_VECTOR__interrupt void Timer_B0 (void){ times_b--; if(times_b == 0) { times_b = 20; P1OUT – 0x02; }}

430的各种中断函数

1.首先你要知道msp430的存储器结构。典型微处理器的结构有两种:冯。诺依曼结构——程序存储器和数据存储器统一编码;哈佛结构——程序存储器和数据存储器;msp430系列单片机属于前者,而常用的mcs51系列属于后者。 0-0xf特殊功能寄存器;0x10-0x1ff外围模块寄存器;0x200-?根据不同型号地址从低向高扩展;0x1000-0x107f seg_b0x1080_0x10ff seg_a 供flash信息存储 剩下的从0xffff开始向下扩展,根据不同容量,例如149为60KB,0xffff-0x1100 2.复位信号是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产生,供外围模块。 4.中断是430处理器的一大特色,因为几乎每个外围模块都能产生,430可以在没有任务时进入低功耗状态,有事件时中断唤醒cpu,处理完毕再次进入低功耗状态。 整个中断的响应过程是这样的,当有中断请求时,如果cpu处于活动状态,先完成当前命令;如果处于低功耗,先退出,将下一条指令的pc值压入堆栈;如果有多个中断请求,先响应优先级高的;执行完后,等待中断请求标志位复位,要注意,单中断源的中断请求标志位自动复位,而多中断的标志位需要软件复位;然后系统总中断允许位SR.GIE复位,相应的中断向量值装入pc,程序从这个地址继续执行。 这里要注意,中断允许位SR.GIE和中断嵌套问题。如果当你执行中断程序过程中,希望可以响应更高级别的中断请求时,必须在进入第一个中断时把SR.GIE置位。 其实,其他的外围模块时钟沿着时钟和中断这个核心来执行的。具体的结构我也不罗索了,可以参考430系列手册。

MSP430定时器A中文超级详解

文章转载自网络-----------------感谢原作者的辛勤奉献 MSP430的定时器中有比较捕获 比较模式: 这是定时器的默认模式,当在比较模式下的时候,与捕获模式相关的硬件停止工作,如果这个时候开启定时器中断,然后设置定时器终值(将终值写入TACCRx),开启定时器,当TAR的值增到TACCRx的时候,中断标志位CCIFGx 置一,同时产生中断。若中断允许未开启则只将中断标志位CCIFGx置一。 例子:比较模式就像51单片机一样,要能够软件设置定时间隔来产生中断处理一些事情,如键盘扫描,也可以结合信号输出产生时序脉冲发生器,PWM信号发生器。如:不断装载TACCRx,启动定时器,TAR和TACCRx比较产生中断处理。 捕获模式: 利用外部信号的上升沿、下降沿或上升下降沿触发来测量外部或内部事件,也可以由软件停止。捕获源可以由CCISx选择CCIxA,CCIxB,GND,VCC。完成捕获后相应的捕获标志位CCIFGx置一 捕获模式的应用: 利用捕获源的来触发捕获TAR的值,并将每次捕获的值都保存到TACCRx 中,可以随时读取TACCRx的值,TACCRx是个16位的寄存器,捕获模式用于事件的精确定位。如测量时间、频率、速度等 例子:利用两次捕获的值来测量脉冲的宽度。或捕获选择任意沿,CCISx=”11“(输入选择VCC),这样即当VCC与GND发生切换时产生捕获条件 结合利用:异步通讯

同时应用比较模式和捕获模式来实现UART异步通信。即利用定时器的比较模式来模拟通讯时序的波特率来发送数据,同时采用捕获模式来接收数据,并及时转换比较模式来选定调整通信的接受波特率,达到几首一个字节的目的 ---------------------------------------- 利用MSP430单片机定时器A和捕获/比较功能模块结合使用,实现脉冲宽度的测量。 本例程用到了定时器A的CCI1A端口(例如MSP430F14X的P1.2引脚)作捕获外部输入的脉冲电平跳变,同时结合简单的软件算法就能实现脉冲宽度的测量。在实际应用中可根据例程中的start,end,overflow三个变量来计算脉冲宽度。此功能模块在实际产品应用中体现出有较高的应用价值。 2-例程 #include unsigned int start,end; unsigned char overflow; void main (void) { WDTCTL = WDTPW+WDTHOLD; //关闭看门狗定时器 P1DIR = BIT0+BIT4; //设置P1.0方向为输出 P1SEL = BIT2; //设置P1.2端口为功能模块使用 TACTL = TASSEL0+TACLR+TAIE+MC1; //定时器A时钟信号选择ACLK,同时设置定时器A计数模式为连续增计模式

MSP430F149定时器B讲解

MSP430F149定时器B 1.定时器B模块: TimerB与TimerA大部分相同,不同点在于定时器B的捕获/比较单元增加了锁存器。 二者区别: (1)TimerB计数长度为8位,10位,12位,16位可编程,由TBCTL寄存器的CNTLx两位来配置,而定时器A的计数长度是固定的16位; (2)TimerB没有实现定时器A中的SCCI功能位的功能; (3)TimerB在比较模式下的捕获/比较寄存器功能与TimerA不同,增加了捕获比较锁存器; (4)有些芯片型号当中TimerB输出实现了高阻抗输出; (5)比较模式的原理有所不同:TimerA当中CCRx寄存器当中保存与TAR相比较的数据,而在TimerB 当中CCRx中保存要比较的数据,但并不直接与定时器TBR相比较,而是将CCRx当中的数据锁存到相应的锁存器之后,由锁存器与TBR相比较。从捕获/比较寄存器相比较锁存器传输数据的过程的时间也是可编程的,可以是写入比较捕获寄存器之后立即传输,也可有一个定时器来触发传输。(6)TimerB支持多种同步的定时功能,多重比较捕获功能和多重波形输出功能(PWM波)。而且,通过对比较数据的两级缓冲,可实现多个PWM波同步周期更新。 2.TimerB的逻辑结构图:

定时器B的逻辑结构基本与定时器A相同。 3.定时器B的寄存器: 寄存器相关位的配置过程参考定时器A和数据手册。

4.定时器B的比较功能 当定时器B工作在比较模式时,将数据写入捕获比较锁存器TBCCRx当中,当TBCCTLx当中的CLLDx位决定的装载事件的发生时,TBCCRx中的数据会自动地传输到比较寄存器当中。 5.TI提供的例程: // // // // // MSP430F149 // ----------------- // /|| XIN|- // | | | HF XTAL (455k - 8MHz) // --|RST XOUT|- // | | // | P4.1/TB1|--> CCR1 - 75% PWM // | P4.2/TB2|--> CCR2 - 25% PWM // // M. Buccini // Texas Instruments Inc. // Feb 2005 // Built with IAR Embedded Workbench Version: 3.21A //******************************************************************************

第3讲 MSP430中断系统st_517705504

第3讲
MSP430中断系统
一、MSP430的中断系统简介 二、MSP430的中断系统实验

一、MSP430的中断系统
1、中断的概念 2、MSP430的中断源类型 3、MSP430x169的中断向量表、中断优先级 4、可屏蔽中断响应过程 5、端口P1和P2外中断 6、可屏蔽中断程序设计

1、中断的概念
中断是暂停CPU正在运行的程序, 转去执行相应的中断服务程序,完 毕后返回被中断的程序继续运行的 现象和技术。
CPU执行流程
无中断时 有中断时
非预料 事件1
中断服 务程序1
非预料 事件 2
中断服 务程序 2

2、 MSP430的中断源类型
两种分类: 1) 按中断源的响应是否受控分类 2)按中断源来自MCU外部引脚还是内部分类

1) 按中断源的响应是否受控分类 MSP430的中断源分为三大类型
●系统复位中断 system?reset
(也称不可屏蔽中断,Nonmaskable interrupts) ——不能被总控位GIE和自己的分控位IE位屏蔽的中断
●非屏蔽中断(Non)maskable interrupts
——不能被总控位GIE屏蔽, 但能被自己的分控位IE位屏蔽的中断
●可屏蔽中断maskable interrupts
——能被总控位GIE和自己的分控位IE位屏蔽的中断

状态寄存器SR (Status Register)
15~9 保留 8 7 SCG1 6 SCG0 5 OSCOFF 4 CPUOFF 3 2 1 0
V
GIE
N
Z
C
GIE : 可屏蔽中断屏蔽位 (General Interrupt Enable Bit) 置位1: 允许所有可屏蔽中断 复位0: 禁止所有可屏蔽中断
开/关总中断控制位指令
(disable/enable general interrupt bit) 指令格式 _DINT(?); _EINT(?); 执行操作 V Z N C
0→ GIE 1→ GIE
* * * * #include "in430.h"
#include “intrinsics.h”

相关主题
文本预览
相关文档 最新文档