实例讲解PIC单片机之中断程序

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

查询方式:缺点就是可能会大量浪费 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 定时器
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) {
2 ,清楚相应中断的标志位。如 INTCONbits.TMR0IF=0;
3 ,开启相应中断。如 INTCONbits.TMR0IE=1;
中断函数/程序
中要注意的就是
清零相应的中断标志位
如Βιβλιοθήκη Baidu
INTCONbits.TMR0IF=0; 否则单片机会认为中断未被执行 则一直中断。
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;其 实即使没用到外设开启也无妨。
实例讲解 PIC 单片机之中断程序
什幺是中断程序呢? 形象的生活比喻就比如你现在这在看我的文章,突然你的朋友喊你一起去 烤地瓜,这时候你就中断了看文章和朋友烤地瓜去了,烤完地瓜之后你又回 来看文章。烤地瓜这件事就好比中断程序,他中断了你看文章这件事。在程 序方面来说 当 CPU 在执行一个程序的时候,突然产生了中断事件 CPU 就 去执行中断程序了,当执行完成后 CPU 又回来执行原先的程序。 中断事件 什幺是中断事件,就是引起中断的事件。对于单片机来说这些事件是多种 多样的。比如 说一个按键按下,一定的时间到了,一串数据发送完毕,或接 收完一个数据。 讲到中断不得不讲讲和中断相对的 查询。其实不管是按键按下 还是 时间 到,还是数据发送完毕,这些事实上都可以用查询的方式办到。比如 你是经 理 如果你想知道属下任务完成了没有 一种方式就是去询问属下,任务完成 没有。早上没完成,下午在问。下午没完成第二天再问。。。。一直到完成为止 这种方式就相当于查询的方式,另一种就是然属下完成任务好直接汇报,在 下属执行任务的期间你无需去打挠下属,当下属任务完成后就第一时间向你 汇报,这种方式就好像中断。
timr1 将开启中断。等到 TMR1 定时器溢出后,则会在 PIR1 的 TMRIF 将为 1,并且执行中断程序。 实例讲解: 我们把上一讲的《PIC 单片机之定时器》中的实例修改成中断方式 实现 每隔 50MS 亮起 LED,每隔 50MS 灭掉 LED。 /*开发环境 MPLAB X IDE 芯片型号 PIC16LF1823*/ #include __CONFIG(FOSC_INTOSC&WDTE_OFF&PWRTE_ON&MCLR E_OFF&CP_ON&CPD_OFF&BOREN_ON &CLKOUTEN_OFF&IESO_ON&FCMEN_ON);//这个要放到 上一行去 __CONFIG(PLLEN_OFF&LVP_OFF) ; #define LED LATA5
相关文档
最新文档