RB0 kesmesinde hata

Başlatan asadam, 17 Aralık 2007, 23:35:35

asadam

Basit bir program ama çalışmıyor? neden olabilir?

#include <16F84A.h>
#fuses XT,NOWDT,NOPROTECT,NOPUT
#use delay(clock=4000)
#int_EXT     
void ISR() 
{ 
output_low(PIN_B1);
delay_ms(5000); 
} 

void main()
{
set_tris_b(00000001);
output_b(00000000); 
EXT_INT_EDGE(L_TO_H);
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL); 
 
WHILE(1)
{
OUTPUT_high(PIN_b1);
}

}

kemalak

#use delay(clock=4000)   Bu satır eksik yazılmış

#use delay(clock=4000000)  Doğrusu böyle olacak

asadam

kemalak teşekkürler. yalnız o satıırn kesme ile bir ilgisi bulunmamakta
ayrıca söylediğin şekilde değiştirmeme rağmen genede çalışmadı
tekrar teşekkürler

ahmet2004

OUTPUT_high(PIN_b1);     satırının altına aşağıdaki kodu yazınız.

input(PIN_B0);

asadam

teşşekkür ederim input() komutunu verince sorun düzeldi

krian

ahmet bu input mantığı nedir ben anlamadım acıklarmısın

ahmet2004

PDF'yi açmanız ve okumanız mümkünmü? Oku görüşelim...

Sen araştır PDF nin içinden ben sana yardımcı olacağım.

Herşeyi başkalarından beklemeyiniz...

En güzel kaynak PDF dosyaları bu çiplerin.

@asadam:   da dönmedi geri. Nasıl yapıldığını hiç merak etmedi?

O an sorunu çözelim kaçalım mantığı var forum genelinde.

james

output() ve input() gibi hazır fonksiyonları kullanmadan önce ccs'nin helpini okumak lazım.Burda input() un kullanımında mantık yok.amaç pin_b0'ı giriş yapmak.
beklenen çözüm #use FIXED_IO(b_outputs=PIN_B1) kullanmak.
tavsiyem şu: kodun taşınabilirliği için ccsnin hazır fonksiyonlarından mümkün olduğunca kaçın.
şöyle yapabilirsiniz.

#byte  portb = 0x6
#byte  trisb = 0x86

#bit   led        =  portb.1
#bit   led_tris   =  trisb.1

#bit   buton      =  portb.0
#bit   buton_tris =  trisb.0

buton_tris = 1;
led_tris = 0;
led = 0;
ARAMIYORUM , BULUYORUM

ahmet2004

ASM de şöyle bir işlem yapılmış.

0070 3004       00253 MOVLW  04
0071 009C       00254 MOVWF  @@1C
0072 019A       00255 CLRF   1A
0073 1B8B       00256 BTFSC  INTCON.GIE
0074 179A       00257 BSF    1A.7
0075 138B       00258 BCF    INTCON.GIE
0076 30FA       00259 MOVLW  FA
0077 009F       00260 MOVWF  ??65535
0078 203A       00261 CALL   @delay_ms1
0079 1B9A       00262 BTFSC  1A.7
007A 178B       00263 BSF    INTCON.GIE
007B 0B9C       00264 DECFSZ @@1C,F
007C 2872       00265 GOTO   072
               00266 ..............................    output_toggle(PIN_b7);
007D 1683       00267 BSF    STATUS.RP0
007E 1386       00268 BCF    TRISB.7
007F 3080       00269 MOVLW  80
0080 1283       00270 BCF    STATUS.RP0
0081 0686       00271 XORWF  PORTB,F
               00272 ..............................    data = input(PIN_B0);
0082 1683       00273 BSF    STATUS.RP0
0083 1406       00274 BSF    TRISB.0
0084 1283       00275 BCF    STATUS.RP0
0085 101B       00276 BCF    1B.0
0086 1806       00277 BTFSC  PORTB.RB0/INT
0087 141B       00278 BSF    data
               
00279 ..............................  }  
0088 2870       00280 GOTO   070
               00281 ..............................  
               00282 .............................. }
               00283 ..............................  
0089 0063       0284 SLEEP



neler yapıldığını belki bu asm'yi inceleyerek bulabilirsin.

M_B

Merhaba Ahmet2004 hocam asm ıncelemesi kısımda size bır sorum olacak hep merak etmıstım bir turlu anlam cıkaramadım. bana bu konuda acıklama bulunabılırmısınız.
asm cıktı kısmında anlamadıgım nokta
0085 101B 00276 BCF 1B.0
burda BCF den sonraki 1B.0 kısmı neyi ifade ediyor.
O adresteki tanımı mı ?
Tesekkurler
M_B
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

james

derleyici data için sramde yer ayırıyor ve adresi 0x1B
BCF 1B.0 ----> data değişkeninin 0.bitini temizliyor.
ARAMIYORUM , BULUYORUM

M_B

Tesekkurler @James  arkadasım. kolay gelsın.
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet