07-30-2009, 03:23 PM
Herkeze merhaba
rs232 ile uğraşırken hiç beklemediğim bir sorunla karşılaştım çözümünü 2 gündür uğraşmama ramen hala bulamadım.
devrem aşağıdaki gibidir.
[img]http://www.elektrotekno.com/userpix/15112_electronik_timer_1.jpg[/img]
baund rateleri 9600 olan 2 tane seri bilgi yollayan birim mevcut, hangisini dinleyeceğimi 74151 multiplexer ile seçiyorum ve pice giriyor. Proteusta devre sorunsuz çalışıyor.
Gerçek hayata geçtiğimde ise #int_rda interrupt'ını üretmediğini gördüm. Pic gelen bilgiyi göremiyor.
Denemek için max3232 li küçük bir prob yaptım picin RX bacağına deydirdiğimde bilgisayarda bütün bilgileri görebiliyorum yani bilgiler pice ulaşıyor.
18F4620 'yi 8Mhz kristal ve "4 x pll" aktif şekilde kullanıyorum program kısmı ise şu şekilde
rs232 ile uğraşırken hiç beklemediğim bir sorunla karşılaştım çözümünü 2 gündür uğraşmama ramen hala bulamadım.
devrem aşağıdaki gibidir.
[img]http://www.elektrotekno.com/userpix/15112_electronik_timer_1.jpg[/img]
baund rateleri 9600 olan 2 tane seri bilgi yollayan birim mevcut, hangisini dinleyeceğimi 74151 multiplexer ile seçiyorum ve pice giriyor. Proteusta devre sorunsuz çalışıyor.
Gerçek hayata geçtiğimde ise #int_rda interrupt'ını üretmediğini gördüm. Pic gelen bilgiyi göremiyor.
Denemek için max3232 li küçük bir prob yaptım picin RX bacağına deydirdiğimde bilgisayarda bütün bilgileri görebiliyorum yani bilgiler pice ulaşıyor.
18F4620 'yi 8Mhz kristal ve "4 x pll" aktif şekilde kullanıyorum program kısmı ise şu şekilde
Kod:
#include <18F4620.h>
#FUSES NOWDT,WDT128,H4,NOPROTECT,BROWNOUT,NOPUT,STVREN,NODEBUG,NOLVP,NOWRT,NOWRTB,NOWRT C,NOCPD,NOCPB,NOEBTR,NOEBTRB,CCP2B3
#device ADC=10
#use delay(clock=32Mhz,oscillator=8Mhz)
#use rs232(baud=9600, uart, parity=N, stop=1,bits=8)
#define FAST_GLCD
#include "HDM64GS12.c"
#include <MATH.H>
#include "graphics.c"
.
.
.
.
.
#INT_RDA
void SeriVeriAl(void)
{
veri=getc();
alll=true;
}
void main(void) // Ana program
{
set_tris_b(0xFF);
set_tris_e(0xFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1( T1_INTERNAL | T1_DIV_BY_1);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_2(T2_DIV_BY_4, 255,4);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_wdt(WDT_OFF);
setup_ccp1(CCP_OFF);
setup_ccp2(CCP_OFF);
clear_interrupt(INT_RDA);
enable_interrupts(INT_RDA);
disable_interrupts(INT_timer0);
enable_interrupts(GLOBAL);
setup_adc( ADC_CLOCK_INTERNAL );
setup_adc_ports( AN0_TO_AN2);
do{
if(alll){sprintf(dene3,"G");glcd_text57(15,8,dene3,1,ON);}
}while(TRUE); //Sonsuz Döngü
}
Bu şekilde seri porttan herhangi bir bytelık bilgi aldığında ekranda G yazması lazım. Ama Proteusta olmasına ramen gerçekte olmuyor.
bunun nedeni hakkında birkaçtane yorum yapabilirsek daha kolay çözebilirim.