Merhaba arkadaşlar kolay gelsin,
16F877A için yazdığım programı 18F452'ye çeviriyorum. Pin dizilimlerinde kesmelerde herhangi bir problemim yok zaten hemen hemen hiç bir pini ve donanımı da kullanmıyorum. Fakat 16F877A'da sorunsuz veri alıp gönderebildiğim int_rda kesmesi include kodunu 18F452 olarak değiştirdiğimde çalışmıyor. Hem proteusta hem de fiziksel devrede aynı sorun var. Acaba kesme tanımlarken iki pic arasında herhangi bir farklılık mı var ?
Main içinde printf kullanabiliyorum, sorun kesme oluşmasında.
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_DIV_32);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);
set_tris_a(0x01);
set_tris_d(0x00);
enable_interrupts(GLOBAL);
enable_interrupts(INT_RDA); satırı while döngüsü içinde.
Bu haliyle 16F877A'da çalışıyor.
#int_RDA
void RDA_isr()
{
disable_interrupts(int_rda);
gets(ch);
x = atoi (ch);
x-=1;
selected=1;
}
disable_interrupts(int_rda);
Bu nerde aktif oluyor
asıl işlemlerin yapıldığı while(1) döngüsünün ilk satırında.
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_DIV_32);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);
set_tris_a(0x01);
set_tris_d(0x00);
enable_interrupts(int_rda);
enable_interrupts(GLOBAL);
#int_RDA
void RDA_isr()
{
disable_interrupts(int_rda);
gets(ch);
x = atoi (ch);
x-=1;
selected=1;
enable_interrupts(int_rda);
}
cyclone
Kesme bloğu sonuna enable_interrupts(int_rda); koymasam bile en azından blok içindeki komutları 1 kere olsun icra etmesi gerekmez mi?
Yine de verdiğiniz şekilde uyguladım. Sorun devam ediyor. Main döngüsü içine koyduğum printfler ve diğer işlevler çalışıyor fakat kesmeye hiç uğramıyor.
tam kod verin bakalım
buyuk ihtimal error vardir.
#use rs232(.........,ERRORS)
kullanin buyuk ihtimal sorun gidecektir.
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,ERRORS)
şeklinde düzenledim. herhangi bir değişiklik olmadı.
Kodu sadece hatayı görebileceğimiz şekilde özetledim. 16F877A şeklinde derleyip 877A'da çalıştığımda Virtual Terminal'de "Başla..." yazdıktan sonra klavyeden girdiğim sayının bir eksiğini ekranda görebiliyorum. Fakat 18F452 şeklinde derleyip 452 picde çalıştığımda sadece "Başla..." yazısını görebiliyorum. Kesme bloğuna yine uğramıyor.
#include <18F452.h>
//#DEVICE ADC=8
#include <stdlib.h> /* atoi */
#FUSES NOWDT,HS,NOPROTECT,NOBROWNOUT,NOPUT,NODEBUG,NOCPD,NOLVP,NOWRT
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,ERRORS)
char ch[20];
int1 selected,found=0;
unsigned int8 type,i,k=0,basamak;
#int_RDA
void RDA_isr()
{
disable_interrupts(int_rda);
gets(ch);
type = atoi (ch);
type-=1;
selected=1;
printf("Sayi: ");
printf("%d",type);
enable_interrupts(int_rda);
}
void main()
{
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_DIV_32);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);
set_tris_a(0x01);
set_tris_d(0x00);
enable_interrupts(int_rda);
enable_interrupts(GLOBAL);
set_adc_channel(0);
delay_us(100);
printf("Basla...\r\n");
while(1);
}
rx bacagını 1k direncle +5 bağlayınız.
Yine olmadı... Şaka gibi.
Sizin simule etme şansınız var mı acaba?
18F452 header dosyamda mı sorun var, derleyicim mi bozuyor hex dosyayı... Nedir anlamadım.
main dongusunde
while(1);
kısmını
while(1)
{
}
şeklinde yaparmısın.
İkisi de aynı şey değil mi ?
Yine de yaptım tabi. Sorun devam ediyor.
Bu kod çalışıyor zaten kodda herhangi bir sıkıntı yok. Ama 877A'dan 452'ye geçerken bir şeyler oluyor.
Simule ettiğiniz ISIS ve CCs C dosyalarını ekler misiniz. Böylece sorun sizde mi Yazılımda mı daha iyi anlaşılır.
Buyrun; http://www.speedyshare.com/HRnsK/Tablo.rar (http://www.speedyshare.com/HRnsK/Tablo.rar)
Program çalışıyor.
Edit:Resim Eklendi
(http://s1306.hizliresim.com/1b/5/ntycs.png)
Proteus 7.8 SP2 (Build 10468) ve CCS C'yi de PCWHD 4.104 kullanıyorum.
Win 7 64 bit işletim sistemim.
Proteus'da sorun yaşıyorum desem pici programlayıp karta taktığımda da çalışmıyor.
Hex dosyayı oluştururken sorun çıkıyor desem sizde çalışıyor?
İki sorum var.
1. programda "Basla..." yazısını görmeniz dışında sayı girdiğinizde Virtual Terminal'de sayının bir eksiğini gördünüz mü?
2. Gördüyseniz programı derlemeden direk benim gönderdiğim şekilde mi çalıştırdınız?
Çok teşekkür ederim şimdiden.
Edit: Evet resmi gördüm. Sevinsem mi üzülsem mi...
Virtual Terminalde "Echo Typed Characters" İşaretli mi? Değilse İşaretleyin..
@Nedenler;
Sizin verdiğiniz Hex denedim bende de sizdeki gibi calışmadı.
Yeniden derlediğimde ise çalıştı. ilginc durum.
Kullandıgım derleyici versiyonu.
CCS PCH C Compiler, Version 4.137, 65420 05-Jun-13 21:14
Derlediğim hex denermisin bakalım sende nasıl davranacak.
http://s3.dosya.tc/server6/VKcTOw/table.rar.html (http://s3.dosya.tc/server6/VKcTOw/table.rar.html)
M_B,
Evet işte tam olarak bu. Gönderdiğiniz hex dosyayı çalıştırdım benimki ise "Echo Typed Characters" işaretli olmasına rağmen çalışmıyor. Sanırım CCS C sürüm veya Win 7 uyumsuzluğuyla alakalı. En azından sorunu bulduk. Teşekkür ederim herkese hemen ilgileniyorum.
Evet kesinlikle tespit ettiğiniz gibi arkadaşın ilk gönderdiği çalışmıyor bende yenide derledim çalıştı.
S.A.
Sn. Arkadaşlar ikisisndede üst versiyonlara çıkın.
hocam sizde varsa upload edin
Alıntı yapılan: cyclone - 07 Haziran 2013, 08:38:42
hocam sizde varsa upload edin
;D ;D ;D
bende buradan indirdim.
necektik bu derleyicilerden....
CCS C nin sitesinden
Demo olarak 5.005d indirdim. İdesi değişmiş ve daha bir renklenme gelmiş.
bunun kureği var mıdır?
yakında çıkar en iyisi lisans almak