Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

rs232 rx kesmesi hatası??

Başlatan forumsad, 20 Ocak 2011, 19:22:55

forumsad

arkadaşlar rs232 ile denemeler yapıyorum

aşagıdaki kod düzensiz çalışıyor şöyleki pc'den veriyi peş peşe gönderirsem pic rx kesmesi oluşmuyor...
pc'den veriyi 1-2 sn aralıklarla gönderirsem sorun yok

tıkanıklığa ney sebeb oluyor bir türlü anlayamadım aynı kodu protonla yazdığımda ne kadar peş peşe veri gönderirsem göndereyim  sorun olmuyor

teşekkürler


#include "E:\elektronik\ccs_c\ccs_uygulamalar\pic_test_kart\877\RS232_TEST\main.h"



//port tris ayarlarını ben yapacağım
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#use fast_io(e)


char s;
int i;

////////////////////////////////////////////////////////////////////////////////
#int_rda                                 // RX ucuna veri gelince meydane gelen kesme
void serihaberlesme_kesmesi (){  
disable_interrupts(int_rda);          // int_rda kesmesini pasif yap  

s=getc();
if (s=='0'){
     //utc(s);    //geleni geri gönder
     fputc('0') ;//geleni geri gönder
     output_high(pin_c1);

     }
     
}




void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   // TODO: USER CODE!!
   set_tris_a(0x00);    //porta çıkış
   set_tris_b(0b11000000);    //
   set_tris_c(0b10000000);    //portc
   set_tris_d(0x00);    //portd çıkış
   set_tris_e(0x00);    //porte çıkış
   
   output_a(0x00);     //portu temizle
   output_b(0x00);     //portu temizle
   output_c(0x00);     //portu temizle
   output_d(0x00);     //portu temizle
   output_e(0x00);     //portu temizle




enable_interrupts(GLOBAL);  // Aktif edilen tüm kesmelere izin ver   


for( i=0;i<20;++i)      
{          
fputc('1'); 
delay_ms(100);      
}      


while(true) // Sonsuz döngü   
{
enable_interrupts(int_rda); // int_rda kesmesi aktif  
   output_low(pin_c1);
   
   output_high(PIN_C0);
   delay_ms(100);
   output_low(PIN_C0);
   delay_ms(100);
   
}

}

muhittin_kaplan

if den dolayı geçikme yaşanıyor. o sırada gelen datayı alamıyorsunuz (int kapalı interrupt içerisinde) bilgiyi değişkene atın ve çıkın diğer işlemleri ana döngü içerisinde yapın.

forumsad

anladım deneyip sonucu yazarım teşekkürler hocam...

yanlız dediğiniz gibi olsa bir süre sonra tekrar çalışması lazım yani peş peşe göndermeyi kesip 1-2 sn bekleyip tekrar gönderme yaptıgımda çalışması gerekir
ama kilitlenince bir daha çalışmıyor...

teşekkürler

Tagli

Overflow biti bir kez 1 olduğunda seri iletişim modülü hata düzeltilene kadar kapanır. Çalışmaması normal.
Gökçe Tağlıoğlu