MSP430 定时器TB中断应用实例

合集下载

msp430单片机的应用实例

msp430单片机的应用实例

MSP430单片机的应用实例首先来了解什么是单片机,什么是msp30单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。

概括的讲:一块芯片就成了一台计算机。

它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。

同时,学习使用单片机了解计算机原理与结构的最佳选择。

可以说,二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。

不过,这种电脑,通常是指个人计算机,简称PC机。

它由主机、键盘、显示器等组成(如图1所示)。

还有一类计算机,大多数人却不怎么熟悉。

这种计算机就是把智能赋予各种机械的单片机(亦称微控制器,如图2所示)。

顾名思义,这种计算机的最小系统只用了一片集成电路,即可进行简单运算和控制。

因为它体积小,通常都藏在被控机械的“肚子”里。

它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。

现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。

各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。

现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品,不是电路太复杂,就是功能太简单且极易被仿制。

究其原因,可能就卡在产品未使用单片机或其它可编程逻辑器件上。

目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。

导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。

更不用说自动控制领域的机器人、智能仪表、医疗器械了。

因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。

MSP430系列单片机是美国德州仪器(TI)1996年开始推向市场的一种16位超低功耗的混合信号处理器(Mixed Signal Processor)。

msp430定时器部分

msp430定时器部分
case 2: break;
case 4:break;
case 10:P1OUT^=BIT0;break;
}
}
ห้องสมุดไป่ตู้
输出模式4主要是翻转:在TAR=CCRX的时候发生翻转。
输出模式主要是复位:在TAR=CCRX时发生复位,只有其他模式到来的时候才能变换。
输出模式6主要是PWM翻转和置位:在TAR=CCR0的时候,发生PWM翻转,在TAR=CCR0的时候,发生置位。
输出模式7主要是PWM复位和置位:在TAR=CCRX的时候,发生PWM复位,在TAR=CCR0的时候,发生复位。
void main()
{
WDTCTL=WDTPW+WDTHOLD;
P6DIR|=BIT0;
CCTL0=CCIE;
CCR0=20000;
TACTL=TASSEL_2+MC_2;
_BIS_SR(GIE);
while(1);
例如:增计数模式下,使用定时器中断使接口发生翻转:
#include<msp430f149.h>
void main()
{
WDTCTL=WDTPW+WDTHOLD;
P6DIR|=BIT0;
CCTL0=CCIE;
CCR0=20000-1;
TACTL=TASSEL_2+MC_1;
定时器的工作模式:
定时器的工作模式位由寄存器TACTL中的MC1和MC0两位控制。
1.停止模式:
定时器暂停计数,就是说当暂停结束后,重新开始计数的时候,计数的开始位是从暂停时候的数开始的。如果想重新计数就得对TACTL控制寄存器中的CLR位置位。

Msp430定时器的介绍及其基本应用

Msp430定时器的介绍及其基本应用

Msp430定时器的介绍及其基本应用Msp430定时器的介绍及其基本应用Msp430单片机一共有5种类型的定时器。

看门狗定时器(WDT)、基本定时器(Basic Timer1)、8位定时器/计数器(8-bit Timer/Counter)、定时器A(Timer_A)和定时器B(Timer_B)。

但是这些模块不是所有msp430型号都具有的功能。

1、看门狗定时器(WDT)学过电子的人可能都知道,看门狗的主要功能就是当程序发生故障时能使受控系统重新启动。

msp430中它是一个16位的定时器,有看门狗和定时器两种模式。

2、基本定时器(Basic Timer1)基本定时器是msp430x3xx和msp430F4xx系列器件中的模块,通常向其他外围提供低频控制信号。

它可以只两个8位定时器,也可以是一个16位定时器。

3、8位定时器/计数器(8-bit Timer/Counter)如其名字所示,它是8位的定时器,主要应用在支持串行通信或数据交换,脉冲计数或累加以及定时器使用。

4、16位定时器A和B定时器A在所有msp430系列单片机中都有,而定时器B在msp430f13x/14x和msp430f43x/44x等器件中出现,基本的结构和定时器A是相同的,由于本人最先熟悉并应用的是定时器A所以在这里就主要谈一下自己对定时器A的了解和应用。

定时器A是16位定时器,有4种工作模式,时钟源可选,一般都会有3个可配置输入端的比较/捕获寄存器,并且有8种输出模式。

通过8种输出模式很容易实现PWM波。

定时器A的硬件电路大致可分为2类功能模块:一:计数器TAR计数器TAR是主体,它是一个开启和关闭的定时器,如果开启它就是一直在循环计数,只会有一个溢出中断,也就是当计数由0xffff到0时会产生一个中断TAIFG。

二:比较/捕获寄存器CCRX如何实现定时功能呢?这就要靠三个比较/捕获寄存器了(以后用CCRx表示)。

当计数器TAR的计数值等于CCRx时(这就是捕获/比较中的比较的意思:比较TAR是否等于CCRx),CCRx单元会产生一个中断。

单片机定时器中断程序实例

单片机定时器中断程序实例

单片机定时器中断程序实例引言:单片机定时器中断是指在单片机运行过程中,通过设置定时器并设置相应的中断服务程序,实现在指定时间间隔内自动触发中断,从而完成特定的任务。

本文将通过一个实例来介绍单片机定时器中断的应用。

一、背景介绍单片机的定时器中断广泛应用于各种实时控制系统中,如温度控制、电机控制等。

通过定时器中断,可以在指定的时间间隔内执行特定的任务,提高系统的实时性和稳定性。

二、实例描述假设我们需要设计一个温度控制系统,要求每隔一秒钟读取一次温度传感器的数值,并根据温度数值控制加热器的开关状态。

我们可以通过单片机的定时器中断来实现这个功能。

1. 初始化定时器我们需要初始化单片机的定时器。

具体步骤如下:(1)设置定时器的工作模式为定时器模式;(2)设置定时器的预分频系数,以确定定时器的计数频率;(3)设置定时器的计数初值,以确定定时器的定时时间;(4)开启定时器中断允许。

2. 编写中断服务程序接下来,我们需要编写定时器中断的服务程序。

当定时器溢出时,单片机会自动跳转到中断服务程序的入口处执行相应的任务。

具体步骤如下:(1)保存当前的现场,包括寄存器、标志位等;(2)读取温度传感器的数值;(3)根据温度数值控制加热器的开关状态;(4)恢复之前保存的现场;(5)退出中断服务程序。

3. 主程序框架我们需要编写主程序框架,以完成整个温度控制系统的功能。

具体步骤如下:(1)初始化单片机的端口和定时器;(2)开启总中断允许;(3)进入主循环;(4)等待定时器中断的发生;(5)执行定时器中断的服务程序。

三、总结通过单片机的定时器中断,我们可以实现在指定时间间隔内自动执行特定的任务,提高系统的实时性和稳定性。

本文通过一个温度控制系统的实例,介绍了单片机定时器中断的应用方法。

希望读者通过阅读本文,对单片机定时器中断有更深入的了解,并能运用到实际项目中。

MSP430中断以及一个键盘的例子

MSP430中断以及一个键盘的例子

最近在学习和实践的过程中接触到了线程的概念。

当你需要处理一大堆数据或者等待一个事件发生时候,系统其实并不需要等在那里,只需建立一个线程,适时的让它在后台运行,处理这些很占用系统的事件。

我想这与中断的功能很是相似,有些时候你让程序卡在那里仅仅是为了等待一个参数的改变,而这个参数完全可以在中断中实现修改,所以巧妙的使用中断对于高效的程序是必须的。

MSP430提供了3类中断:系统复位;非可屏蔽中断;可屏蔽中断。

下表列出了三种中断各自的中断源:MSP430中断优先级结构图如上图所示。

各模块的中断优先级由模块连接链决定,越接近CPU/NMIRS的模块,其中断优先级越高。

上图给出了中断的执行过程,相信大家可以在任何其他的书本中找到类似的流程图。

中断发生,全局中断开启,并且允许相应此中断,此时需要等待当前指令完成。

保存短点和寄存器值。

然后清除寄存器的值以及中断标志位,如果同时有多个中断发生则选择优先级最高的执行,进入中断服务子程序,执行完后,恢复断点,继续执行主程序。

通过这种前后台程序的切换控制程序运行,得到高效率。

下面让我们来看一个4x4键盘的例子。

我们通过中断的方式来感知键盘的操作,通过一个键盘扫描程序来确认按下的键,然后通过数码管动态的显示出来。

#include<msp430x24x.h>static int nRes;int nP10,nP11,nP12,nP13;static char LEDData[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8 e};void delay(int number){while(--number);}int KeyProcess(void){int nres=0;//P1.4输出低电平P1OUT = 0xe0;nP10 = P1IN&BIT0;if (nP10 == 0) nres = 13;nP11 = (P1IN & BIT1) >> 1; if (nP11 == 0) nres = 14;nP12 = (P1IN & BIT2) >> 2; if (nP12 == 0) nres = 15;nP13 = (P1IN & BIT3) >> 3; if (nP13 == 0) nres = 16;//P1.5输出低电平P1OUT = 0xd0;nP10 = P1IN&BIT0;if (nP10 == 0) nres = 9;nP11 = (P1IN & BIT1) >> 1; if (nP11 == 0) nres = 10;nP12 = (P1IN & BIT2) >> 2; if (nP12 == 0) nres = 11;nP13 = (P1IN & BIT3) >> 3;if (nP13 == 0) nres = 12;//P1.6输出低电平P1OUT = 0xb0;nP10 = P1IN&BIT0;if (nP10 == 0) nres = 5;nP11 = (P1IN & BIT1) >> 1;if (nP11 == 0) nres = 6;nP12 = (P1IN & BIT2) >> 2;if (nP12 == 0) nres = 7;nP13 = (P1IN & BIT3) >> 3;if (nP13 == 0) nres = 8;//P1.7输出低电平P1OUT = 0x70;nP10 = P1IN&BIT0;if (nP10 == 0) nres = 1;nP11 = (P1IN & BIT1) >> 1;if (nP11 == 0) nres = 2;nP12 = (P1IN & BIT2) >> 2;if (nP12 == 0) nres = 3;nP13 = (P1IN & BIT3) >> 3;if (nP13 == 0) nres = 4;while(!(nP10 && nP11 && nP12 && nP13 )) {P1OUT = 0x00; //恢复以前值//读取各个管脚的状态nP10 = P1IN&BIT0;nP11 = (P1IN&BIT1) >> 1; nP12 = (P1IN&BIT2) >> 2; nP13 = (P1IN&BIT3) >> 3; }return nres;}void display(int number){int tens,single;tens = number/10;single = number%10;P4OUT = LEDData[single]; P6OUT = 0x01;delay(100);P6OUT = 0x00;P4OUT = LEDData[tens];P6OUT = 0x02;delay(100);P6OUT = 0x00;}void main(){WDTCTL=WDTPW+WDTHOLD; //关闭看门狗//将P1口的所有的管脚在初始化的时候设置为输入方式P1DIR=0;//将P1口所有的管脚设置为一般I/O口P1SEL=0;//将P1.4、P1.5、P1.6、P1.7设置为输出方向P1DIR |= BIT4+BIT5+BIT6+BIT7;//输出低电平P1OUT = 0x00;P2DIR |= BIT0+BIT1+BIT2+BIT3; // when there is a interrupt there be a led indicate P2OUT = 0x00;P4DIR |= 0xff; // P4、P5口用于输出字型码//P5DIR |= 0xff;P6DIR |= BIT0+BIT1; // P6.0 P6.1用于片选P1IE |= BIT0;P1IE |= BIT1;P1IE |= BIT2;P1IE |= BIT3;P1IES |= (BIT0+BIT1+BIT2+BIT3);// pattern of the trigger_EINT();nRes=0;while (1){display(nRes);}}#pragma vector= PORT1_VECTOR __interrupt void Port_1(void){P1OUT = 0x00;nRes=KeyProcess();P1IFG = 0x00;}。

MSP430中断小实验——通过按键改变小灯闪烁频率

MSP430中断小实验——通过按键改变小灯闪烁频率

MSP430中断⼩实验——通过按键改变⼩灯闪烁频率本⼩实验基于MSP430f5529,不同的型号可能管脚和中断配置有所不同。

实现的功能为:第⼀次按下按键后,系统以每 2 秒钟,指⽰灯暗 1 秒,亮 1 秒的⽅式闪烁。

程序采⽤默认时钟配置;第⼆次按下按键后,系统以每 4 秒钟,指⽰灯亮 2 秒,暗 2 秒钟⽅式闪烁。

第三次按下按键后,系统以每 4 秒钟,指⽰灯亮 1 秒,暗 3 秒⽅式闪烁。

程序基于定时器配置。

/** main.c* 第⼀次按下按键后,系统以每 2 秒钟,指⽰灯暗 1 秒,亮 1 秒的⽅式闪烁,程序采⽤默认时钟配置;第⼆次按下按键后,系统以每 4 秒钟,指⽰灯亮 2 秒,暗 2 秒钟⽅式闪烁。

第三次按下按键后,系统以每 4 秒钟,指⽰灯亮 1 秒,暗 3 秒⽅式闪烁,程序基于定时器配置。

*/#include <msp430f5529.h>int count = 0; //计数int t1_50ms = 20; //⼀个单位对应50ms(亮)int t2_50ms = 20; //⼀个单位对应50ms(灭)int flag = 0; //闪烁频率标志int flag_t = 1; //亮灭标志int main(void) {WDTCTL = WDTPW+WDTHOLD;//时钟中断配置P1DIR |= BIT0;TA0CCTL0 = CCIE;//使能定时器中断TA0CCR0 = 50000;TA0CTL = TASSEL_2 + MC_1 + TACLR;//配置为SMCLK,升计数模式,初始化时钟//S1配置P1IE |= BIT7; //允许P1.7中断P1IES |= BIT7; //设置为下降沿中断P1IFG &= ~BIT7; //设置为输⼊P1REN |= BIT7; //启⽤上下拉电阻P1OUT |= BIT7; //将电阻设置为上拉__bis_SR_register(LPM0_bits+GIE); //打开中断return 0;}#pragma vector=TIMER0_A0_VECTOR__interrupt void TIMER0_A0_ISR(void){if(count==t1_50ms&&flag_t==1) //灯亮{P1OUT |= BIT0;count=0;flag_t=0;}else if(count==t2_50ms&&flag_t==0) //灯灭{P1OUT &=~BIT0;count = 0;flag_t=1;}else count++;}#pragma vector=PORT1_VECTOR;__interrupt void botton (void){__delay_cycles(75);//延时消抖switch(flag)//flag决定闪烁频率{case 0:t1_50ms = 20;t2_50ms = 20;break;//1秒亮 1秒暗case 1:t1_50ms = 40;t2_50ms = 40;break;//2秒亮 2秒暗case 2:t1_50ms = 60;t2_50ms = 20;break;//3秒亮 3秒暗}flag++;//状态变化if(flag>2) flag = 0;//flag归位P1IFG &=~ BIT7; //清除中断标志位__bis_SR_register(LPM0_bits+GIE);//打开中断}。

单片机定时器中断程序实例

单片机定时器中断程序实例

单片机定时器中断程序实例单片机定时器中断是一种常用的编程技术,用于实现在特定时间间隔内执行某些操作。

本文将介绍一个单片机定时器中断程序的实例,以帮助读者更好地理解和应用该技术。

让我们明确一下单片机定时器中断的基本原理。

单片机定时器是一种特殊的硬件设备,可以按照预设的时间间隔产生中断信号。

当定时器中断使能时,当定时器计数器达到设定值时,会触发中断,进而执行中断服务程序。

在中断服务程序中,我们可以编写一段代码来完成特定的任务,例如检测外部输入、发送数据、控制输出等。

现在,我们来看一个实际的例子。

假设我们需要每隔1秒检测一次温度传感器,并将温度值通过串口发送出去。

我们可以使用单片机的定时器中断来实现这个功能。

我们需要初始化单片机的定时器,设置定时器的工作模式和计数器的初始值。

这里我们选择使用8位定时器,计数器的初始值为0,工作模式为定时器模式。

在定时器工作模式下,计数器会以一定的频率自动递增,并在达到最大值时溢出并触发中断。

接下来,我们需要编写中断服务程序。

在中断服务程序中,我们首先读取温度传感器的数值,并将其转换为温度值。

然后,我们将温度值通过串口发送出去。

最后,我们清除定时器的中断标志位,以便下次定时器中断的触发。

在主函数中,我们需要使能定时器中断,并设置中断的触发条件。

在这个例子中,我们将定时器的中断触发条件设置为计数器溢出。

然后,我们进入一个无限循环,在循环中不断执行其他任务。

通过以上步骤,我们就完成了一个简单的单片机定时器中断程序。

当定时器中断触发时,中断服务程序会自动执行,完成温度传感器的读取和数据发送任务。

在实际应用中,单片机定时器中断可以用于各种定时任务,如定时采集数据、定时发送数据、定时控制输出等。

通过合理地设置定时器的工作模式和中断触发条件,我们可以轻松实现各种功能需求。

总结起来,单片机定时器中断是一种强大的编程技术,可以帮助我们实现在特定时间间隔内执行某些操作的需求。

通过合理地设置定时器的工作模式和中断触发条件,并编写中断服务程序,我们可以轻松实现各种定时任务。

MSP430单片机的应用实例

MSP430单片机的应用实例

MSP430单片机的应用实例阚世俊B首先来了解什么是单片机,什么是msp30 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。

概括的讲:一块芯片就成了一台计算机。

它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。

同时,学习使用单片机了解计算机原理与结构的最佳选择。

可以说,二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。

不过,这种电脑,通常是指个人计算机,简称PC机。

它由主机、键盘、显示器等组成(如图1所示)。

还有一类计算机,大多数人却不怎么熟悉。

这种计算机就是把智能赋予各种机械的单片机(亦称微控制器,如图2所示)。

顾名思义,这种计算机的最小系统只用了一片集成电路,即可进行简单运算和控制。

因为它体积小,通常都藏在被控机械的“肚子”里。

它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。

现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。

各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。

现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品,不是电路太复杂,就是功能太简单且极易被仿制。

究其原因,可能就卡在产品未使用单片机或其它可编程逻辑器件上。

目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。

导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。

更不用说自动控制领域的机器人、智能仪表、医疗器械了。

因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。

MSP430系列单片机是美国德州仪器(TI)1996年开始推向市场的一种16位超低功耗的混合信号处理器(Mixed Signal Processor)。

430单片机之中断

430单片机之中断

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 实验报告

msp430 实验报告

msp430 实验报告MSP430 实验报告引言:MSP430是一款低功耗、高性能的微控制器,广泛应用于嵌入式系统开发领域。

本实验报告将介绍我对MSP430进行的一系列实验,包括基本的GPIO控制、定时器应用、模拟信号采集和通信接口应用等。

实验一:GPIO控制在本实验中,我使用MSP430的GPIO引脚控制LED灯的亮灭。

通过配置引脚的输入/输出模式以及设置引脚电平,我成功地实现了对LED灯的控制。

这为后续实验奠定了基础,也让我更加熟悉了MSP430的寄存器配置。

实验二:定时器应用在本实验中,我探索了MSP430的定时器功能。

通过配置定时器的时钟源和计数模式,我实现了定时器中断功能,并利用定时器中断实现了LED灯的闪烁。

这个实验让我更加深入地了解了MSP430的定时器模块,并学会了如何利用定时器进行时间控制。

实验三:模拟信号采集在本实验中,我使用MSP430的模拟信号输入引脚和模数转换模块,成功地将外部的模拟信号转换为数字信号。

通过配置ADC模块的采样速率和精度,我实现了对模拟信号的准确采集,并将采集到的数据通过串口输出。

这个实验让我对MSP430的模拟信号处理有了更深入的了解。

实验四:通信接口应用在本实验中,我使用MSP430的串口通信模块,实现了与外部设备的数据传输。

通过配置串口的波特率和数据格式,我成功地实现了与计算机的串口通信,并通过串口发送和接收数据。

这个实验让我掌握了MSP430与外部设备进行数据交互的方法。

结论:通过一系列的实验,我对MSP430的基本功能和应用有了更深入的了解。

MSP430作为一款低功耗、高性能的微控制器,具备丰富的外设和强大的处理能力,适用于各种嵌入式系统的开发。

通过学习和实践,我掌握了MSP430的GPIO控制、定时器应用、模拟信号采集和通信接口应用等基本技能,为以后的嵌入式系统开发打下了坚实的基础。

未来展望:MSP430作为一款成熟的微控制器,具备广阔的应用前景。

微机原理- 定时中断的设计与应用(使用MSP430的定时器控制LED灯)

微机原理- 定时中断的设计与应用(使用MSP430的定时器控制LED灯)

微机原理实验实验四定时中断的设计与应用一、实验目的1. 了解 MSP430 系列定时器 Timer_A 模块结构和功能;2. 掌握定时器 Timer_A 的工作原理和寄存器配置方法;3. 熟练掌握定时器 Timer_A 不同工作模式下的典型应用;4. 熟练掌握端口 P1 和 P2 复用功能应用;5. 熟练掌握定时器 Timer_A 定时中断功能的设计和应用。

二、实验内容1.※●为TA0配置时钟源及工作模式,控制LED1指示灯的定时亮灭,中间间隔1秒钟。

要求:TA0定时器分别配置工作在增计数模式和增/减计数模式下,采用ACLK作为其计数参考时钟,并启用TA0CCR0计数中断实现硬件定时中断。

(1)流程图(以增计数模式为例)(2) 源代码/***增计数模式***/#include <msp430.h>void main(){WDTCTL = WDTPW + WDTHOLD; // 停止看门狗定时器P1DIR |= BIT0; //设置P1.0输出P1OUT&=~BIT0; //初始化P1.0TA0CCR0 = 32768; // 定义中断计数周期1s,时钟频率为32.768MHZ,32768 / 32768 = 1sTA0CCTL0 = CCIE; // TA0CCR0捕获/比较中断寄存器中断使能TA0CTL = TASSEL_1 + MC_1 + TACLR; // TASSEL_1,ACLK时钟源MC_1,增计数模式__bis_SR_register (LPM0_bits + GIE); // 进入LPM0低功耗模式,开启总中断}//定时器中断#pragma vector = TIMER0_A0_VECTOR__interrupt void Timer_A(void) // 定时器中断触发,P1输出口异或,电平翻转{P1OUT ^= 0x01;}/*******增减计数模式*******/#include <msp430.h>void main(){WDTCTL = WDTPW + WDTHOLD; // 停止看门狗定时器P1DIR |= BIT0; //设置P1.0输出P1OUT&=~BIT0; //初始化P1.0TA0CCR0 = 16384; // 定义中断计数周期1sTA0CCTL0 = CCIE; // TA0CCR0捕获/比较中断寄存器中断使能TA0CTL = TASSEL_1 + MC_3 + TACLR; // TASSEL_1,ACLK时钟源MC_1,增减计数模式__bis_SR_register (LPM0_bits + GIE); // 进入LPM0低功耗模式,开启总中断}//定时器中断#pragma vector = TIMER0_A0_VECTOR__interrupt void TIMER0_A0_ISR (void) // 定时器中断触发,P1输出口异或,电平翻转{P1OUT ^= 0x01;}(3)实验现象程序运行后,P1.1口LED每隔1s闪烁一次。

单片机MSP430 - Timer_A 定时器中断程序

单片机MSP430 - Timer_A 定时器中断程序

单片机MSP430 - Timer_A 定时器中断程序一、利用定时器定时功能,实现定时器单个溢出中断,实现P3.0 方波输出#include “cc430x613x.h”void main(){WDTCTL = WDTPW + WDTHOLD; // 停止看门狗定时器P3DIR |= 0x04; // P3 口初始化,设置为输出模式TA0CCR0 = 32768; // 定义中断计数周期1s,时钟频率为32.768MHZ,32768 / 32768 = 1sTA0CCTL0 = CCIE; // TA0CCR0 捕获/比较中断寄存器中断使能TA0CTL = TASSEL_1 + MC_1 + TACLR; // TASSEL_1,ACLK 时钟源MC_1,增计数模式_BIS_SR(LPM3_bits + GIE); // 进入LPM3 低功耗模式,开启总中断}#pragma vector = TIMER0_A0_VECTOR__interrupt void Timer_A(void) // 定时器中断触发,P3 输出口异或,电平翻转{P3OUT – 0x04;二、利用定时器定时功能,实现定时器多个溢出,对应产生多个中断,实现P3.0 输出#include “cc430x613x.h”void main(){WDTCTL = WDTPW + WDTHOLD; // 停止看门狗定时器P3DIR |= 0x04; // P3 口初始化,设置为输出模式TA0CCR0 = 32768; // 定义中断计数周期1s,时钟频率为32.768MHZ,32768 / 32768 = 1sTA0CCTL0 = CCIE; // TA0CCR0 捕获/比较中断寄存器中断使能TA0CCR1 = 3276; // 定义中断溢出周期100msTA0CCTL1 = CCIE; // TA0CCR0 捕获/比较中断寄存器中断使能TA0CTL = TASSEL_1 + MC_1 + TACLR; // TASSEL_1,ACLK 时钟源MC_1,增计数模式_BIS_SR(LPM3_bits + GIE); // 进入LPM3 低功耗模式,开启总中断}#pragma vector = TIMER0_A0_VECTOR__interrupt void Timer_A(void) // 1s 溢出中断P3OUT = ~0x04;}#pragma vector = TIMER0_A1_VECTOR__interrupt void Timer_A1(void) // 100ms 溢出中断{switch(TA0IV){case 2:P3OUT = 0x04;break;case 4:break;case 10:break;}}tips:感谢大家的阅读,本文由我司收集整编。

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 <msp430f5529.h>void main(){WDTCTL = WDTPW + WDTHOLD; //关看门狗P1DIR |= BIT3; //设置P1.0口方向为输出。

TA0CCTL0 = CCIE; //设置捕获/比较控制寄存器中CCIE位为1,//CCR0捕获/比较功能中断为允许。

TA0CCR0 = 32767; //捕获/比较控制寄存器CCR0初值为32767TA0CTL = 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 <msp430f5529.h>void main(void){WDTCTL = WDTPW + WDTHOLD; // 关狗P1DIR |= BIT1; // P1.1 设置为输出P1SEL |= BIT1; // P1.1 输出使能TA0CCR0 = 60000; // PWM PeriodTA0CCTL0 = OUTMOD_4; // CCR1 模式4TA0CCR1 = 30000; // CCR1 PWM duty cycleTA0CTL = TASSEL_1 + MC_1 + TACLR; // ACLK, up mode, clear TAR__bis_SR_register(LPM3_bits); // Enter LPM3__no_operation(); // For debugger}实验现象:实验开始后,实验板上LED4亮灭闪烁,间隔为1s。

MSP430定时器的使用

MSP430定时器的使用

TACTL = TASSEL1 + TACLR;
// SMCLK, clear TAR
CCTL0 = CCIE;
// CCR0 interrupt enabled
CCR0 = 20000;
TACTL |= MC1;
// Start Timer_A in continuous mode
最后,打开中断,写中断服务程序,详细的程序清单如下:
TBCTL = TBSSEL1 + TBCLR;
// SMCLK, clear TAR
ቤተ መጻሕፍቲ ባይዱ
TBCCTL0 = CCIE;
// CCR0 interrupt enabled
TBCCR0 = 50000;
TBCTL |= MC1;
// Start Timer_A in continuous mode
_EINT();
图 3 定时器 A 的结构原理 定时器 A 的寄存器在 IAR 的调试环境中见图 4 所示。操作这些寄存器就可以实现 TA 的所有功能。
图 4 TA 的寄存器 其中 TACTL 为最主要的控制寄存器,它决定 TA 的输入时钟信号、TA 的工作模式、TA 的开启与停止、中断的申请等工作。TACTL 寄存器为 16 位寄存器,必须使用字指令对其访 问。该寄存器在 POR 信号后全部复位,但在 PUC 信号后不受影响。下面是该寄存器中各位 的含义。
// SMCLK, clear TAR
CCTL0 = CCIE;
// CCR0 interrupt enabled
CCR0 = 50000;
TACTL |= MC1;
// Start Timer_A in continuous mode

MSP430中断和定时器使用

MSP430中断和定时器使用
实验总结与收获(含自主探究部分) ...................................................................19
1
实验目的
1. 了解中断原理,包括对中断源、中断向量、中断类型号、中断程序以及中断过程的理解; 2. 掌握汇编语言中断程序设计方法; 3. 掌握 C 语言项目上机过程和了解 C 语言程序结构; 4. (选做)掌握 C 语言中断程序设计方法; 5. 掌握数字示波器的使用方法; 6. 了解 MSP430 基本时钟模块的工作原理,掌握其控制方法; 7. 了解 MSP430 定时器 A 工作原理,掌握 MSP430 定时器 A 的控制方法。
程序将执行主程序,执行中断程序(由于没有中断标志位,所以 P2 不会被取反),
在指令执行完毕后开始执行无效指令(FFFF FFFF),最终结果 led 灯全亮,PC 跳至无
效指令。这是因为,程序没有设置死循环或终点,使 PC 不断的增加,从而开始执行
3
无效指令。中断也因此失效。
2. 用汇编语言编写 P1 端口外中断:以中断方式处理按键 K5 和 K6
„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„
可以看到,优先级最低的是 PORT2_VECTOR,位于低地址;优先级最高的是复位向量,
位于高地址。对于定时器 Timer_A,CC0 最常用,独享一个中断向量,与课堂学习结果一
致。
2) 由于按键有抖动,当按下一次键时,在电路上可能已经发生了几次中断申请。为了
#define WDT_VECTOR
(10 * 2u) /* 0xFFF4 Watchdog Timer */
#define COMPARATORA_VECTOR (11 * 2u) /* 0xFFF6 Comparator A */

MSP430单片机实用技术讲座13 第9讲 简单的端口显示中断综合应用

MSP430单片机实用技术讲座13 第9讲 简单的端口显示中断综合应用

MSP430单片机实用技术讲座(13) 第9讲 简单的端口、显示、中断综合应用・南京航空航天大学 魏小龙・本讲将结合定时器、端口、中断等430资源进行综合应用。

具体要求如下:1.硬件连接 硬件连接(如图1)很简单,在P4端口连接了8只发光二极管LED0 ̄LED7,在P1端口连接了4×4键盘(16键)。

P1同时通过138、164扩展了8位数码显示器。

2.软件要求a)编写扫描键盘软件;b)编写数码管显示程序;c)键盘使用中断编写;d)P4连接的发光二极管的发光强度通过键盘控制,共分16亮度等级;e)分别控制单个发光二极管(可对LED0到LED7进行分别控制其亮度);f)在数码管上显示每只发光二极管的亮度,对应关系为:第一只数码管显示的数值对应第一只发光二极管的亮度,后面依次类推,第八只数码管显示的数值对应第八只发光二极管的亮度。

3.分析首先编写基本硬件程序,键盘与数码管显示已经在上一讲说清楚了,这里只管调用就可以了。

发光二极管显示也很简单,高电平亮,低电平熄。

那么如何实现发光二极管LED0 ̄ LED7显示的亮暗调节呢。

先看看图2所示的4个不同信号a、b、c、d。

假设它们的周期都是100Hz,则这些信号送发光二极管后,我们看不到发光二极管的亮与熄,我们看到的都是亮,只不过亮度不一样而已(因为人眼睛的视觉暂停缘故)。

很显然,信号a驱动发光二极管最暗,信号d驱动发光二极管最亮。

本讲所使用的硬件有16只扫描键盘,我们定义按0号按键显示最暗,按F号按键显示最亮。

根据软件要求e要求分别控制单个发光二极管(可对LED0到LED7进行分别控制其亮度),那么如何实现呢?我们可以将亮度数据存放在显示缓存里,则disbuffer[0]的数据表示LED0的亮度, 则disbuffer[1]的数据表示LED1的亮度......这样只要在显示缓存中取对应的亮度数值去控制发光二极管的显示就可以了。

数码管的显示方法为:在显示缓存中取数据移位到驱动对应数码管的74HC164,并延时显示一会儿。

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

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;
}。

相关文档
最新文档