打印
[技术问答]

请教一下管脚中断的设置问题

[复制链接]
1674|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kt98741|  楼主 | 2018-12-5 12:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Pin_Interrupt例程中

/******************************************************************************
The main C function.  Program execution starts
here after stack initialization.
******************************************************************************/
void main (void)
{

            P07_Input_Mode;
                set_P0S_7;
                P00_Input_Mode;
                P01_Input_Mode;
                set_P0S_1;
                P12_PushPull_Mode;
                P30_PushPull_Mode;
                P05_PushPull_Mode;
       
               
//----------------------------------------------------
//        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_Port2;
                //此时 PICON = 0x02

                Enable_BIT0_LowLevel_Trig;               
                //此时 PICON = 0x00,PINEN=0x01, PIPEN=0x00;


                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;
                }

}

程序运行的结果是P0.0为电平触发

想请问一下,程序里这两行语句的是什么用的
                set_P0S_7;
                set_P0S_1;       
这两句和P0.0有什么关系?
               

另外这两句是什么意思?
                Enable_INT_Port2;
                Enable_BIT0_LowLevel_Trig;
本来以为这两句是设置P2.0为触发引脚,结果实际上设置的是P0.0,这两句该怎么理解?


现在,如果我想把P1.5脚设置成为上升沿触发,按说明书设置为
        P15_Input_Mode;//P15设置为输入
        PICON = 0x41; //0100001,第0、1位01表示P1.x,第6位1表示第4和5脚,即为P1.5
        PINEN=0x00;//关闭全部下降沿触发开关
        PIPEN=0x20;//00100000,打开Px.5的上升沿触发开关
       

程序运行,给P1.5发送脉冲波,无触发反应,请问一下是设置的问题吗?
沙发
wowu| | 2018-12-5 13:58 | 只看该作者
楼主确认肯定有脉冲波吗

使用特权

评论回复
板凳
734774645| | 2018-12-5 14:34 | 只看该作者
你这是哪个单片机的?

使用特权

评论回复
地板
kt98741|  楼主 | 2018-12-5 15:16 | 只看该作者
确认肯定有脉冲波,P15脚通过一个开关接到电源上,拨动开关,上升沿信号就有了。
用的是N76E003芯片

使用特权

评论回复
5
huangcunxiake| | 2018-12-7 10:46 | 只看该作者
哪个单片机的,没看过这些操作

使用特权

评论回复
6
zhuotuzi| | 2018-12-7 14:29 | 只看该作者
下次提问说清楚你用的哪个

使用特权

评论回复
7
yiyigirl2014| | 2018-12-7 20:11 | 只看该作者
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2017 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

//***********************************************************************************************************
//  Nuvoton Technoledge Corp.
//  Website: http://www.nuvoton.com
//  E-Mail : MicroC-8bit@nuvoton.com
//  Date   : Apr/21/2017
//***********************************************************************************************************

//***********************************************************************************************************
//  File Function: N76E003 I/O Interrupt demo code
//***********************************************************************************************************

#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)
{

    P07_Input_Mode;
                set_P0S_7;
                P00_Input_Mode;
                P01_Input_Mode;
                set_P0S_1;
                P12_PushPull_Mode;
                P30_PushPull_Mode;
                P05_PushPull_Mode;
       
               
//----------------------------------------------------
//        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_Port2;
//                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;
                }

}


使用特权

评论回复
8
yiyigirl2014| | 2018-12-7 20:11 | 只看该作者
参考这个。

使用特权

评论回复
9
天灵灵地灵灵| | 2018-12-8 18:18 | 只看该作者
还是要看着手册,看看哪儿漏了没

使用特权

评论回复
10
幸福小强| | 2018-12-8 21:57 | 只看该作者
楼主只搞了个P15中断?

使用特权

评论回复
11
jiekou001| | 2018-12-8 23:19 | 只看该作者
貌似中断分组有点难搞。

使用特权

评论回复
12
cry1109| | 2018-12-11 17:02 | 只看该作者
     set_P0S_7;
     set_P0S_1; 设置P0.1,P0.7为施密特触发。

使用特权

评论回复
13
cry1109| | 2018-12-11 17:18 | 只看该作者
Enable_INT_Port2;           //中断端口选择2(一共有0、1、2、3组中断端口,对应P0、P1、P2、P3)
Enable_BIT0_LowLevel_Trig;     //P2.0端口为低电平触发
配置P1.5上升沿触发:
Enable_INT_Port1;           //使能中断端口1
Enable_BIT5_RasingEdge_Trig;     //P1.5端口上升沿触发
(N76E003的管脚中断配置)

使用特权

评论回复
14
捉虫天师| | 2018-12-11 23:58 | 只看该作者
按照手册,一个一个配置,不要一起配置。

使用特权

评论回复
15
捉虫天师| | 2018-12-11 23:59 | 只看该作者
注意使用逻辑操作,不要干扰到其他管脚的配置

使用特权

评论回复
16
任博昊| | 2019-5-30 14:52 | 只看该作者
请问楼主,能不能把配置方法发一下,这么久了,你应该会了吧,我是初学者,配置管脚中断总是有错误

使用特权

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

本版积分规则

25

主题

51

帖子

1

粉丝