[技术问答]

N76E003官方 的PIN中断例程

[复制链接]
2430|14
手机看帖
扫描二维码
随时随地手机跟帖
hk386|  楼主 | 2018-4-19 10:37 | 显示全部楼层 |阅读模式
这个是我下载的N76E003 的PIN中断例程
#include "N76E003.h"
#include "SFR_Macro.h"
#include "Function_define.h"
#include "Common.h"
#include "Delay.h"

#if 0
//Following setting in Function_define.h

///****************************************************************************
//   Enable INT port 0~3
//***************************************************************************/
//#define         Enable_INT_Port0                                        PICON &= 0xFB;
//#define                Enable_INT_Port1                                        PICON |= 0x01;
//#define                Enable_INT_Port2                                        PICON |= 0x02;
//#define                Enable_INT_Port3                                        PICON |= 0x03;
///*****************************************************************************
// Enable each bit low level trig mode
//*****************************************************************************/
//#define                Enable_BIT7_LowLevel_Trig                        PICON&=0x7F;PINEN|=0x80;PIPEN&=0x7F
//#define                Enable_BIT6_LowLevel_Trig                        PICON&=0x7F;PINEN|=0x40;PIPEN&=0xBF
//#define                Enable_BIT5_LowLevel_Trig                        PICON&=0xBF;PINEN|=0x20;PIPEN&=0xDF
//#define                Enable_BIT4_LowLevel_Trig                        PICON&=0xBF;PINEN|=0x10;PIPEN&=0xEF
//#define                Enable_BIT3_LowLevel_Trig                        PICON&=0xDF;PINEN|=0x08;PIPEN&=0xF7
//#define                Enable_BIT2_LowLevel_Trig                        PICON&=0xEF;PINEN|=0x04;PIPEN&=0xFB
//#define                Enable_BIT1_LowLevel_Trig                        PICON&=0xF7;PINEN|=0x02;PIPEN&=0xFD
//#define                Enable_BIT0_LowLevel_Trig                        PICON&=0xFD;PINEN|=0x01;PIPEN&=0xFE
///*****************************************************************************
// Enable each bit high level trig mode
//*****************************************************************************/
//#define                Enable_BIT7_HighLevel_Trig                        PICON&=0x7F;PINEN&=0x7F;PIPEN|=0x80
//#define                Enable_BIT6_HighLevel_Trig                        PICON&=0x7F;PINEN&=0xBF;PIPEN|=0x40
//#define                Enable_BIT5_HighLevel_Trig                        PICON&=0xBF;PINEN&=0xDF;PIPEN|=0x20
//#define                Enable_BIT4_HighLevel_Trig                        PICON&=0xBF;PINEN&=0xEF;PIPEN|=0x10
//#define                Enable_BIT3_HighLevel_Trig                        PICON&=0xDF;PINEN&=0xF7;PIPEN|=0x08
//#define                Enable_BIT2_HighLevel_Trig                        PICON&=0xEF;PINEN&=0xFB;PIPEN|=0x04
//#define                Enable_BIT1_HighLevel_Trig                        PICON&=0xF7;PINEN&=0xFD;PIPEN|=0x02
//#define                Enable_BIT0_HighLevel_Trig                        PICON&=0xFD;PINEN&=0xFE;PIPEN|=0x01
///*****************************************************************************
// Enable each bit falling edge trig mode
//*****************************************************************************/
//#define                Enable_BIT7_FallEdge_Trig                        PICON|=0x80;PINEN|=0x80;PIPEN&=0x7F
//#define                Enable_BIT6_FallEdge_Trig                        PICON|=0x80;PINEN|=0x40;PIPEN&=0xBF
//#define                Enable_BIT5_FallEdge_Trig                        PICON|=0x40;PINEN|=0x20;PIPEN&=0xDF
//#define                Enable_BIT4_FallEdge_Trig                        PICON|=0x40;PINEN|=0x10;PIPEN&=0xEF
//#define                Enable_BIT3_FallEdge_Trig                        PICON|=0x20;PINEN|=0x08;PIPEN&=0xF7
//#define                Enable_BIT2_FallEdge_Trig                        PICON|=0x10;PINEN|=0x04;PIPEN&=0xFB
//#define                Enable_BIT1_FallEdge_Trig                        PICON|=0x08;PINEN|=0x02;PIPEN&=0xFD
//#define                Enable_BIT0_FallEdge_Trig                        PICON|=0x04;PINEN|=0x01;PIPEN&=0xFE
///*****************************************************************************
// Enable each bit rasing edge trig mode
//*****************************************************************************/
//#define                Enable_BIT7_RasingEdge_Trig                        PICON|=0x80;PINEN&=0x7F;PIPEN|=0x80
//#define                Enable_BIT6_RasingEdge_Trig                        PICON|=0x80;PINEN&=0xBF;PIPEN|=0x40
//#define                Enable_BIT5_RasingEdge_Trig                        PICON|=0x40;PINEN&=0xDF;PIPEN|=0x20
//#define                Enable_BIT4_RasingEdge_Trig                        PICON|=0x40;PINEN&=0xEF;PIPEN|=0x10
//#define                Enable_BIT3_RasingEdge_Trig                        PICON|=0x20;PINEN&=0xF7;PIPEN|=0x08
//#define                Enable_BIT2_RasingEdge_Trig                        PICON|=0x10;PINEN&=0xFB;PIPEN|=0x04
//#define                Enable_BIT1_RasingEdge_Trig                        PICON|=0x08;PINEN|=0xFD;PIPEN&=0x02
//#define                Enable_BIT0_RasingEdge_Trig                        PICON|=0x04;PINEN|=0xFE;PIPEN&=0x01
#endif

/******************************************************************************
* FUNCTION_PURPOSE: I/O Pin interrupt Service Routine
******************************************************************************/
void EXT_INT0(void) interrupt 0
{
                                clr_GPIO1;
                        Timer0_Delay1ms(100);
                        set_GPIO1;
                        Timer0_Delay1ms(100);
                        clr_GPIO1;
                        Timer0_Delay1ms(100);
                        set_GPIO1;
                        Timer0_Delay1ms(100);   
                        clr_GPIO1;
                        Timer0_Delay1ms(100);
                        set_GPIO1;
                        Timer0_Delay1ms(100);
                        clr_GPIO1;
                        Timer0_Delay1ms(100);
                        set_GPIO1;
                        Timer0_Delay1ms(100);  
                                clr_GPIO1;
                        Timer0_Delay1ms(100);
                        set_GPIO1;
                        Timer0_Delay1ms(100);
                        clr_GPIO1;
                        Timer0_Delay1ms(100);
                        set_GPIO1;
                        Timer0_Delay1ms(100);   
                        clr_GPIO1;
                        Timer0_Delay1ms(100);
                        set_GPIO1;
                        Timer0_Delay1ms(100);
                        clr_GPIO1;
                        Timer0_Delay1ms(100);
                        set_GPIO1;
                        Timer0_Delay1ms(100);  
                }

void PinInterrupt_ISR (void) interrupt 7
{
        if(PIF == 0x01)
        {
    PIF = 0x00;                             //clear interrupt flag
                        clr_GPIO1;
                        Timer1_Delay10ms(10);
                        set_GPIO1;
                        Timer1_Delay10ms(10);
                        clr_GPIO1;
                        Timer1_Delay10ms(10);
                        set_GPIO1;
                        Timer1_Delay10ms(10);   
               
        }
        else if (PIF == 0x80)
        {
                        clr_GPIO1;
                        Timer1_Delay10ms(10);
                        set_GPIO1;
                        Timer1_Delay10ms(10);
                        clr_GPIO1;
                        Timer1_Delay10ms(10);
                        set_GPIO1;
                        Timer1_Delay10ms(10);   
                        clr_GPIO1;
                        Timer1_Delay10ms(10);
                        set_GPIO1;
                        Timer1_Delay10ms(10);
                        clr_GPIO1;
                        Timer1_Delay10ms(10);
                        set_GPIO1;
                        Timer1_Delay10ms(10);   
        }
}
/******************************************************************************
The main C function.  Program execution starts
here after stack initialization.
******************************************************************************/
void main (void)
{
                 //pin中断 端口0:P00,P01,P07, 端口1:P10,P1.1,P17,端口2:P20, 端口3:P30
        P07_Input_Mode;
                set_P0S_7;
                P00_Input_Mode;
                P01_Input_Mode;       
                set_P0S_1;//P01
                P12_PushPull_Mode;//?
                P30_PushPull_Mode;//外部中断INT0
                P05_PushPull_Mode; //T0
       
               
//----------------------------------------------------
//        P0.5 set as highlevel trig pin interrupt function
//  Keep P0.5 connect to VDD LED will tickle
//  otherwise, MCU into power down mode.
//----------------------------------------------------
                Enable_INT_Port0;       
                Enable_BIT7_LowLevel_Trig;
                Enable_BIT0_LowLevel_Trig;

                P30 =1;
                P05 = 0;

    set_EPI;                                                        // Enable pin interrupt
                set_EX0;
    set_EA;                                                                // global enable bit
   
    while(1)
                {
                        P01=0;
                        P30=0;
                        P01=1;
                        P30=1;
                }

}
红色我标出来了Enable_INT_Port0(PICON &= 0xFB;1111,1011,这里应该是选择端口0,可是我觉得值不对,应该是0XFC才对,我又没有板子可以跑下,有人可以帮我看看是我理解错误还是官方定义的有错,可以的话有人帮我解释下是怎么回事吗,谢谢)
天灵灵地灵灵| | 2018-4-19 11:01 | 显示全部楼层
么问题的,那个通道0的位置在BIT2的位置设置,看手册

使用特权

评论回复
dongnanxibei| | 2018-4-19 16:39 | 显示全部楼层
你试过不行?

使用特权

评论回复
dongnanxibei| | 2018-4-19 16:40 | 显示全部楼层
先试试再怀疑。

使用特权

评论回复
hk386|  楼主 | 2018-4-20 08:47 | 显示全部楼层
天灵灵地灵灵 发表于 2018-4-19 11:01
么问题的,那个通道0的位置在BIT2的位置设置,看手册

PICON的BIT2是选择通道0的中断类型,现在Enable_INT_Port0意思是使能中断端口0,那么最后2位应该是00,麻烦你看手册,或者你在看程序最上面的定义
//#define         Enable_INT_Port0                                        PICON &= 0xFB;    端口0
//#define                Enable_INT_Port1                                        PICON |= 0x01;端口1
//#define                Enable_INT_Port2                                        PICON |= 0x02;端口2
//#define                Enable_INT_Port3                                        PICON |= 0x03;端口3

使用特权

评论回复
hk386|  楼主 | 2018-4-20 08:51 | 显示全部楼层

没板子实验,我一开始就说了,而且麻烦你看手册,或者你在看程序最上面的定义
//#define         Enable_INT_Port0                                        PICON &= 0xFB;    端口0
//#define                Enable_INT_Port1                                        PICON |= 0x01;端口1
//#define                Enable_INT_Port2                                        PICON |= 0x02;端口2
//#define                Enable_INT_Port3                                        PICON |= 0x03;端口3
端口1是01,端口2是10,端口3是11,所以端口0不是就是00吗,既然是00,那么就应该是&XXXX,XX00吗

使用特权

评论回复
dongliushui| | 2018-4-20 23:50 | 显示全部楼层
你说的对,但是这个是逻辑操作,操作的结果是后面两位是00,前面的保持不变,你懂了吧

使用特权

评论回复
dongliushui| | 2018-4-20 23:51 | 显示全部楼层
你觉得特别的这个是用的逻辑与操作,后面运算数为1的保持不变,如果是0,还是0,如果是1,还是1.而对应是0的,不管你是什么都是0.
相当于对于低两位全部赋值为0

使用特权

评论回复
hk386|  楼主 | 2018-4-21 10:45 | 显示全部楼层
dongliushui 发表于 2018-4-20 23:51
你觉得特别的这个是用的逻辑与操作,后面运算数为1的保持不变,如果是0,还是0,如果是1,还是1.而对应是0 ...

或许就像你说的,为什么不直接用FC呢,这样就没差异了,你说的那样的前提是PICON默认值是0的情况,如果不是这里就出错了

使用特权

评论回复
zhuomuniao110| | 2018-4-21 22:38 | 显示全部楼层
他这个写法确实挺另类的,后面的为何就突然不用这种写法了呢。用了与操作,又坏或操作,确实挺变态。

使用特权

评论回复
小灵通2018| | 2018-4-22 17:54 | 显示全部楼层
不知道运行起来有没有问题啊。谁有板子试试

使用特权

评论回复
huahuagg| | 2018-4-22 18:12 | 显示全部楼层
几个版本都是这么设置的,应该这个端口特别。

使用特权

评论回复
Puremr| | 2018-4-28 15:11 | 显示全部楼层
楼主你好,你的例程是在哪下载的呢?可以给个链接吗?

使用特权

评论回复
捉虫天师| | 2018-4-29 13:55 | 显示全部楼层
Puremr 发表于 2018-4-28 15:11
楼主你好,你的例程是在哪下载的呢?可以给个链接吗?

官方网站,的BSP

使用特权

评论回复
捉虫天师| | 2018-4-29 13:56 | 显示全部楼层
这种问题,必须的先在单片机上下载了测试,如果好用,就没毛病。不能用了,再怀疑,还有这个用了不同的逻辑操作,让人费解,难道这个很特殊吗,也要考虑其他几个位的内容。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

593

帖子

0

粉丝