عند اضافة زر اخر يعمل التاني جيدا و يعمل الاول بدون تاخير
كود:
sbit sw1 at RA0_bit;
sbit sw1_dir at TRISA0_bit;
sbit load1 at RB0_bit;
sbit load1_dir at TRISB0_bit;
char sw1_flag=0 , state_load=0 ;
char sw1_time=0 ,load_off_time=0;
sbit sw2 at RA1_bit;
sbit sw2_dir at TRISA1_bit;
sbit load2 at RB1_bit;
sbit load2_dir at TRISB1_bit;
char sw2_flag=0 , state2_load=0 ;
char sw2_time=0 ,load2_off_time=0;
//Timer1
//Prescaler 1:2; TMR1 Preload = 15536; Actual Interrupt Time : 50 ms
//Place/Copy this part in declaration section
void InitTimer1(){
T1CON = 0x11;
TMR1IF_bit = 0;
TMR1H = 0x3C;
TMR1L = 0xB0;
TMR1IE_bit = 1;
INTCON = 0xC0;
}
void Interrupt(){
if (TMR1IF_bit){
TMR1IF_bit = 0;
TMR1H = 0x3C;
TMR1L = 0xB0;
//Enter your code here
if(sw1_flag==1)sw1_time++;
if(state_load ==1)load_off_time++;
if(sw2_flag==1)sw2_time++;
if(state2_load ==1)load2_off_time++;
}
}
void main()
{
cmcon=7;
InitTimer1();
sw1_dir=1;// input
load1_dir=0;// output
load1=0; // OFF load1
sw2_dir=1;// input
load2_dir=0;// output
load2=0; // OFF load1
while(1){
if(sw1==0 ) sw1_flag=1;
if(sw1_flag==1 && sw1_time>=5)// this mean time >= 250
{
sw1_flag=0;
sw1_time=0;
state_load=1;
load1=1;
}
if(state_load == 1 && load_off_time>=60)// this mean time >= 3000ms=3sec
{
state_load =0;
load_off_time=0;
load1=0;
}
if(sw2==0 ) sw2_flag=1;
if(sw2_flag==1 && sw2_time>=5)// this mean time >= 250
{
sw2_flag=0;
sw2_time=0;
state2_load=1;
load2=1;
}
if(state2_load == 1 && load2_off_time>=60)// this mean time >= 3000ms=3sec
{
state2_load =0;
load2_off_time=0;
load2=0;
}
}
}