2732|1

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

为啥TMR4不能进中断? [复制链接]

本人写的测试程序,用MCC18编译,为啥TMR2能进低优先级中断?TMR4不能进高优先级中断?(注:TMR4即使配为低优先级中断触发,可也不能进入,为啥)

以下是程序主体

#include    
//MCC18编译的,TMR2正常能进低优先级中断,主要问题是TMR4为何进不了中断?测试选的是高优先级中断


void initial(void);


void high_isr(void);
void low_isr(void);

void main(void);
////////////////////////////////////////



void initial(void)
{
CM1CON=0;
CM2CON=0;
CM3CON=0;
ADCON1=0;
ADCON2=0;

PORTA=0;  //定义I/O
LATA=0;
ANCON0=0;//引脚配置为数字端口
ANCON1=0;//引脚配置为数字端口
ANCON2=0;//引脚配置为数字端口
TRISA=0XC1;

PORTB=0;
TRISB=0XFF;

SSP1CON1=0;
SSP2CON1=0;

PORTC=0X0;
LATC=0;
TRISC=0X0;
ODCON1=0;
ODCON2=0;
ODCON3=0;

PORTD=0X0;  
TRISD=0X2f;

PORTE=0X0;
TRISE=0X0;

PORTF=0X0;
LATF=0;
TRISF=0X0;  

PORTG=0X0;
TRISG=0X1e;

INTCON3bits.INT2IE=0;   //关闭中断
INTCON3bits.INT1IE=0;   //关闭中断   
//---------------------------------
RCON=0;
RCONbits.IPEN=1;//允许中断优先级

PR2=0XFF;//TMR2的匹配值 4.096ms(512u*8)
T2CON=3;///0;//0 0001 0 01
PIE1bits.TMR2IE=1;
IPR1bits.TMR2IP=0;//低优先级
TMR2=0;
T2CONbits.TMR2ON=1;


PR4=0X55;
PIE5=0;
IPR5=0;
T4CON=0;//00000010
PIE5bits.TMR4IE=1;
IPR5bits.TMR4IP=1;//高优先级
TMR4=0;
T4CONbits.TMR4ON=1;

_asm nop _endasm

INTCONbits.GIE=1; // 允许所有高优先级中断
INTCONbits.PEIE=1; // 允许所有低优先级的外设中断         
}
//===============================

////////////////////////////////////////////////////////////////////////////////
//------------- interrupt routine  ----------------接收外部中断后,计算并发脉冲量
#pragma code high_vector=0x08  //掉电保护
void high_interrupt(void)
{
_asm goto high_isr _endasm
}
#pragma code
//..............................................................................
#pragma interrupt high_isr //save=PROD,section("MATH_DATA"),section(".tmpdata") //bsr need to be stored
void high_isr(void)
{
if (PIR5bits.TMR4IF==1)   PIR5bits.TMR4IF=0;

_asm nop _endasm
_asm nop _endasm
_asm nop _endasm
}
////////////////////////////////////////////////////////////////////////////////


//------------- interrupt routine  ----------------接收外部中断后,计算并发脉冲量
#pragma code low_vector=0x18  //程序外部 4096_u 中断
void low_interrupt(void)
{
_asm goto low_isr _endasm
}
#pragma code
//..............................................................................
#pragma interruptlow low_isr save=PROD,section("MATH_DATA"),section(".tmpdata") //bsr need to be stored
void low_isr(void) //TMR2 512个u 32Mhz
{
if (PIR1bits.TMR2IF==1)  PIR1bits.TMR2IF=0;

_asm nop _endasm
_asm nop _endasm
_asm nop _endasm
}



void main()
{
initial();


for(;;)
   {

   }
}

最新回复

MARK回去再看  详情 回复 发表于 2014-4-18 16:58
点赞 关注
 

回复
举报

11

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
MARK回去再看
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表