PIC 16F628A清除其寄存器?

时间:2017-08-11 13:58:40

标签: pic

系统是基本但我有一个可怕的问题,我无法解决它请帮助我。 当我的系统工作时,PIC会继续运行,但会在一天内清除寄存器4-5次。

系统应如何运作:

- 我有一个PIC,气缸和3个传感器(与24V DC配合使用)。 - 主传感器从另一个系统获取信号。 - 当主传感器发出信号时,如果气缸向后,气缸应该前进,直到前方传感器看到它,气缸向前,气缸应该向后,直到后方传感器看到它。

程序:

#include <16F628A.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or 
B5(PIC18) used for I/O

#use delay(crystal=4000000)

#use fast_io(a)
#use fast_io(b)

#define goForward   PIN_A0
#define comeBackward   PIN_A1
#define main_sensor   PIN_B0
#define positionSensorForward   PIN_B5
#define positionSensorBackward   PIN_B4

int1 pistonPositionedForward=0, pistonPositionedBackward=1;
int1 positionForwardReg=0, positionBackwardReg=0;
int1 pistonForwarding=0, pistonBackwarding=0;

#priority rb,ext

#int_RB NOCLEAR
void B_change()
{

  positionForwardReg=input(positionSensorForward);
  positionBackwardReg=input(positionSensorBackward);

if(positionForwardReg&&pistonForwarding) //if forwarding and forward sensor see
{   
  disable_interrupts(INT_RB);

  output_low(goForward);
  pistonPositionedForward=1;
  pistonPositionedBackward=0;

  write_eeprom(0,1);
  write_eeprom(1,0);

  pistonForwarding=0;
  pistonBackwarding=0;

  clear_interrupt(int_ext);
  enable_interrupts(INT_EXT);
}

else if(positionBackwardReg&&pistonBackwarding) //if backwarding and backward sensor see
{  
  disable_interrupts(INT_RB);

  output_low(comeBackward);
  pistonPositionedForward=0;
  pistonPositionedBackward=1;

  write_eeprom(0,0);
  write_eeprom(1,1);

  pistonForwarding=0;
  pistonBackwarding=0;

  clear_interrupt(int_ext);
  enable_interrupts(INT_EXT);
}

clear_interrupt(int_rb);

}

#int_ext NOCLEAR
void ext_interrupt()
{

  disable_interrupts(INT_EXT);

  positionForwardReg=input(positionSensorForward);
  positionBackwardReg=input(positionSensorBackward);

  if(positionForwardReg^positionBackwardReg)  //if one of position sensor is see then position according to sensor, else position according to memory
  {
     pistonPositionedForward=positionForwardReg;
     pistonPositionedBackward=positionBackwardReg;
  }

  if(pistonPositionedForward)
  {
     pistonBackwarding=1;
     pistonForwarding=0;
     output_high(comeBackward);

     clear_interrupt(int_rb);
     enable_interrupts(INT_RB);
  }
  else if(pistonPositionedBackward)
  {
     pistonForwarding=1;
     pistonBackwarding=0;
     output_high(goForward);

     clear_interrupt(int_rb);
     enable_interrupts(INT_RB);
  }
  clear_interrupt(int_ext);
}

void main()
{
   //to remember last position after power off
   pistonPositionedForward=read_eeprom(0); 
   pistonPositionedBackward==read_eeprom(1);

   set_tris_a(0x00);
   set_tris_b(0xFF);

   output_a(0x00);
   delay_ms(1000);

   ext_int_edge(L_TO_H);

   clear_interrupt(int_ext);
   enable_interrupts(INT_EXT);

   enable_interrupts(GLOBAL);

   while(TRUE)
   {

   }

}

我的电路: CIRCUIT

* j2,j3连接selonoid阀

* J4,J5,J6连接3个传感器1.引脚+ 24VDC,2。引脚GND,3.pin传感器数据

*** B1和B2连接已更改。现在B1连接到B5,B2连接到B4

这些是我尝试过的:

- 我有3个PIC他们都做同样的事情

-I改变了24V电源

- 我取消了7805和7812,我连接了单独的5V电源而不是7805。

我正在通过LED进行调试。有时系统停止运行只是在其中一个位置等待。取主传感器信号但没有任何东西,而且活塞位置前进和活塞位置后退寄存器值为0.我无法找到问题如何清除这些寄存器?

0 个答案:

没有答案