ccs c'de dış kesme yapamıyorum!lütfen yardım!

Başlatan umit2006, 29 Temmuz 2012, 14:54:47

umit2006

pic 16f84 ile RB0 pininden kesme yaptırmak istiyorum,kodları derliyo ama simulasyonda çalışmıyor.
*******************************************************************************
#include <16F84.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading

#use delay(clock=4000000)
int i;
#int_ext  //dış kesme (RB0/INT)
void ext_kesmesi()
{
output_high(pin_b1);
delay_ms(1000);
output_low(pin_b1);
delay_ms(600);
   for (i=0;i<10;i++);
   {
   output_high(pin_b1);
   delay_ms(200);
   output_low(pin_b1);
   delay_ms(200);
      }
}
void main()
{
  set_tris_b(0x01);
  output_b(0x00);
  ext_int_edge(H_TO_L);
  enable_interrupts(INT_EXT);
  enable_interrupts(GLOBAL);
  while(1);
  }

fatih6761


umit2006

şema yok,interrupts ların mantığını kavramak için.simulatörde çalıştırıp deniyorum.(PicSimulator)

tacettin

#3
#include <16F84.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading

#use delay(clock=4000000)
int i;

#int_ext  //dış kesme (RB0/INT)
void ext_kesmesi()
{

output_toggle(PIN_B1);

     
}

void main()
{
  set_tris_b(0x01);
// output_b(0x00);
  ext_int_edge(H_TO_L);
  enable_interrupts(INT_EXT);
  enable_interrupts(GLOBAL);
  while(1);
  }

skara1214

Alıntı yapılan: umit2006 - 29 Temmuz 2012, 14:54:47
pic 16f84 ile RB0 pininden kesme yaptırmak istiyorum,kodları derliyo ama simulasyonda çalışmıyor.
*******************************************************************************
#include <16F84.h>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz
#use delay(clock=4000000)
int i;
#int_ext  //dış kesme (RB0/INT)
void ext_kesmesi()
{
output_high(pin_b1);
delay_ms(1000);
output_low(pin_b1);
delay_ms(600);
   for (i=0;i<10;i++);
   {
   output_high(pin_b1);
   delay_ms(200);
   output_low(pin_b1);
   delay_ms(200);
      }
}
void main()
{
  ext_int_edge(H_TO_L);
  enable_interrupts(INT_EXT);
  enable_interrupts(GLOBAL);
  while(1);
  }
birde böyle denermisiniz?
Herkes ölür ama herkes gerçekten yaşamaz

halilgalic

#USE fast_IO (B)  //b portunu hızlı giriş çıkış yapıyo










fatih6761

Hmm evet @halilgalic haklı B portunu çıkış yapmadan olmaz.
#use fast_io(b) veya
set_tris_b(0x00) kullanmalısınız...

halilgalic

FATİH hocam
#use fast_io(b)
set_tris_b(0x00) ikisi aynı anlamda değil #use fast_io(b) portun hızlı gisiş cıkış olacagını anlatıyo.  set_tris_b(0x00)  giriş veya çıkışı belirtiyo;)

umit2006

değerli arkadaşlar gösterdiğiniz ilgi için teşekkür ederim,sorun kullandığım simulator programındaymış,PIC Simulator IDE 'de denedim dış kesme çalıştı.çok teşekkür ediyorum ilgilenenler için..

fatih6761

@halilgalic arkadaşım ben onalr aynı anlamdadır demedim ki zaten.Eğer arkadaş set_tris_b(0x01) yazarsa da aynı sonucu alır.PIC çekirdeği zaten Little Endian yani 0.bit 0.pine karşılık geliyor
Detay girmek gerekirse:
Fast IO kullanmak programın yavaşlamasına neden olur.Her kullanımda portun kullanılan bitleri için TRIS komutu kullanılır.Baştan TRIS belirtmek ise daha hızlı giriş çıkış işlemi yapmayı sağlar.Zaten donanımsal olarak bir pini hem giriş hemde çıkış olarak kullanmak mümkün değildir.Datasheetleri karıştırmanı tavsiye ederim...  ;D