[PIC®/AVR®/dsPIC®产品] 关于Interrupt On Change使用的疑问,坐等大侠解答~~~~~~

[复制链接]
2239|4
 楼主| zhongs98 发表于 2015-1-14 10:28 | 显示全部楼层 |阅读模式
我选用PIC12F615设计一款分频电路,想使用InterruptOnChange中断来检测输入信号的变化,
现输入信号是0-5V方波,问题是检测不到输入变化,、请各位分析下我的Firmware有什么问题。谢谢
  1. void system_init01(void)
  2. {
  3.     ANSELbits.ANS = 0;          //
  4.     TRISIObits.TRISIO2 = 1;     // Input
  5.     TRISIObits.TRISIO5 = 1;     // Input
  6.     TRISIObits.TRISIO4 = 1;     // Input
  7.     TRISIObits.TRISIO0 = 0;     // Output
  8.     TRISIObits.TRISIO1 = 0;     // Output

  9.     WPUbits.WPU0 = 1;           // 1 = Pull-up enabled
  10.     WPUbits.WPU1 = 1;           // 1 = Pull-up enabled
  11.     WPUbits.WPU2 = 1;           // 1 = Pull-up enabled
  12.     WPUbits.WPU4 = 1;           // 1 = Pull-up enabled
  13.     WPUbits.WPU5 = 1;           // 1 = Pull-up enabled

  14.     IOCbits.IOC0 = 1;           // 1 = Interrupt-on-change enabled
  15.     IOCbits.IOC1 = 1;           // 1 = Interrupt-on-change enabled
  16.     INTCONbits.GPIE = 1;        // 1 = Enables the GPIO change interrupt
  17.     INTCONbits.GPIF = 0;        // 1 = When at least one of the GPIO <5:0> pins changed state (must be cleared in software)
  18. }

  19. bit Roll_IOC_Edge_Changed(void)
  20. {
  21.     if(INTCONbits.GPIF ==  1)
  22.     {
  23.         ioc_edge_count++;
  24.         ioc_edge_count %= (unsigned int)(pulse_per_cycle*4);
  25.         INTCONbits.GPIF = 0;
  26.         return 1;
  27.     }
  28.     else
  29.     {
  30.         return 0;
  31.     }
  32. }

  33. //-----------
  34. void main(void) {
  35.     system_init01();
  36.     GPIObits.GP0 = 0;
  37.     GPIObits.GP1 = 0;
  38.     INTCONbits.GIE = 1;         //1 = Enables all unmasked interrupts
  39.     while(1)
  40.     {
  41.         #ifdef NON_DIVIDE
  42.             GPIObits.GP0 = GPIObits.GP2;
  43.             GPIObits.GP1 = GPIObits.GP5;

  44.         #else
  45.             if(Roll_IOC_Edge_Changed())
  46.             {
  47.                 //if(ioc_edge_count < Encoder_Cycle_Second)
  48.                     if(ioc_edge_count < 8)
  49.                 {
  50.                     GPIObits.GP0 = 0;       // A phase
  51.                 }
  52.                 else
  53.                 {
  54.                     GPIObits.GP0 = 1;       // A phase
  55.                 }

  56.                 //if((ioc_edge_count < Encoder_Cycle_Third) && (ioc_edge_count >= Encoder_Cycle_First))
  57.                 if((ioc_edge_count < 24) && (ioc_edge_count >= 16))
  58.                 {
  59.                     GPIObits.GP1 = 0;       // B phase
  60.                 }
  61.                 else
  62.                 {
  63.                     GPIObits.GP1 = 1;       // B phase
  64.                 }
  65.             }
  66.         #endif
  67.     }
  68. }

 楼主| zhongs98 发表于 2015-1-14 11:15 | 显示全部楼层
 楼主| zhongs98 发表于 2015-1-14 14:10 | 显示全部楼层
没人用过这个功能?
949155525 发表于 2015-1-14 20:20 来自手机 | 显示全部楼层
为什么不用74系列芯片
 楼主| zhongs98 发表于 2015-1-15 09:27 | 显示全部楼层
949155525 发表于 2015-1-14 20:20
为什么不用74系列芯片

你好,已经解决,输入端口没设置对,用单片机的原因是软体参数可以修改,也便宜
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

129

帖子

2

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