中断函数写法

合集下载

430学习笔记

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之间,这样会产生击穿电流。

【CC2530入门教程-03】CC2530的中断系统及外部中断应用

【CC2530入门教程-03】CC2530的中断系统及外部中断应用

【CC2530⼊门教程-03】CC2530的中断系统及外部中断应⽤第3课 CC2530的中断系统及外部中断应⽤⼴东职业技术学院欧浩源⼀、中断相关的基础概念内核与外设之间的主要交互⽅式有两种:轮询和中断。

轮询的⽅式貌似公平,但实际⼯作效率很低,且不能及时响应紧急事件;中断系统使得内核具备了应对突发事件的能⼒。

在执⾏CPU当前程序时,由于系统中出现了某种急需处理的情况,CPU暂停正在执⾏的程序,转⽽去执⾏另外⼀段特殊程序来处理出现的紧急事务,处理结束后,CPU⾃动返回到原来暂停的程序中去继续执⾏。

这种程序在执⾏过程中由于外界的原因⽽被中间打断的情况,称为中断。

两个重要的概念:<1> 中断服务函数:内核响应中断后执⾏的相应处理程序。

<2>中断向量:中断服务程序的⼊⼝地址。

每个中断源都对应⼀个固定的⼊⼝地址。

当内核响应中断请求时,就会暂停当前的程序执⾏,然后跳转到该⼊⼝地址执⾏代码。

⼆、CC2530的中断系统CC2530具有18个中断源,每个中断源都由各⾃的⼀系列特殊功能寄存器来进⾏控制。

可以编程设置相关特殊功能寄存器,设置18个中断源的优先级以及使能中断申请响应等。

我们常⽤的中断源有下⾯⼏个:三、CC2530的中断处理函数编写⽅法中断服务函数与⼀般⾃定义函数不同,有特定的书写格式:<1> 在每⼀个中断服务函数之前,都要加上⼀句起始语句:#pragma vector = <中断向量><中断向量>表⽰接下来要写的中断服务函数是为那个中断源服务的,该语句有两种写法:#pragma vector = 0x7B或者 #pragma vector = P1INT_VECTOR前者是中断向量的⼊⼝地址,后者是头⽂件“ioCC2530.h”中的宏定义。

<2> _ _interrupt关键字表⽰该函数是⼀个中断服务函数,<函数名称>可以⾃定义,函数体不能带有参数,也不能有返回值。

风驰STM8开发板例程教学

风驰STM8开发板例程教学

工程模板的创建在开发STM8的时候,首先要学会创建一个工程模板,所有的开发历程都是基于这个工程模板。

STM8有官方库,在开发的时候很方便,可以远离查寄存器的时代。

学过51单片机或者AVR的人都知道,查寄存器是很不方便的。

现在带大家进入一个利用库来开发单片机的新时代。

本开发板的所有例程都是基于库V2.0.0版本。

STM8的编译器是IAR Embedded Workbench。

下面叫大家如果去创建一个过程模板工程模板创建步骤:1、双击,打开IAR的界面,点击File->New->Workspace,点击Project->Create New Project,出现点击OK就行。

2、右击工程名就可以添加文件夹和文件,3、4、设置工程的Options,右击工程名->Options,设置其中两项,如下图5、在这里设置Device 为STM8S207RB 因为在我们风驰电子STM8开发板的主控芯片是STM8S207RB这里是设置编译路径,使用了3条语句$PROJ_DIR$\..\FWlib\inc$PROJ_DIR$\..\FWlib\src$PROJ_DIR$\..\USER$PROJ_DIR$\..意思是找到当前工程的上一级$PROJ_DIR$\..\FWlib\inc意思是先找到当前工程的上一级FWlib文件夹,再找到inc文件夹$PROJ_DIR$\.意思是当前文件夹这里是设置输出文件为可执行文件此外,我们还有修改一下头文件在stm8s.h的头文件修改#define STM8S207 /*!< STM8S High density devices without CAN */在stm8s_conf.h的头文件里修改你要用到的头文件,不要用到的资源的头文件可以把它注释调就可以,方便使用,到这里,相信大家都体会到用库的方便性了吧。

到这里 ,点击就可以编译成功了。

当你看到这里的话相信你会了怎样创建一个工程了。

stm8 boot,app IAP双中断支持

stm8  boot,app IAP双中断支持

重要,.s启动文件,设置地址跳转到固定的ram地址
2、APP flash地址设置为 0x9000地址。ram同样设置为 0x77f,对齐保护。0x780~0x800作为ram中断向量偏移缓存。
定义RAM缓存。 copy 0x9000 app中断服务函数的,地址 到 ram缓存中。 app的中断函数使用 官方 it.c文件
ห้องสมุดไป่ตู้
测试、 1、先烧写boot,,再烧写app,仿真看能不能进入中断。 boot使能跳转。
2、烧写boot代码。关闭跳转,看boot能不能正常响应中断。
stm8S105C6_Test…P.rar 2.57MB csv
Boot代码, 1、修改地址ICF文件 flash地址:
stm8 boot和app IAP双中断支持
RAM地址:0x800 - 128字节 = 0x077F。 link icf文件选择 当前工程目录下的icf文件。 定义一个 RAM 存放中断向量的缓存,
比如,tim4的中断服务函数 传入地址。0x82 代表指令跳转。 tim4中断的写法。

单片机中常用函数

单片机中常用函数

注释方法延时函数使用前在主函数外面进行声明声明方法void delay(uint z)Void Delay(uint z){Uint a,b;For (a=z;a>0;a--)For(b=110;b>0;b--);}一般z=1000可以延时500ms;如何正确使用表格例子:让数码管依次显示0 1 2 3 。

先定义一个uchar code tab[这里面可以不写表格中有多少数据默认和等号后面的数据多少一致]={数据1,数据2,数据3,………}调用表格中的数据共阴极数码管编码unsigned char code table[]={//共阴极0~f数码管编码0x3f,0x06,0x5b,0x4f, //0~30x66,0x6d,0x7d,0x07, //4~70x7f,0x6f,0x77,0x7c, //8~b0x39,0x5e,0x79,0x71 //c~f共阳极数码管编码由0到f的编码为:uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};中断(很有用的一个应用)51单片机有5个中断源可以中断嵌套EA=1 是将内部中断允许EX=1是外部中断允许中断函数的格式括号内的函数即为中断程序,和一般程序写法一样。

中断函数在调用时不用声明。

开启跳变沿IT0=1;(总线操作)就相当于TCON=0x01;(对位进行操作)定时器TMOD定时器工作模式寄存器Ⅰ,GATE——门控制。

●GATE=1时,“与门”的输出信号K由INTx输入电平和TRx位的状态一起决定(即此时K=TRx·INTx),当且仅当TRx=1,INTx=1(高电平)时,计数启动;否则,计数停止。

当INT0引脚为高电平时且TR0置位,TR0=1;启动定时器T0;当INT1引脚为高电平时且TR1置位,TR1=1;启动定时器T1。

单片机外部中断详解及程序

单片机外部中断详解及程序

单片机外部中断详解及程序单片机在自主运行的时候一般是在执行一个死循环程序,在没有外界干扰(输入信号)的时候它基本处于一个封闭状态。

比如一个电子时钟,它会按时、分、秒的规律来自主运行并通过输出设备(如液晶显示屏)把时间显示出来。

在不需要对它进行调校的时候它不需要外部干预,自主封闭地运行。

如果这个时钟足够准确而又不掉电的话,它可能一直处于这种封闭运行状态。

但事情往往不会如此简单,在时钟刚刚上电、或时钟需要重新校准、甚至时钟被带到了不同的时区的时候,就需要重新调校时钟,这时就要求时钟就必须具有调校功能。

因此单片机系统往往又不会是一个单纯的封闭系统,它有些时候恰恰需要外部的干预,这也就是外部中断产生的根本原由。

实际上在第二个示例演示中,就已经举过有按键输入的例子了,只不过当时使用的方法并不是外部中断,而是用程序查询的方式。

下面就用外部中断的方法来改写一下第二个示例中,通过按键来更改闪烁速度的例子(第二个例子)。

电路结构和接线不变,仅把程序改为下面的形式。

#include ;unsigned int t=500; //定义一个全局变量t,并设定初始值为500次//===========延时子函数,在8MHz晶振时约1ms=============void delay_ms(unsigned int k){unsigned int i,j;for(i=0;i<k;i++){for(j=0;j<1140;j++);}}//============主函数==================================void main( void ){DDRB = 0xFF; //设置端口B为输出方向PORTB = 0xFF; //设置端口B的输出为全高电平DDRD = 0x00; //设置端口D为输入方向PORTD = 0xFF; //设定端口D为内部上拉方式,无信号输入时处于高电平状态MCUCR = 0x0A; //设定INT0、INT1为下降沿触发GICR = 0xC0; //使能INT0、INT1中断SREG = 0x80; //使能总中断while(1){PORTB = 0x55; //让接在端口B上的LED显示01010101 delay_ms(t); //延时t个msPORTB = 0xAA; //让接在端口B上的LED显示01010101 delay_ms(t); //延时t个ms}}//============中断函数(外部0)==========================#pragma vector = INT0_vect__interrupt void INT0_Server(void){t = 100; //设定t的值为100次}//============中断函数(外部1)==========================#pragma vector = INT1_vect__interrupt void INT1_Server(void){t = 500; //设定t的值为500次}把上述程序进行编译并下载到单片机中,可以看到结果与第二个示例中的完全一致。

ucos 串口中断接收写法

ucos 串口中断接收写法UCOS(Micrium公司所开发的一款实时操作系统)是一款非常灵活的嵌入式操作系统,在嵌入式系统中广泛应用。

在UCOS中使用串口中断来接收数据可以极大地提高系统的响应速度和效率。

本文将逐步介绍UCOS中串口中断接收数据的实现方法和写法。

一、UCOS的基本概念与串口中断的作用UCOS是一种多任务实时操作系统,被广泛应用于嵌入式系统中。

它具有高度的可移植性和可扩展性,能够满足各种不同的应用需求。

串口中断是嵌入式系统中常用的通信方式之一,其作用是在数据传输过程中,当接收到数据时立即通知操作系统进行处理,提高系统的实时性和效率。

串口中断接收数据的写法可以通过编写中断处理函数来实现。

二、编写串口中断接收数据的准备工作在开始编写串口中断接收数据之前,需要进行一些准备工作:1. 确定串口通信参数:包括波特率、数据位数、停止位等。

这些参数需要与通信的发送端保持一致。

2. 初始化串口:通过设置串口通信模块的相应寄存器来初始化串口。

3. 编写中断处理函数:中断处理函数负责接收串口中断产生的数据,并进行相应处理。

三、编写串口中断接收数据的步骤下面将详细介绍UCOS中串口中断接收数据的写法步骤:1. 创建串口中断接收任务:在UCOS中,每个任务都是一个独立的实体,需要通过创建任务的方式来执行相应的任务。

首先,创建一个任务来执行串口接收数据的相关操作。

2. 初始化串口:在任务中,首先需要进行串口的初始化操作,确保串口模块能够正常工作。

将串口通信所需的参数设置好,并通过相应寄存器进行配置。

3. 创建中断处理函数:UCOS提供了中断处理函数的接口,在其中进行串口接收数据的处理。

在中断处理函数中,首先判断是否为接收中断,并判断接收寄存器是否有数据可读。

如果有数据可读,则将数据保存到缓冲区中,并在接收完成后通知任务进行数据处理。

4. 任务处理数据:当中断处理函数接收到数据后,需要通知相应的任务来处理数据。

STM8库函数之中断计时

STM8库函数之中断计时作者:carloszo原理分析中断计时的原理是基于时间片轮转理论。

按照顺序结构的写法,有时候避免不了沉重冗长的时间等待。

例如键盘扫描,你就给我弄了一个delay_20ms()函数,而在这延时的过程,其实MCU可以做很多事情的。

通过中断计时,给每个任务分配一个时间片,这样就可以避免因为使用delay造成的mcu等待,合理分配资源。

中断计时的具体实施步骤为,首先配置主时钟频率,配置计时器计时周期,使能中断,设置计时变量及初始值,如time_250ms_flag = 0,进中断后修改计时变量值等于1。

在main函数判断time_250ms_flag的值是否为1,如果为1,进行相应任务。

代码1.定义时间变量unsigned char time_250us_flag;unsigned char time_1ms_cnt;unsigned char time_10ms_cnt;unsigned char time_20ms_cnt;unsigned char time_100ms_cnt;unsigned char time_1s_cnt;2.配置主时钟void clk_init(void){CLK_DeInit();CLK_HSICmd(ENABLE);//内部高速时钟:16MCLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV2);//时钟频率:16M/2=8M }3.配置计时器void tim_init(void){TIM2_DeInit();TIM2_TimeBaseInit(TIM2_PRESCALER_8,249);//计时周期:250usTIM2_ARRPreloadConfig(ENABLE);TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE);TIM2_Cmd(ENABLE);}4.中断设置@near @interrupt void TIM2_UPD_OVF_BRK_IRQHandler (void){/* In order to detect unexpected events during development,it is recommended to set a breakpoint on the following instruction. */TIM2_ClearITPendingBit(TIM2_IT_UPDATE);time_250us_flag =1;return;}5.main函数调用main(){sys_init();enableInterrupts();//使能总中断while(1){if(time_250us_flag==1){time_250us_flag =0;time_1ms_cnt++;}if( time_1ms_cnt >=4){time_1ms_cnt =0;time_10ms_cnt++;}if( time_10ms_cnt >=10) {time_10ms_cnt =0;time_20ms_cnt++;}if( time_20ms_cnt >=2) {time_20ms_cnt =0;time_100ms_cnt++;}if( time_100ms_cnt >=5) {time_100ms_cnt =0;time_1s_cnt++;}if( time_1s_cnt >=10){time_1s_cnt =0;}}}。

ICCAVR 和AVR Stdio之间的转化

列出ICC AVR 过渡到 AVR STUDIO时要注意的几个问题1.头文件更改ICCAVR使用的是“#include <iom16v.h>”AVR STUDIO更改为“#include <avr/io.h>”在ICC中使用不同MCU的头文件是不同的,在AVR studio中所有MCU的头文件都用“#include <avr/io.h>”2.AVR studio中延时函数可直接使用“#include <util/delay.h>”头文件中的延时函数:void _delay_us (double __us);void _delay_ms(double __ms);两个函数的参数均为double型的,通常使用整数延时即可。

(函数最大延时时间是有限制的,参考“util/delay.h”)3.中断函数写法不同在ICC 中断函数名可以自定义列出ATmega16的向量表:#define IT_RESET 1#define IT_INT0 2#define IT_INT1 3#define IT_TIMER2_COMP 4#define IT_TIMER2_OVF 5#define IT_TIMER1_CAPT 6#define IT_TIMER1_COMPA 7#define IT_TIMER1_COMPB 8#define IT_TIMER1_OVF 9#define IT_TIMER0_OVF 10#define IT_SPI_STC 11#define IT_USART_RXC 12#define IT_USART_UDRE 13#define IT_USART_TXC 14#define IT_ADC 15#define IT_EE_RDY 16#define IT_ANA_COMP 17#define IT_TWI 18#define IT_INT2 19#define IT_TIMER0_COMP 20#define IT_SPM_RDY 21#pragma interrupt_handler user_fuc:Interrupt vector number如:#pragma interrupt_handler Time2:iv_TIMER2_COMPvoid Time2(){}AVR studio中需添加“#include <avr/interrupt.h>”头文件且中断函数名不能自定义如:#include <avr/interrupt.h>ISR(SIG_OVERFLOW0) //定时器/计数器0溢出中断(ICC AVR 过渡到 AVR STUDIO4.一些库函数的不同ICC AVR studionop() asm("nop")WDR() asm("wdr") CLI() cli()SEI() sei()。

51单片机中断系统详解

51单片机中断系统详解51 单片机中断系统详解(定时器、计数器)51 单片机中断级别中断源INT0---外部中断0/P3.2 T0---定时器/计数器0 中断/P3.4 INT1---外部中断1/P3.3 T1----定时器/计数器1 中断/P3.5 TX/RX---串行口中断T2---定时器/计数器 2 中断第5 最低4 5 默认中断级别最高第2 第3 第4 序号(C 语言用) 0 1 2 3 intrrupt 0中断允许寄存器IE位序号符号位EA/0 ------ET2/1 ES ET1 EX1 ET0 EX0 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 EA---全局中允许位。

EA=1,打开全局中断控制,在此条件下,由各个中断控制位确定相应中断的打开或关闭。

EA=0,关闭全部中断。

-------,无效位。

ET2---定时器/计数器2 中断允许位。

ET2=1, 打开T2 中断。

ET2=0,关闭T2 中断。

关,。

ES---串行口中断允许位。

关,。

ES=1,打开串行口中断。

关,。

ES=0,关闭串行口中断。

关,。

ET1---定时器/计数器1 中断允许位。

关,。

ET1=1,打开T1 中断。

ET1=0,关闭T1 中断。

EX1---外部中断1 中断允许位。

EX1=1,打开外部中断1 中断。

EX1=0,关闭外部中断1 中断。

ET0---定时器/计数器0 中断允许位。

ET0=1,打开T0 中断。

EA 总中断开关,置1 为开;EX0 为外部中断0 (INT0) 开关,。

ET0 为定时器/计数器0(T0)开EX1 为外部中断1(INT1)开ET1 为定时器/计数器1(T1)开ES 为串行口(TX/RX)中断开ET2 为定时器/计数器2(T2)开ET0=0,关闭T0 中断。

EX0---外部中断0 中断允许位。

EX0=1,打开外部中断0 中断。

EX0=0,关闭外部中断0 中断。

中断优先级寄存器IP位序号位地址------PS/0 PT1/0 PX1/0 PT0/0 PX0/0 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 -------,无效位。

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

三 外部中断写法
主程序语句如下:
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
P5DIR |= 0x0F; // 设置 P5.0-P5.3 为输出方向
P1DIR = 0x0F; // 设置P1.4 -P1.7 为输入方向
P1IE = 0xf0; // 设置P1.4 -P1.7 可以中断
P1IES = 0xf0; // 设置P1.4 -P1.7 为下降沿中断
_BIS_SR(LPM3_bits + GIE); // 进入最低功耗睡眠,打开总总断开关
for (;;)
{
}
}

语句“#pragma vector=PORT1_VECTOR”指明中断函数是为什么中断服务
的,即中断向量。本程序将为端口P1 服务,所以使用PORT1_VECTOR 中断
向量,该PORT1_VECTOR 的含义在头文件中有明显表述,请仔细查阅。

语句“__interrupt void p1int(void)”为中断函数的函数声明。
需要注意的是:P1 的中断标志不能自动清除,需要人为清除,所以程序最
后需要清除端口P1 的中断标志,否则会引起中断嵌套,引起死循环。

#pragma vector=PORT1_VECTOR
__interrupt void p1int(void)
{
if((P1IN&BIT5) == BIT5)
P5OUT &= ~BIT1 ;
else
P5OUT |= BIT1;
if((P1IN&BIT6) == BIT6)
P5OUT &= ~BIT2;
else
P5OUT |= BIT2;
if((P1IN&BIT7) == BIT7)
P5OUT &= ~BIT3;
else
P5OUT |= BIT3;
P1IFG = 0 ;
}

四 键盘检测写法
综合起来,一般的键盘程序有如下三个步骤:
A 消除按键抖动(如果使用硬件,则可略);
B 判断是哪个按键按下,识别键码;
C 等待按键松开。
➢ 主程序:(提供端口设置,使之能进入中断)
unsigned char keybuf; // 全局变量,键值缓存
……
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
P1DIR = 0x0F; // 设置P1.4 -P1.7 为输入方向
P1IE = 0xf0; // 设置P1.4 -P1.7 可以中断
P1IES = 0xf0; // 设置P1.4 -P1.7 为下降沿中断
_BIS_SR(LPM3_bits + GIE); // 进入最低功耗睡眠,打开总总断开关
……

➢ 判键子程序
unsigned char p1keyj(void) // 判键子程序
{
unsigned char x;
x=(P1IN&0Xf0); // P14--P17 接有按键
return(x); // 有按键返回非全 1
}

➢ 中断服务程序:
#pragma vector=PORT1_VECTOR
__interrupt void p1int(void)
{
//端口1 的中断服务程序
while(p1keyj()!=0xf0) //没有按键按下,返回全1――0xf0
{
delay(500); //延时消除抖动
while(p1keyj()!=0xf0)
{
keybuf = keycode();//确信有按键按下,找按键得键值,送到全局变
量keybuf

while(p1keyj()= =0) //等待按键松开
; //做对应键盘的事务
}
}
}

//为了保证代码可以在IAR编译器的任何版本中都能正确得到编译,所以作以下
的条件编译。
#ifdef __IAR_SYSTEMS_ICC__ //如果编译器是IAR, 那么以下将被编译。
#if __VER__ >= 200
#pragma vector=USART0RX_VECTOR //在IAR2.0以上中断函数声明。
__interrupt void SPI0_rx (void)
#else //在IAR2.0以下中断函数声明。
interrupt[USART0RX_VECTOR] void SPI0_rx (void)
#endif //IAR中断函数声明结束。
{ }

在上述中USART0RX_VECTOR 是定义中断地址宏,其实就是一个中断矢量值,例
如,地址0xffe0

这个中断矢量有芯片型号决定,一旦信号确定,那么所有的终端矢量也就确定了。
SPI0_rx 是中断函数名称,使用者可以根据自己的喜好来编写这个函数名。
实际例程
//*******************************************************************
*******
//例程描述:利用定时器定时功能,实现P1.0方波输出。

#include
{
WDTCTL = WDTPW + WDTHOLD; //停止看门狗WDT,不使用内部看门狗定时器。
P1DIR |= 0x01; //设置P1.0口方向为输出。
CCTL0 = CCIE; //设置捕获/比较控制寄存器中CCIE位为1,CCR0捕获/比较功
能中断为允许。
CCR0 = 50000; //捕获/比较控制寄存器CCR0初值为5000。
TACTL = TASSEL_2 + MC_2; //设置定时器A控制寄存器TACTL,使时钟源选择
为SMCLK辅助时钟。
_BIS_SR(LPM0_bits + GIE); //进入低功耗模式LPM0和开中断
}

//定时器A 中断服务程序区
//当IAR编译器版本大于或等于2.0以上时,则中断写法格式如下。
#pragma vector=TIMERA0_VECTOR //定时器A0中断向量
__interrupt void Timer_A (void) //中断函数
{
P1OUT ^= 0x01; //P1.0取反输出
CCR0 += 50000; //重新载入CCR0捕获/比较数据寄存器数据
}

//程序结束
//*******************************************************************
*******

相关文档
最新文档