中断嵌套实验c语言程序,PIC18F单片机的中断嵌套的C语言编程方法.doc

PIC18F单片机的中断嵌套的C语言编程方法

PIC18F单片机的中断嵌套的C语言编程方法PIC18F4520单片机提供多个中断源及一个中断优先级功能,可以给大多数中断源分配高优先级或者低优先级.高优先级中断向量地址为0008H,低优先级中断向量地址为0018H。高优先级中断事伯将中断所有可参正在进行的低优先级中断。有10个寄存器用于控制中断的操作。它们是:RCONINTCONINTCON2INTCON3PIR1和PIR2PIE1和PIE2IPR1和IPR2通常,用三个位控制中断源的操作。它们是:标志位 表明发生了中断事件使能位 允许程序跳转转到中断向量地址处执行(当标志位置1时)优先级 用于选择是高优先级还是低先级通过将IPEN位(RCON<7>)置1,可使能中断优先级功能。当使能中断优先级时,有2位可使能全局中断。将GIEH位(INTCON<7>)置1,可使能所有优先级位置1(高优先级)的中断。将GIEL位(INTCON<6>)置1,可使能所有优先级位清零(低优先级)的中断。当中断标志位、使能位以及相应的全局中断使能位均被置1时,程序将立即跳转到中断地址0008H或0018H,具体地址取决于优先级位的设置。通过设置相应的使能位可以禁止单个中断。注意:系统复位时IPEN位为零(默认状态)时,便会禁止中断优先级功能,此时中断与PIC16系统中档单片机相兼容。在兼容模式下,所有中断均跳转到地址0008H执行。下面是在SP9608-PIC增强型单片机开发板利用PIC18F4520单片机来实现的数字频率计数器功能,程序中使用了T0用为外部信号源输入,通TMR0来实现对信号源的频率计数。TMR3作为定时器,来产生1mS数码管扫描时基和1S秒时基信号。为了提高频率计数的准确度,采用中断嵌套技术来完成,将TMR3产生1mS的定时信号作为高优先级中断,TMR0作为频率计数溢出中断作为低先级中断。源程序采用MCC18编译器和MPLAB7.50版本的集成开发环境,调试工具采用ICD2;具体源程序如下:系统时钟:采用外部的12MHz晶振经过内部PLL的4倍频到48MHz。(HS-PLL配置位)#include #define TRUE 1#define FALSE 0#define HIGH 1#define LOW 0rom unsigned char LEDDATA[]={??? 0x3F,0x06,0x5B,0x4F,0x66,??? 0x6D,0x7D,0x07,0x7F,0x6F,??? 0x40,0x00,};struct TIMER_STRUCT{unsigned int Interval;unsigned char Enable;};struct TIMER_STRUCT Timer1S;struct T0_T1_STRUCT{unsigned int High_Byte;unsigned int Low_Byte;unsigned long Result;};struct T0_T1_STRUCT My_T0,My_T1;struct LED_STRUCT{unsigned char DotPointer;unsigned char ScanPointer;unsigned char Buffer[8];};struct LED_STRUCT NumberLED;void PIC18F_High_isr (void);void PIC18F_Low_isr (void);#pragma code high_vector_section=0x8void high_vector (void){_asm goto PIC18F_High_isr _endasm}#pragma code low_vector_section=0x18void low_vector (void){_asm goto PIC18F_Low_isr _endasm}#pragma code//---中断高优先级---//#pragma interrupt PIC18F_High_isrvoid PIC18F_High_isr (void){if(TRUE==PIR2bits.TMR3IF)??? {?? PIR2bits.TMR3IF=FALSE;????? TMR3H=(65536-11965)/256;????? TMR3L=(65536-11965)%256;?? ???? ???? if(FALSE==Timer1S.Enable)?????? {????? Timer1S.Interval++;????? if(100

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值