[DemoCode下载] N76E003的管脚中断演示

[复制链接]
5597|17
 楼主| 734774645 发表于 2017-11-20 16:00 | 显示全部楼层 |阅读模式
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2015 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/

  6. //***********************************************************************************************************
  7. //  Nuvoton Technoledge Corp.
  8. //  Website: http://www.nuvoton.com
  9. //  E-Mail : MicroC-8bit@nuvoton.com
  10. //  Date   : Apr/21/2016
  11. //***********************************************************************************************************

  12. //***********************************************************************************************************
  13. //  File Function: N76E003 I/O Interrupt demo code
  14. //***********************************************************************************************************

  15. #include "N76E003.h"
  16. #include "SFR_Macro.h"
  17. #include "Function_define.h"
  18. #include "Common.h"
  19. #include "Delay.h"

  20. #if 0
  21. //Following setting in Function_define.h

  22. ///****************************************************************************
  23. //   Enable INT port 0~3
  24. //***************************************************************************/
  25. //#define         Enable_INT_Port0                                        PICON &= 0xFB;
  26. //#define                Enable_INT_Port1                                        PICON |= 0x01;
  27. //#define                Enable_INT_Port2                                        PICON |= 0x02;
  28. //#define                Enable_INT_Port3                                        PICON |= 0x03;
  29. ///*****************************************************************************
  30. // Enable each bit low level trig mode
  31. //*****************************************************************************/
  32. //#define                Enable_BIT7_LowLevel_Trig                        PICON&=0x7F;PINEN|=0x80;PIPEN&=0x7F
  33. //#define                Enable_BIT6_LowLevel_Trig                        PICON&=0x7F;PINEN|=0x40;PIPEN&=0xBF
  34. //#define                Enable_BIT5_LowLevel_Trig                        PICON&=0xBF;PINEN|=0x20;PIPEN&=0xDF
  35. //#define                Enable_BIT4_LowLevel_Trig                        PICON&=0xBF;PINEN|=0x10;PIPEN&=0xEF
  36. //#define                Enable_BIT3_LowLevel_Trig                        PICON&=0xDF;PINEN|=0x08;PIPEN&=0xF7
  37. //#define                Enable_BIT2_LowLevel_Trig                        PICON&=0xEF;PINEN|=0x04;PIPEN&=0xFB
  38. //#define                Enable_BIT1_LowLevel_Trig                        PICON&=0xF7;PINEN|=0x02;PIPEN&=0xFD
  39. //#define                Enable_BIT0_LowLevel_Trig                        PICON&=0xFD;PINEN|=0x01;PIPEN&=0xFE
  40. ///*****************************************************************************
  41. // Enable each bit high level trig mode
  42. //*****************************************************************************/
  43. //#define                Enable_BIT7_HighLevel_Trig                        PICON&=0x7F;PINEN&=0x7F;PIPEN|=0x80
  44. //#define                Enable_BIT6_HighLevel_Trig                        PICON&=0x7F;PINEN&=0xBF;PIPEN|=0x40
  45. //#define                Enable_BIT5_HighLevel_Trig                        PICON&=0xBF;PINEN&=0xDF;PIPEN|=0x20
  46. //#define                Enable_BIT4_HighLevel_Trig                        PICON&=0xBF;PINEN&=0xEF;PIPEN|=0x10
  47. //#define                Enable_BIT3_HighLevel_Trig                        PICON&=0xDF;PINEN&=0xF7;PIPEN|=0x08
  48. //#define                Enable_BIT2_HighLevel_Trig                        PICON&=0xEF;PINEN&=0xFB;PIPEN|=0x04
  49. //#define                Enable_BIT1_HighLevel_Trig                        PICON&=0xF7;PINEN&=0xFD;PIPEN|=0x02
  50. //#define                Enable_BIT0_HighLevel_Trig                        PICON&=0xFD;PINEN&=0xFE;PIPEN|=0x01
  51. ///*****************************************************************************
  52. // Enable each bit falling edge trig mode
  53. //*****************************************************************************/
  54. //#define                Enable_BIT7_FallEdge_Trig                        PICON|=0x80;PINEN|=0x80;PIPEN&=0x7F
  55. //#define                Enable_BIT6_FallEdge_Trig                        PICON|=0x80;PINEN|=0x40;PIPEN&=0xBF
  56. //#define                Enable_BIT5_FallEdge_Trig                        PICON|=0x40;PINEN|=0x20;PIPEN&=0xDF
  57. //#define                Enable_BIT4_FallEdge_Trig                        PICON|=0x40;PINEN|=0x10;PIPEN&=0xEF
  58. //#define                Enable_BIT3_FallEdge_Trig                        PICON|=0x20;PINEN|=0x08;PIPEN&=0xF7
  59. //#define                Enable_BIT2_FallEdge_Trig                        PICON|=0x10;PINEN|=0x04;PIPEN&=0xFB
  60. //#define                Enable_BIT1_FallEdge_Trig                        PICON|=0x08;PINEN|=0x02;PIPEN&=0xFD
  61. //#define                Enable_BIT0_FallEdge_Trig                        PICON|=0x04;PINEN|=0x01;PIPEN&=0xFE
  62. ///*****************************************************************************
  63. // Enable each bit rasing edge trig mode
  64. //*****************************************************************************/
  65. //#define                Enable_BIT7_RasingEdge_Trig                        PICON|=0x80;PINEN&=0x7F;PIPEN|=0x80
  66. //#define                Enable_BIT6_RasingEdge_Trig                        PICON|=0x80;PINEN&=0xBF;PIPEN|=0x40
  67. //#define                Enable_BIT5_RasingEdge_Trig                        PICON|=0x40;PINEN&=0xDF;PIPEN|=0x20
  68. //#define                Enable_BIT4_RasingEdge_Trig                        PICON|=0x40;PINEN&=0xEF;PIPEN|=0x10
  69. //#define                Enable_BIT3_RasingEdge_Trig                        PICON|=0x20;PINEN&=0xF7;PIPEN|=0x08
  70. //#define                Enable_BIT2_RasingEdge_Trig                        PICON|=0x10;PINEN&=0xFB;PIPEN|=0x04
  71. //#define                Enable_BIT1_RasingEdge_Trig                        PICON|=0x08;PINEN|=0xFD;PIPEN&=0x02
  72. //#define                Enable_BIT0_RasingEdge_Trig                        PICON|=0x04;PINEN|=0xFE;PIPEN&=0x01
  73. #endif

  74. /******************************************************************************
  75. * FUNCTION_PURPOSE: I/O Pin interrupt Service Routine
  76. ******************************************************************************/
  77. void EXT_INT0(void) interrupt 0
  78. {
  79.                                 clr_GPIO1;
  80.                         Timer0_Delay1ms(100);
  81.                         set_GPIO1;
  82.                         Timer0_Delay1ms(100);
  83.                         clr_GPIO1;
  84.                         Timer0_Delay1ms(100);
  85.                         set_GPIO1;
  86.                         Timer0_Delay1ms(100);   
  87.                         clr_GPIO1;
  88.                         Timer0_Delay1ms(100);
  89.                         set_GPIO1;
  90.                         Timer0_Delay1ms(100);
  91.                         clr_GPIO1;
  92.                         Timer0_Delay1ms(100);
  93.                         set_GPIO1;
  94.                         Timer0_Delay1ms(100);  
  95.                                 clr_GPIO1;
  96.                         Timer0_Delay1ms(100);
  97.                         set_GPIO1;
  98.                         Timer0_Delay1ms(100);
  99.                         clr_GPIO1;
  100.                         Timer0_Delay1ms(100);
  101.                         set_GPIO1;
  102.                         Timer0_Delay1ms(100);   
  103.                         clr_GPIO1;
  104.                         Timer0_Delay1ms(100);
  105.                         set_GPIO1;
  106.                         Timer0_Delay1ms(100);
  107.                         clr_GPIO1;
  108.                         Timer0_Delay1ms(100);
  109.                         set_GPIO1;
  110.                         Timer0_Delay1ms(100);  
  111.                 }

  112. void PinInterrupt_ISR (void) interrupt 7
  113. {
  114.         if(PIF == 0x01)
  115.         {
  116.     PIF = 0x00;                             //clear interrupt flag
  117.                         clr_GPIO1;
  118.                         Timer1_Delay10ms(10);
  119.                         set_GPIO1;
  120.                         Timer1_Delay10ms(10);
  121.                         clr_GPIO1;
  122.                         Timer1_Delay10ms(10);
  123.                         set_GPIO1;
  124.                         Timer1_Delay10ms(10);   
  125.                
  126.         }
  127.         else if (PIF == 0x80)
  128.         {
  129.                         clr_GPIO1;
  130.                         Timer1_Delay10ms(10);
  131.                         set_GPIO1;
  132.                         Timer1_Delay10ms(10);
  133.                         clr_GPIO1;
  134.                         Timer1_Delay10ms(10);
  135.                         set_GPIO1;
  136.                         Timer1_Delay10ms(10);   
  137.                         clr_GPIO1;
  138.                         Timer1_Delay10ms(10);
  139.                         set_GPIO1;
  140.                         Timer1_Delay10ms(10);
  141.                         clr_GPIO1;
  142.                         Timer1_Delay10ms(10);
  143.                         set_GPIO1;
  144.                         Timer1_Delay10ms(10);   
  145.         }
  146. }
  147. /******************************************************************************
  148. The main C function.  Program execution starts
  149. here after stack initialization.
  150. ******************************************************************************/
  151. void main (void)
  152. {

  153.     P07_Input_Mode;
  154.                 set_P0S_7;
  155.                 P00_Input_Mode;
  156.                 P01_Input_Mode;
  157.                 set_P0S_1;
  158.                 P12_PushPull_Mode;
  159.                 P30_PushPull_Mode;
  160.                 P05_PushPull_Mode;
  161.        
  162.                
  163. //----------------------------------------------------
  164. //        P0.5 set as highlevel trig pin interrupt function
  165. //  Keep P0.5 connect to VDD LED will tickle
  166. //  otherwise, MCU into power down mode.
  167. //----------------------------------------------------
  168.                 Enable_INT_Port2;
  169. //                Enable_BIT7_LowLevel_Trig;
  170.                 Enable_BIT0_LowLevel_Trig;

  171.                 P30 =1;
  172.                 P05 = 0;

  173.     set_EPI;                                                        // Enable pin interrupt
  174.                 set_EX0;
  175.     set_EA;                                                                // global enable bit
  176.    
  177.     while(1)
  178.                 {
  179.                         P01=0;
  180.                         P30=0;
  181.                         P01=1;
  182.                         P30=1;
  183.                 }

  184. }




 楼主| 734774645 发表于 2017-11-20 16:00 | 显示全部楼层
有人问,怎么那么多管脚判断到底是哪个中断的啊,方法给大家了,新手必备。
643757107 发表于 2017-11-20 17:20 | 显示全部楼层
分两种呢,一种是独立中断源的,另外一种共享中断源的。
mmcu 发表于 2017-11-21 11:39 | 显示全部楼层
else if (PIF == 0x80) 在这个情况下不用清楚PIF标志吗?
wahahaheihei 发表于 2017-11-21 11:48 | 显示全部楼层
这几种我都用过,比ST8的好用。
捉虫天师 发表于 2017-11-21 20:29 | 显示全部楼层
跟别的51不同,新唐的还提供了一些封装好的操作。
捉虫天师 发表于 2017-11-21 20:37 | 显示全部楼层
通过不同次数的闪烁确定不同类型啊。
稳稳の幸福 发表于 2017-11-21 20:50 | 显示全部楼层
下降沿,和上升沿,配合定时器可以测脉宽
yiy 发表于 2017-11-22 19:54 | 显示全部楼层
不同管脚闪烁次数不同,以为用不同的IO来带LED呢。
21mengnan 发表于 2017-12-15 15:38 | 显示全部楼层
io的模式跟ARM的差不多了。真是增强版。
xinpian101 发表于 2017-12-15 19:37 | 显示全部楼层
管脚中断应用还是很多的。
天堂陌客 发表于 2017-12-18 14:54 | 显示全部楼层
//#define                Enable_BIT0_LowLevel_Trig                        PICON&=0xFD;
第44行是不是有错呢?我觉得应该是PICON&=0xFB;
天堂陌客 发表于 2017-12-18 14:57 | 显示全部楼层
void PinInterrupt_ISR (void) interrupt 7
请问一下,这个 interrupt 7是哪里定义的,所有管脚中断处理函数都在这里吗?
玛尼玛尼哄 发表于 2017-12-18 21:59 | 显示全部楼层
那些中断入口应该在启动文件里。
Darren1992 发表于 2018-10-18 09:30 | 显示全部楼层
734774645 发表于 2017-11-20 16:00
有人问,怎么那么多管脚判断到底是哪个中断的啊,方法给大家了,新手必备。 ...

那到底是怎样判断的
Darren1992 发表于 2018-10-18 09:33 | 显示全部楼层
本帖最后由 Darren1992 于 2018-10-18 09:41 编辑
天堂陌客 发表于 2017-12-18 14:54
//#define                Enable_BIT0_LowLevel_Trig                        PICON&=0xFD;
第44行是不是 ...

这个感觉应该是FB,还有  Enable_INT_Port0     PICON &= 0xFB; 1111 1011,也根本不是选的端口0啊,感觉FC才对。
Darren1992 发表于 2018-10-18 09:58 | 显示全部楼层
第176行  Enable_INT_Port2;这个选择端口2,但总个io口配置中,都没对端口2的进行配置,不懂为什么有这一句!
呵呵呵囧行 发表于 2019-2-27 16:40 | 显示全部楼层
到底怎么用完全没看懂  这不就是复制官方的历程呢么
您需要登录后才可以回帖 登录 | 注册

本版积分规则

211

主题

3588

帖子

15

粉丝
快速回复 在线客服 返回列表 返回顶部