上一次用到引脚外部中断实现按键的功能,在R7F0C809专门有个按键中断的功能,从手册中可以知道3个寄存器控制。分别是: 键返回控制寄存器 ( KRCTL) 键返回模式寄存器 ( KRM0) 键返回标志寄存器 ( KRF) 我们可以设置这三个寄存器就可以实现按键的功能。 KRCTL只有最低位和最高位配置,如上图,可以通过这两位组成4种功能。 这个寄存器就是设置是否检测键中断信号的。 上图就是键返回标志的寄存器,如果按键一旦按下,对应的KRFn就会置一,这个需要手动用软件清除。 以下就是按键中断功能的示意图: 今天就利用了P1.1的按键功能,P1.1是按键4,所以我们要配置按键4, 但奇怪的是我已经开了按键中断,结果还是进不了INTKR中断。不知道大家也是不是这种情况。 源代码: - void Port_Init()
- {
-
- KRCTL = 0x80; //Æô¶ˉ¼üÖD¶Ï±êÖ¾
- KRM0 = 0x10; //Æô¶ˉ¼ì2a¼üÖD¶ÏDÅoÅ
- KRF = 0x00; //Çå3yÖD¶ÏDÅoÅ
- KRPR0 = 1; //éèÖÃÖD¶ÏóÅÏ輶
- KRPR1 = 1;
-
- KRIF = 0; //Çå3y¼üÖD¶Ï±ê־λ
- KRMK = 1; //¿aÆô¼üÖD¶Ï
-
- }
- uint8_t Value = 0;
- /******************************************************************************
- * Function Name: main
- * Description : This function implements main function.
- * Arguments : none
- * Return Value : none
- ******************************************************************************/
- void main(void)
- {
- /* Start user code. Do not edit comment generated here */
- inttm00counter = 0U; /* Configuration counter of number of TM00 interrupt */
- g_SW_Counter = 0U; /* Initialization counter of SW input */
- g_TDR00_WorkH = g_DTR000_DataH[0U]; /* Set initial interval */
- g_TDR00_WorkL = g_DTR000_DataL[0U];
- //R_INTC0_Start(); /* Enable INTP0 interrupt */
- //R_TAU0_Channel0_Start(); /* Start TAU0 channel 0 counter */
- Port_Init();
- /* Wait interrupt */
- while (1U)
- {
- //HALT();
- /**/
- //Value = ;Value
- if( (KRF & 0x10) >> 4 )
- {
- P0 ^= 0b00000010U;
- while(P1.1 == 0);
- KRF = 0x00;
- }
-
- }
- /* End user code. Do not edit comment generated here */
-
- }
复制代码醉了,注释居然乱码了 gif效果图: 源代码:
|