小弟最近开始使用PIC单片机,使用的是PIC18F45K80,使用PICKIT3作为调试工具,遇到以下难题:
系统时钟内部的16M,定时器前置4分频,也就是定时器时钟1M,定时10ms,现在调试发现定时器中断只能进去1次,到底是哪里出现了问题?恳请大家不吝赐教,谢谢!
我的程序如下:工程文件
test2.rar
(46.18 KB)
/** C O N F I G U R A T I O N B I T S ******************************/
#pragma config XINST = OFF,SOSCSEL=DIG,INTOSCSEL=LOW,RETEN=ON //Config 1L
#pragma config IESO = OFF,FCMEN=OFF,PLLCFG=OFF,FOSC=INTIO2 //Config 1H
#pragma config BORPWR = LOW,BORV=3,BOREN=OFF,PWRTEN=OFF //Config 2L
#pragma config WDTPS = 1,WDTEN=OFF //Config 2H
#pragma config MCLRE = ON //Config 3H
/** I N C L U D E S **************************************************/
#include "p18f45k80.h"
/** D E C L A R A T I O N S ******************************************/
/* ***********************************************************************************
** 函 数 名: void main (void)
** 功能描述: 主函数
**
**************************************************************************************/
void main (void)
{
// OSCCON = 0x60; //选择8M内部时钟
OSCCON = 0x70; //选择16M内部时钟
OSCTUNEbits.PLLEN = 0; // *4 PLL 禁能
// OSCTUNEbits.PLLEN = 1; // *4 PLL 使能
T0CON=0b00000001; //前置4分频 定时器1M的时钟
TMR0H=0xD8;
TMR0L=0xEF; //0xFFFF-0xD8EF= 10000 定时10ms
T0CONbits.TMR0ON=1;
RCONbits.IPEN=1;
INTCONbits.TMR0IF=0; /* 清除TMR0的中断标志 */
INTCON2bits.TMR0IP=1; /* TMR0中断高优先级 */
INTCONbits.TMR0IE=1; /* TMR0中断允许 */
INTCONbits.PEIE_GIEL=1;
INTCONbits.GIE_GIEH=1;
while (1);
}
void InterruptServiceHigh ()
{
if(INTCONbits.TMR0IF==1)
{
TMR0H=0xD8;
TMR0L=0xEF; //0xFFFF-0xD8EF= 10000 定时10ms
INTCONbits.TMR0IF=0;
INTCONbits.TMR0IE=1;
}
}
#pragma code InterruptVectorHigh = 0x08
void InterruptVectorHigh (void)
{
_asm
goto InterruptServiceHigh //jump to interrupt routine
_endasm
}
|