PIC18F中断定时器

本文介绍了PIC18F4520单片机的中断系统,包括高、低优先级中断向量,10个控制中断的寄存器,以及如何设置中断标志位、使能位和优先级。还展示了在数字频率计数器中的应用,使用T0作为外部信号源,TMR3作为定时器,并利用中断嵌套技术提高精度。源程序使用MCC18编译器和MPLAB7.50集成开发环境,结合ICD2进行调试。
摘要由CSDN通过智能技术生成
//基于MCC18编译器,使用HI-PICC不可用  
//--------------------------------------------   #include <p18F452.h>  
//---------------------------------------------------------------------------- 
void main (void);  
void InterruptHandlerHigh (void);   
unsigned int Timeout;   
//---------------------------------------------------------------------------- 
// Main routine  
void main ()
{    
        Timeout = 0;    
        INTCON = 0x20;                 //disable global and enable TMR0 interrupt        
        INTCON2 = 0x84;               //TMR0 high priority   
        RCONbits.IPEN = 1;            //enable priority levels   
        TMR0H = 0;                      //clear timer   
        TMR0L = 0;                      //clear timer    
        T0CON = 0x82;                //set up timer0 - prescaler 1:8   
        INTCONbits.GIEH = 1;       //enable interrupts   
        TRISD = 0; /* configure PORTD for output */   
        PORTD=0X00;    
        while (1)     
        {        
             if (Timeout == 1)          
            {                                  //timeout?           
                   Timeout = 0;          //clear timeout indicor                        
                   PORTD++;              //PORTD端口二进制计数         
          }     
        }
 } 

PIC18F452定时器中断@ZSTU 
//----------------------------------------------------------------------------
 // High priority interrupt vector   
#pragma code InterruptVectorHigh = 0x08 
void  InterruptVectorHigh (void) 
{    _asm     
      goto InterruptHandlerHigh //jump to interrupt routine  
    _endasm 
}   
//----------------------------------------------------------------------------
// High priority interrupt routine   
#pragma code  
#pragma interrupt InterruptHandlerHigh  
void  InterruptHandlerHigh () 
{    
      if (INTCONbits.TMR0IF)      
     {   //check for TMR0 overflow       
         INTCONbits.TMR0IF = 0;            //clear interrupt flag       
         Timeout = 1;                          //indicate timeout    
      } 
}  
 //----------------------------------------------------------------------------

    PIC18F4520单片机提供多个中断源及一个中断优先级功能,可以给大多数中断源分配高优先级或者低优先级.高优先级中断向量地址为0008H低优先级中断向量地址为0018H。高优先级中断事伯将中断所有可参正在进行的低优先级中断。
     有10个寄存器用于控制中断的操作。它们是:
RCON
INTCON
INTCON2
INTCON3
PIR1和PIR2
PIE1和PIE2
IPR1和IPR2
通常,用三个位控制中断源的操作。 

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

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

  1 #include <p18cxxx.h>
  2 #define TRUE 1
  3 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值