the_maniac
Üye
- Katılım
- 25 Nis 2009
- Mesajlar
- 48
- Puanları
- 1
Selam arkadaşlar,
Ben 16F877 kullanıyorum ve kodumu microcde yazıyorum. Kodumda PORTB.F6'ya bağlanmış bir butonum var(latching buton yani momentary(anlık) değil) ve sırf butona bastığımda interrupt gelsin ve PORTD.F1'deki ledimi toggle etsin istiyorum. Fakat ledim yanmıyor yani interrupta girmiyor. Koddaki hatanın ayarlarla ilgili bir sorun olduğunu düşünüyorum. Yardımcı olabilirseniz çooooooook sevinirim
Kod aşağıdaki gibi:
Bu kısım interrupt ayarlarının olduğu kısım. İnterrupt alt yordamının içi de şöyle :
Şimdiden ilgilenen herkese tekrar teşekkürler
Ben 16F877 kullanıyorum ve kodumu microcde yazıyorum. Kodumda PORTB.F6'ya bağlanmış bir butonum var(latching buton yani momentary(anlık) değil) ve sırf butona bastığımda interrupt gelsin ve PORTD.F1'deki ledimi toggle etsin istiyorum. Fakat ledim yanmıyor yani interrupta girmiyor. Koddaki hatanın ayarlarla ilgili bir sorun olduğunu düşünüyorum. Yardımcı olabilirseniz çooooooook sevinirim
Kod aşağıdaki gibi:
Kod:
void main()
{
//*************************TIMER AYARLARI**************************//
TRISA=0x00;
TRISB=0xFF;
TRISC=0xFF;
TRISD=0x00;
TRISE=0x00;
PORTA=0x00;
PORTB=0x00;
PORTC=0x00;
PORTD=0x00;
PORTE=0x00;
T1CON.TMR1CS=0; //TMR1CS: Timer1 Clock Source Select bit,0 = Internal clock (FOSC/4)
// T1CON.F2=0; //This bit is ignored. Timer1 uses the internal clock
T1CON.T1CKPS1=1; //Prescale bits 1:8 olarak ayarlandı
T1CON.T1CKPS0=1; //Prescale bits
T1CON.T1OSCEN=0;//Timer1 Oscillator Enable Control bit
//1 = Oscillator is enabled
//0 = Oscillator is shut-off (the oscillator inverter is turned off to eliminate power drain)
PIR1.TMR1IF=0; //TMR1IF: Timer1 Overflow Interrupt Flag bit,0 = Timer1 has not overflowed
TMR1H=0x00;
TMR1L=0x00;
PIE1.TMR1IE=1; //TMR1IE: Timer1 Overflow Interrupt Enable bit,1 = Enables the Timer1 overflow interrupt
INTCON.GIE=1; //GIE: Global Interrupt Enable bit, Enables all unmasked interrupts
INTCON.PEIE=1; //Peripheral Interrupt Enable bit, 1 = Enables all unmasked peripheral interrupts
INTCON.RBIE=1; //RB Port Change Interrupt Enable bit, 1 = Enables the RB port change interrupt
INTCON.RBIF=0; //RBIF: RB Port Change Interrupt Flag bit
CCP1CON.CCP1M3=0; //Capture/Compare/PWM off
CCP1CON.CCP1M2=0;
CCP1CON.CCP1M1=0;
CCP1CON.CCP1M0=0;
Bu kısım interrupt ayarlarının olduğu kısım. İnterrupt alt yordamının içi de şöyle :
Kod:
void interrupt()
{
if (PIR1.TMR1IF==1) {
flag=1;
PIR1.TMR1IF=0; //0 = Timer1 has not overflowed, Interrupt flag is cleared.
if (BK=='B')
{
PORTD.F6=0;
if (a==10){
PORTD.F7=1;
}
else if(HL=='H'){
HL='L';x=b;PORTD.F7=0;
}
else {
HL='H';x=a;PORTD.F7=1;
}
}
else if (BK=='K'){
PORTD.F7=0;
if (a==10){
PORTD.F6=1;
}
else if(HL=='H'){
HL='L';x=b;PORTD.F6=0;
}
else {
HL='H';x=a;PORTD.F6=1;
}
}
else {
PORTD.F7=0;
PORTD.F6=0;
}
}
else if (PORTB.F7==1)
{
INTCON.RBIE=0; //RB Port Change Interrupt Enable bit, 1 = Enables the RB port change interrupt
//INTCON.GIE=0; //GIE: Global Interrupt Enable bit, Enables all unmasked interrupts
PORTD.F7=0;
PORTD.F6=1;
//PORTD.F1=~PORTD.F1;
if (emergency_flag==0){
emergency_flag=1;
}
okuma_b=PORTB;
INTCON.RBIF=0;
//PORTD.F5=1;
//INTCON.GIE=1; //GIE: Global Interrupt Enable bit, Enables all unmasked interrupts
INTCON.RBIE=1; //RB Port Change Interrupt Enable bit, 1 = Enables the RB port change interrupt
}
else if (PORTB.F7==0)
{
INTCON.RBIE=0; //RB Port Change Interrupt Enable bit, 1 = Enables the RB port change interrupt
PORTD.F7=0;
PORTD.F6=0;
//PORTD.F5=~PORTD.F5;
if (emergency_flag_low==0){
emergency_flag_low=1;
}
okuma_b=PORTB;
INTCON.RBIF=0;
INTCON.RBIE=1; //RB Port Change Interrupt Enable bit, 1 = Enables the RB port change interrupt
}
//else if (PORTB.F6==1 || PORTB.F5==1)
else if (INTCON.RBIF==1)
{
PORTD.F1=~PORTD.F1;
okuma_b=PORTB;
INTCON.RBIF=0;
INTCON.RBIE=1; //RB Port Change Interrupt Enable bit, 1 = Enables the RB port change interrupt
}
Şimdiden ilgilenen herkese tekrar teşekkürler