PIC单片机中断程序实例

2020-02-05来源: eefocus关键字:PIC  单片机  中断程序

PIC单片机中断程序实例

什么是中断程序呢?


形象的生活比喻就比如你现在这在看我的文章,突然你的朋友喊你一起去烤地瓜,这时候你就中断了看文章和朋友烤地瓜去了,烤完地瓜之后你又回来看文章。烤地瓜这件事就好比中断程序,他中断了你看文章这件事。在程序方面来说 当CPU在执行一个程序的时候,突然产生了中断事件CPU就去执行中断程序了,当执行完成后CPU又回来执行原先的程序。


中断事件


什么是中断事件,就是引起中断的事件。对于单片机来说这些事件是多种多样的。比如 说一个按键按下,一定的时间到了,一串数据发送完毕,或接收完一个数据。


讲到中断不得不讲讲和中断相对的 查询。其实不管是按键按下 还是 时间到,还是数据发送完毕,这些事实上都可以用查询的方式办到。比如 你是经理 如果你想知道属下任务完成了没有 一种方式就是去询问属下,任务完成没有。早上没完成,下午在问。下午没完成第二天再问。。。。一直到完成为止 这种方式就相当于查询的方式,另一种就是然属下完成任务好直接汇报,在下属执行任务的期间你无需去打挠下属,当下属任务完成后就第一时间向你汇报,这种方式就好像中断。


查询方式:缺点就是可能会大量浪费CPU的时间,不断去查询。如果事情不多还好,可是一旦事情多了会明显感到运行速度变慢。


中断方式:可以用在对时间和响应速度有要求的场合。


具体有哪些事件会引起中断 可以看


1,中断控制寄存器INTCON


2,外设中断允许寄存器 PIEX 注 : X可以是1 2 3 4.。。。不同型号的单片机数目不同


3,外设中断标志寄存器 PIRX 注: X可以是1 2 3 4.。。。不同型号的单片机数目不同


INTCON 中断控制寄存器讲解:


1开启或关闭 全体的中断功能(GIE)


2开启或关闭全体外设的中断功能(PEIE)外设就是在外设中断允许/标志寄存器里面所写的设备。


3开启一些中断事件。


PIEX 与 PIRX 是相互对应的如:当把PIE1的TMR1IE设置为1 定时器timr1将开启中断。等到TMR1定时器溢出后,则会在PIR1的TMRIF将为1,并且执行中断程序。


实例讲解:


我们把上一讲的《PIC单片机之定时器》中的实例修改成中断方式 实现 每隔 50MS亮起LED,每隔50MS灭掉LED。


/*开发环境MPLAB X IDE 芯片型号PIC16LF1823*/


#include

__CONFIG(FOSC_INTOSC&WDTE_OFF&PWRTE_ON&MCLRE_OFF&CP_ON&CPD_OFF&BOREN_ON


&CLKOUTEN_OFF&IESO_ON&FCMEN_ON);//这个要放到上一行去


__CONFIG(PLLEN_OFF&LVP_OFF) ;


#define LED LATA5


void init_fosc(void)


{


OSCCON= 0x68;


}


void init_gpio(void)


{


PORTA = 0;


LATA = 0;


ANSELA = 0;


TRISAbits.TRISA5=0;


}


void init_timer0(void)


{


OPTION_REG=0x87;


}


void interrupt isr(void)//中断程序,interrupt是个关键字说明该函数,是中断函数。


{


LED = ~LED;//改变LED的状态


INTCONbits.TMR0IF=0;//清零中断标志位 如果在离开中断程序前没有清零,程序将不停的中断。


TMR0=61;//给TMR0付初始值61 ,开始下一个50ms计时做准备。


//中断函数结束 返回主函数。哪里来回 回那里去,也就是回到主函数的while(1);处


}


int main(int argc, char** argv)


{


init_fosc();


init_gpio();


init_timer0();


INTCONbits.GIE=1; //开启总中断


INTCONbits。TMR0IF=0;//清零TMR0溢出中断标志位


INTCONbits。TMR0IE=1;//开启TMR0溢出中断


TMR0=61;


while(1);//主函数 在此什么都没做一直在死循环。但等到50ms时间到了TMR0将会溢出,程序就会跳到void interrupt isr(void)处执行。


}


我帮大家理清下中断初始设置大致的步骤


1 ,开启总中断,开启外设中断。INTCONbits。GIE=1; INTCONbits。PEIE=1;其实即使没用到外设开启也无妨。


2 ,清楚相应中断的标志位。如INTCONbits。TMR0IF=0;


3 ,开启相应中断。如INTCONbits。TMR0IE=1;


中断函数/程序 中要注意的就是 清零相应的中断标志位 如INTCONbits。TMR0IF=0; 否则单片机会认为中断未被执行 则一直中断。

关键字:PIC  单片机  中断程序 编辑:什么鱼 引用地址:http://news.pyfle.com/mcu/ic487269.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:PIC单片机电热剪电路原理图
下一篇:pic 单片机应用问答14篇

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

PIC16F1829 TIMER0初始化程序
简介:本文和大家分享一个PIC16F1829 TIMER0初始化程序,感兴趣的朋友可以看看。//timer0 分频值#define TIMER0_DIV2 (0<<0)#define TIMER0_DIV4 (1<<0)#define TIMER0_DIV8 (2<<0)#define TIMER0_DIV16 (3<<0)#define TIMER0_DIV32 (4<<0)#define TIMER0_DIV64 (5<<0)#define TIMER0_DIV128 (6<<0)#define
发表于 2020-02-08
PIC16F1829 TIMER1初始化程序
简介:在这里和大家分享一个PIC16F1829 TIMER1初始化程序,感兴趣的朋友可以看看。//timer1 分频值#define TIMER1_DIV1 (0<<4)#define TIMER1_DIV2 (1<<4)#define TIMER1_DIV4 (2<<4)#define TIMER1_DIV8 (3<<4)//-------------#define T1_FOSC (1<<6) #define T1_FOSC_4 (0<<6)//---------------#define TIMER1_IEN_ENB
发表于 2020-02-08
PIC16F690 时钟初始化实例
简介:在这里和大家分享一个PIC16F690时钟初始化的程序。//时钟源选择#define CLKS_INT (1<<1)//内部时钟#define CLKS_CONFIG (0<<1)//由配置1决定时钟//内部振荡频率选择 #define IRCF_31KLF      (0<<4)#define IRCF_125KMF    (1<<4)#define IRCF_500KMF    (3<<4)#define IRCF_1MHF   
发表于 2020-02-08
PIC单片机振荡电路中怎样选择晶体?
PIRX 注: X可以是1 2 3 4.。。。不同型号的单片机数目不同INTCON 中断控制寄存器讲解:1开启或关闭 全体的中断功能(GIE)2开启或关闭全体外设的中断功能(PEIE)外设就是在外设中断允许/标志寄存器里面所写的设备。3开启一些中断事件。PIEX 与 PIRX 是相互对应的如:当把PIE1的TMR1IE设置为1 定时器timr1将开启中断。等到TMR1定时器溢出后,则会在PIR1的TMRIF将为1,并且执行中断程序。实例讲解:我们把上一讲的《PIC单片机之定时器》中的实例修改成中断方式 实现 每隔 50MS亮起LED,每隔50MS灭掉LED。/*开发环境MPLAB X IDE 芯片型号PIC
发表于 2020-02-08
PIC单片机程序设计需要注意的一些问题及看法
一、区分指令的大小写编写PIC单片机的源程序,除了源程序的开始处需要严格的列表指令外,还须注意源程序中字母符号的大小写规则,否则在PC机上汇编程序时不会成功。在源程序中都会使用伪指令INCLUDE。这条指令将列表中指定的单片机文件(在MPLAB中)渎入源程序作为源程序的一部分,所以凡是MPLAB中有关该单片机已有的寄存器在源程序中无须再用赋值指令(EQU)赋值,这就使所建立的源程序大为简化。此外,由于有了伪指令INCLUDE,所以根据MPLAB软件中的格式,在源程序中的操作数凡是涉及MPLAB已规定的寄存器名称的,其字母一律只能大写,不能小写。其余操作码、符号字母可任意大小写,但0x中的X应小写。否则汇编不会成功。鉴于上述原因
发表于 2020-02-08
关于PIC单片机之探讨低功耗
1、睡眠(sleep)睡眠方式是我们最常用的一种方式来降低功耗,但睡眠期间单片机不能做任何的事情。对于那些没事情就睡着,有事情就做一下的情况睡眠无疑是功耗最低的处理方式。比如:睡眠+ I/O电平变化中断唤醒当按键没按下时,单片机睡眠,当按键按下后,执行相应的工作。睡眠+数据接收中断唤醒这样单片机就可以再没有接收到数据时候进入睡眠状态,接收到数据的时候就唤醒然后处理数据。当然首先单片机要有相关的外设比如SPI ,I2C,USART,等这些支持这些通讯的模块。睡眠+看门狗唤醒这个可以用在需要定时唤醒做事情的场合2、降低时钟频率如果即想功耗低,又想单片机在能低功耗的情况下工作。这无疑是个最好的选择。PIC单片机 比如PIC
发表于 2020-02-08
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 pyfle.com, Inc. All rights reserved
快乐赛车怎么样 湖南快乐十分 快乐赛车官方计划软件 快乐赛车冠军公式规律 快乐赛车6码怎么倍投 快乐赛车怎么看走势图 快乐赛车单双 快乐赛车开奖有什么规律 快乐赛车是正规福彩吗 快乐赛车怎么代理返点多少