PIC单片机进不去T1中断

#include<p24fj128ga010.h>
int dsec=0;
int sec=0;
int min=0;
void_ISR_T1interrupt(void)
{
dsec++;
if (dsec>9)
{
dsec=0;
sec++;
if (sec>59)
{
min++;
sec=0;
if (min>59)
{
min=0;
}
}
}
}// ti中断
main()
{
//_T1IP=4;
TMR1=0;
PR1=25000-1;
TRISA=0Xff00;
T1CON=0X8020;
_T1IF=0;
_T1IE=1;
while(1)
{
PORTA=sec;
}
在中断设置断点后,发现程序一直运行在主循环,没有进去中断代码啊

大胆猜测你应该学过51单片机,51单片机中断函数基本格式就是这样,所有中断都有自己的入口,所以只要函数名字包含了中断代号就能进去相应的中断;但是PIC单片机不同,所有中断都共用一个中断入口,一个入口既然要包含这么多中断响应,那么就必然要判断是何种中断,以采取响应的处理措施,在PIC单片机中断函数中,第一个代码就应判断中断类型,所以你的代码进入不了T1中断,只要在函数代码最上边加上“if(TMR1IF==1)”,就是T1定时器的中断发生标志位置1就说明发生了T1中断,那么即可进入T1中断,当然,接下来两步应该清零TMR1IF和重装初值即可正常使用T1中断了。
希望我的回答能帮助到你。追问

我用mplab进行软件仿真,从监视窗口可以看到TMR1的值在变化,T1CON也是按照的设置改变了,但是当TMR1变到预设的PR1的值时,中断标志位就是不改变,所以进不了中断,但是我不知道中断标志位为什么就不变呢?按道理当计数器溢出了标志位就应该自动置1进入中断了啊

追答

T1计数器有三个中断标志位,TMR1IE,PEIE,GIE,你打开了没

追问

你说的这个貌似和下面一个人说的是一样的,GIE不是总中断吗?我查了下资料,你几个标志位都应该是在pic16的INTCON寄存器里面,但是请注意我的库函数已经表明,我用的是pic24,这个系列的单片机貌似是没有总中断位的,而且我查了在PIC24系列的INTCON寄存器并没有你说的这几位,如果你确定24里面有这几位,还请麻烦指明在哪个寄存器里面呢?

追答

好吧,那你得把问题描述清楚吧,16是PIC入门用的,你提这种问题我就以为你才入门,就默认你用的16,这么简单的问题你去看看数据手册就能解决的,不用浪费力气在知道上边,也怪我自己没问清楚。24我确实没接触过,但我也知道不会难到哪儿去,既然要问,就要说清楚问题,才好对症下药。

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-16
中断里面 _T1IF要清零,下次才能再进入中断追问

不是下次进不去,是第一次都进不去,我中断设断点了,第一次要是能进去断点处就停止了,但是程序根本就没进去过

追答

void _ISR _T1interrupt(void)

i好像要大写吧
void _ISR _T1Interrupt(void)

IPC0中的T1IP设一下中断优先级
如果不行就在线仿真,运行一下然后手动停下来,看看T1CON、IFS0与TMR1寄存器该变化的是否变化了

第2个回答  2017-03-02
在中断程序的最后,中断标志位归零后,程序运行的好好地,没有问题啊。
第3个回答  2013-06-19
你写错了一句void_ISR_T1interrupt(void)应该是void interrupt _ISR_T1(void)
第4个回答  2013-04-19
总中断允许都没开怎么进中断啊

PIC 定时器为什么进不了中断
在初始化中将 外部中断PEIE=1;使能 总中断GIE=1;使能

懂pic单片机中断函数的帮我看看啊,编译通不过哦,程序中的 "_ISR" 是...
define _ISR __attribute__((interrupt))你可以参考C32使用手册

PIC单片机的TIMER0是不是没有使能位
在上电复位之后,根据OPTION_REG寄存器的初始化设置,T0默认为接收T0CKI引脚上的边沿变化情况(预分频也不给它)。如果你的单片机这个引脚什么也不接悬空并根据设置其IO口默认输入的情况下,T0一直没有接收到到电平边沿变化,所以TMR0是根本不会计数的,也就是说它根本不工作。它是没有像T1那个TCON名义...

PIC单片机编程的问题 刚学 不太懂
movwf CMCON movlw 0C0h ; 使能周边外设中断和全局中断 movwf INTCON movlw b'00000001' ; Timer1是1:1预分频,内部时钟源, movwf T1CON ; 振荡频率\/4,不带门控 movlw .16 ; AD 次数 = 10 movwf COUNTER MAIN010 btfss CALCULATE_AD ; = 1 -> 主循环 goto MAIN010 bcf CALCULATE_AD ; 清 A\/D 转...

怎么调高PWM波的输出频率?
PWM这个功能在PIC单片机上就有,但是如果你就要用51单片机的话,也是可以的,但是比较的麻烦 你可以用定时器T0来控制频率,定时器T1来控制占空比:大致的的编程思路是这样的:T0定时器中断是让一个I0口输出高电平,在这个定时器T0的中断当中起动定时器T1,而这个T1是让IO口输出低电平,这样改变定时器T0...

单片机方波信号采集
另一方法就是用单片机的脉宽扑捉功能了,avr pic都有这个模块的,占用一个定时器,51没有这个功能可用外部中断+定时器来做,只是资源占用有点多,不过51有两个外部中断,也不为过。。。用中断估的话不点mcu还会有大把空闲去处理其它的事情,如按键,显示等,比起上种可用性强些;如果脉宽变化不大...

STC单片机PWM编程!
0 = 不使能DAC转换;DAC数据寄存器:DACH\/L DACH为12位转换的高位数据寄存器 四、程序流程图和源程序 1、主程序流程图 2、源程序清单 DACCON EQU 0xfD ;定义模数转换控制器 DACH EQU 0xfc ;定义模数转换数据寄存器高8位 DACL EQU 0xfb ;定义模数转换数据寄存器低8位 ORG 0000H LJMP ...

单片机中的12分频是什么意思?
计算方法:PIC单片机的每四个时钟周期为一个内部指令周期,例如:8MHz的晶振,则内部指令周期为1\/(8\/4)= 0.5 uS 计数周期 1、时钟周期=振荡周期,名称不同而已,是指为单片机提供时钟信号的振荡源的周期,都是等于单片机晶振频率的倒数,如常见的外接12M晶振,那它的时钟周期=1\/12M。2、机器周期,...

单片机中说的看门狗是什么
看门狗的功能是定期的查看芯片内部的情况,一旦发生错误就向芯片发出重启信号。看门狗命令在程序的中断中拥有最高的优先级。在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成各种寄存器和内存的数据混乱,会导致程序指针错误,不在程序区,取出错误的程序指令等,都有...

求一段可运行的基于单片机PIC 32MX795F512L 的C语言代码(流水灯)_百度...
你从microchip官网上下一些PIC32的例程就行啦,各种外设接口的例程都有,下面是定时中断的一个例程。在Debug模式下能正常进中断,RD0接口的LED闪烁表示芯片是好的 include <plib.h> \/\/ Configuration Bit settings \/\/ SYSCLK = 72 MHz (8MHz Crystal\/ FPLLIDIV * FPLLMUL \/ FPLLODIV)\/\/ PBCLK...

相似回答