PIC单片机定时器中断-18

E

ernestmyname

Guest
我一直无法得到一个中断定时器,我的照片18F2550的日常工作。我基本上是复制了从C18的用户指南代码,它仍然无法正常工作。任何帮助将不胜感激。 PORTA是输出到7赛格显示器。 [报价]###包括包括包括无效timer_isr声明(无效);位无符号字符[] = {0x01,0x4F,0x12,0x06,0x4C,0x24地址0x20,为0x0F,为0x00,0x04};的#pragma代码low_vector = 0x18无效low_interrupt(空){_asm转到timer_isr声明以_endasm}#pragma伪代码的#pragma interruptlow timer_isr声明作废timer_isr声明(空){INTCONbits.TMR0IF = 0; PORTA上=数字[3]; Delay10KTCYx(10);}无效的主要(无效){将TRISA = 0; PORTA电=数字[0]; OpenTimer0(TIMER_INT_ON&T0_SOURCE_INT&T0_8BIT); INTCONbits.GIE = 1; / /允许全局中断而(1);} [/报价]上显示的值永远不会从零变化,因此我知道这不是进入中断服务程序。
 
嗨,改变你的代码:[代码]###包括包括包括#pragma config伪为FOSC = XT_XT / /#pragma config伪晶体振荡器看门狗=关/ /看门狗定时器关闭#pragma config伪当MCLRE =关闭/ /硕士清偿的#pragma LVP的配置=关闭/ / LVP的关闭无效timer_isr声明(无效);位无符号字符[] = {0x01,0x4F,0x12,0x06,0x4C,0x24地址0x20,为0x0F,0x00时,0x04};的#pragma代码high_vector = 0x08无效high_interrupt (无效){_asm转到timer_isr声明以_endasm}#pragma伪代码的#pragma中断timer_isr声明作废timer_isr声明(无效){INTCONbits.TMR0IF = 0; PORTA上=数字[3]; Delay10KTCYx(10);}无效的主要(无效){将TRISA = 0x00 ; PORTA电=数字[0]; OpenTimer0(TIMER_INT_ON&T0_SOURCE_INT&T0_8BIT); INTCONbits.GIE = 1; / /允许全局中断而(1);} [/代码]你所提供的代码使用了低的ISR但你的程序未设置为使用低的ISR但默认高的ISR。您还没有设置配置位。希望它可以帮助。 Tahmid。
 
非常感谢。这让我在正确的方向前进。这是正常工作的代码:[报价]#pragma config伪为FOSC = INTOSCIO_EC / *内部振荡器,在RA6港口功能,欧共体通过USB使用* /#pragma config伪看门狗=关/ *禁用看门狗定时器* / [/报价]您发布的配置位引起我的控制器卡住。这将只显示在显示屏上一栏,奇怪。我用上面的代码用于初始化和所做的更改的代码,使之成为高级别中断。此作品完美。
 
嗨,我设置了外部晶体振荡器,但我觉得你的电路使用内部RC振荡器。这就是为什么它没有正常工作。但是,现在它的罚款。 Tahmid。
 
嗨,RCON寄存器中,有一个名为IPEN的一点。设置到1,所以你必须中断优先级。然后在INTCON寄存器置位GIEL(第6位)。在INTCON2寄存器,清除T0IP(2位)。这台Timer0中断优先级低。然后你可以使用低优先级中断。对于(优先)中断看看这些寄存器,在数据表:INTCON寄存器INTCON2 INTCON3 PIR1中PIR2中PIE1中PIE2 IPR1 IPR2的RCON寄存器仔细阅读关于中断清晰的概念,通过110页99。希望这有助于。 Tahmid。
 

Welcome to EDABoard.com

Sponsor

Back
Top