搜索
bottom↓
回复: 6

PIC18F66K22--RB5电平变化中断

[复制链接]

出0入0汤圆

发表于 2014-4-22 11:46:24 | 显示全部楼层 |阅读模式
我采用的是PIC18F66K22,电平变化引脚为RB5端口,程序如下,但是在RB5端口有电平
变化的时候进不了中断,RF3引脚电平不能取反,希望各位大虾给点建议

#include<pic18.h>

__PROG_CONFIG(1,0x0818);//PIC的配置字1
__PROG_CONFIG(2,0x2806);//PIC的配置字2
__PROG_CONFIG(3,0x8901);//PIC的配置字3
__PROG_CONFIG(4,0x0011);//PIC的配置字4
__PROG_CONFIG(5,0x8000);//PIC的配置字5
__PROG_CONFIG(6,0x0000);//PIC的配置字6
__PROG_CONFIG(7,0x0000);//PIC的配置字7

void main()                                    //主函数
{
       
        INTCON=0xfe;                /*允许中断及标志位清零,开启了RBIE=1*/
        T0CON=0x08;                /*禁止TMR0ON=0;16位计时器;内部时钟;关闭分频器,定时时间使用*/
        T1CON=0x72;                /*禁止TMR1ON=0;16位计时器;内部时钟;分频值8;定时时间使用*/
        T1GCON=0x00;                /*门控寄存器*/

        PIE1=0x00;
        PIR1=0x00;                /*置标志位清零*/
       
        ODCON1=0xff;        /*外设漏极开路输出使能设置*/
        ODCON2=0xff;        /*外设漏极开路输出使能设置*/
        ODCON3=0xff;        /*外设漏极开路输出使能设置*/

        OSCCON=0xEF;        /*配置为内部8MHz*/
        OSCCON2=0x0A;
        OSCTUNE=0x80;        /*振荡器调节寄存器*/

        CCPTMRS1=0x00;        /*CCP4-CCP7*/
        CCPTMRS2=0x05;        /*CCP8_PWM时钟源基于TMR6,CCP9_PWM时钟源基于TMR4*/
       
        WDTCON=0x00;        /*禁止看门狗*/
//-------------------------------------------------------//
        LATA = 0x00;
        LATB = 0x00;
        LATC = 0x00;
        LATD = 0x00;
        LATE = 0x00;
        LATF = 0x00;
        LATG = 0x00;

        PORTB=0x00;
        PORTBbits.RB5=0;
        TRISBbits.TRISB5=1;
                  
        PORTFbits.RF3=0;
        TRISFbits.TRISF3=0;
        RBIE=1;                //打开RB端口电平变化中断
        RBIF=0;                //清零RB端口电平变化中断标志位
        RBPU=0;              //打开RB端口弱上拉
        while(1)                  //主循环
        {
                ;  
        }
}


void  interrupt   pic18_int()    //中断服务函数
{
        if(RBIF==1)                     //如果电平变化中断标志位为1
        {
                RBIF=0;                            //清零标志位
                PORTFbits.RF3=!PORTFbits.RF3;
       
        }
}

出20入12汤圆

发表于 2014-4-22 12:14:30 | 显示全部楼层
中断服务函数不是这样写吧。如果使能了中断优先级可以参考下面的写法
void low_isr(void);
#pragma code low_vector=0x18
void interrupt_at_low_vector(void)
{
         _asm
                  goto low_isr
        _endasm
}
#pragma code
#pragma interruptlow low_isr

void InterruptHandlerHigh (void);
#pragma code InterruptVectorHigh = 0x08
void InterruptVectorHigh (void)
{
  _asm
    goto InterruptHandlerHigh
  _endasm
}

#pragma code
#pragma interrupt InterruptHandlerHigh

void InterruptHandlerHigh ()
{

}

void low_isr(void)
{
}

出0入0汤圆

 楼主| 发表于 2014-4-22 13:32:37 | 显示全部楼层
gaolf_2012 发表于 2014-4-22 12:14
中断服务函数不是这样写吧。如果使能了中断优先级可以参考下面的写法
void low_isr(void);
#pragma code lo ...

你好,很感谢你,有参考事例吗,我把你的中断服务函数加进去了编译不了
方便加一下你QQ吗

出0入0汤圆

发表于 2014-4-22 15:33:55 | 显示全部楼层
2楼使用的MCC18编译器
PICC编译器下,楼主的写法就没问题

出0入0汤圆

发表于 2014-4-28 11:24:41 | 显示全部楼层
路过路过 顺便看看

出0入0汤圆

发表于 2014-4-29 07:27:58 来自手机 | 显示全部楼层
我用过18f46k22,mcc18编译器,你的中断写法有问题,中断函数应放到倒数第二个函数里去

出0入0汤圆

发表于 2014-8-8 15:28:12 | 显示全部楼层
我用这个片子的时候,用KIT3仿真可以但是不仿真就没有程序一样,但是我是下载了程序进去的。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-5 22:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表