pic18f单片机的中断嵌套的c语言编程方法

pic18f单片机的中断嵌套的c语言编程方法

ID:11910425

大小:27.00 KB

页数:5页

时间:2018-07-14

pic18f单片机的中断嵌套的c语言编程方法_第1页
pic18f单片机的中断嵌套的c语言编程方法_第2页
pic18f单片机的中断嵌套的c语言编程方法_第3页
pic18f单片机的中断嵌套的c语言编程方法_第4页
pic18f单片机的中断嵌套的c语言编程方法_第5页
资源描述:

《pic18f单片机的中断嵌套的c语言编程方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、PIC18F单片机的中断嵌套的C语言编程方法PIC18F4520单片机提供多个中断源及一个中断优先级功能,可以给大多数中断源分配高优先级或者低优先级.高优先级中断向量地址为0008H,低优先级中断向量地址为0018H。高优先级中断事伯将中断所有可参正在进行的低优先级中断。有10个寄存器用于控制中断的操作。它们是:RCONINTCONINTCON2INTCON3PIR1和PIR2PIE1和PIE2IPR1和IPR2通常,用三个位控制中断源的操作。它们是:标志位表明发生了中断事件使能位允许程序跳转转到中断向量地址处执行(当标志位置1时)优先级用于选择是高优先级还是低先级通过将IPEN位(RCON

2、<7>)置1,可使能中断优先级功能。当使能中断优先级时,有2位可使能全局中断。将GIEH位(INTCON<7>)置1,可使能所有优先级位置1(高优先级)的中断。将GIEL位(INTCON<6>)置1,可使能所有优先级位清零(低优先级)的中断。当中断标志位、使能位以及相应的全局中断使能位均被置1时,程序将立即跳转到中断地址0008H或0018H,具体地址取决于优先级位的设置。通过设置相应的使能位可以禁止单个中断。注意:系统复位时IPEN位为零(默认状态)时,便会禁止中断优先级功能,此时中断与PIC16系统中档单片机相兼容。在兼容模式下,所有中断均跳转到地址0008H执行。下面是在SP9608-

3、PIC增强型单片机开发板利用PIC18F4520单片机来实现的数字频率计数器功能,程序中使用了T0用为外部信号源输入,通TMR0来实现对信号源的频率计数。TMR3作为定时器,来产生1mS数码管扫描时基和1S秒时基信号。为了提高频率计数的准确度,采用中断嵌套技术来完成,将TMR3产生1mS的定时信号作为高优先级中断,TMR0作为频率计数溢出中断作为低先级中断。源程序采用MCC18编译器和MPLAB7.50版本的集成开发环境,调试工具采用ICD2;具体源程序如下:系统时钟:采用外部的12MHz晶振经过内部PLL的4倍频到48MHz。(HS-PLL配置位)#include#d

4、efineTRUE1#defineFALSE0#defineHIGH1#defineLOW0romunsignedcharLEDDATA[]={   0x3F,0x06,0x5B,0x4F,0x66,   0x6D,0x7D,0x07,0x7F,0x6F,   0x40,0x00,};structTIMER_STRUCT{unsignedintInterval;unsignedcharEnable;};structTIMER_STRUCTTimer1S;structT0_T1_STRUCT{unsignedintHigh_Byte;unsignedintLow_Byte;unsignedlo

5、ngResult;};structT0_T1_STRUCTMy_T0,My_T1;structLED_STRUCT{unsignedcharDotPointer;unsignedcharScanPointer;unsignedcharBuffer[8];};structLED_STRUCTNumberLED;voidPIC18F_High_isr(void);voidPIC18F_Low_isr(void);#pragmacodehigh_vector_section=0x8voidhigh_vector(void){_asmgotoPIC18F_High_isr_endasm}#pragm

6、acodelow_vector_section=0x18voidlow_vector(void){_asmgotoPIC18F_Low_isr_endasm}#pragmacode//---中断高优先级---//#pragmainterruptPIC18F_High_isrvoidPIC18F_High_isr(void){if(TRUE==PIR2bits.TMR3IF)   {  PIR2bits.TMR3IF=FALSE;     TMR3H=(65536-11965)/256;     TMR3L=(65536-11965)%256;          if(FALSE==Timer

7、1S.Enable)      {     Timer1S.Interval++;     if(1000==Timer1S.Interval)       {      T0CONbits.TMR0ON=FALSE;      Timer1S.Interval=0;      Timer1S.Enable=TRUE;    }   }     if(LOW==LATAbits.LATA0)LATAbits.

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。