12f629 un include dosyasında şöyle yazıyor....
////////////////////////////////////////////////////////////////// INT
// Interrupt Functions: ENABLE_INTERRUPTS(), DISABLE_INTERRUPTS(),
// EXT_INT_EDGE()
//
// Constants used in EXT_INT_EDGE() are:
#define L_TO_H 0x40
#define H_TO_L 0
// Constants used in ENABLE/DISABLE_INTERRUPTS() are:
#define GLOBAL 0x0BC0
#define INT_RTCC 0x0B20
#define INT_EXT 0x0B10
#define INT_TIMER1 0x8C01
#define INT_TIMER0 0x0B20
#define INT_EEPROM 0x8C80
#define INT_COMP 0x8C08
#define INT_RA 0x0B08
#define INT_RA0 0x010B08
#define INT_RA1 0x020B08
#define INT_RA2 0x040B08
#define INT_RA3 0x080B08
#define INT_RA4 0x100B08
#define INT_RA5 0x200B08
#list
fakat ben normal interrupt konumuymuş gibi programın içine şunları yazdığımda hata veriyor... neden?
#int_RA2
void IRAl() {
IRMode=1;
DISABLE_INTERRUPTS(INT_RA2);
ENABLE_INTERRUPTS(INT_TIMER1);
setup_timer_1 (T1_INTERVAL | T1_DIV_BY_8);
.
.
.
}
main de inerruptları kurarken ise :
ENABLE_INTERRUPTS(INT_RA2); // RA2 tsop interrupt pin
EXT_INT_EDGE(H_TO_L) // int şartı
yani benim burada demek istediğim :
ra2 bacağı + dan - ye düştüğünde program #int_ra2 yazdığım yere konumlansın idi....
yoksa benmi yanlış biliyorum bu işi???
yardımcı olursanız sevinirim arkadaşlar....
[/code]
Dostum 12f629 un bütün bacaklarında interrupt on port change özelliği var asm de hangi portların bu özelliği taşıyacağı IOCB registerinden belirlenir.CCS de bu interrupt ı kullanabilmek için belkide bu registeri düzenlemek gerekiyordur elle.Ve ayrıca option registerininde 3. bitinin de aktif edilmesi gerekmektedir.
Alıntı yapılan: SpeedyXfakat ben normal interrupt konumuymuş gibi programın içine şunları yazdığımda hata veriyor... neden?
Soruya soruyla cevap vermiş gibi olacağım ama hata kodu nedir? Belki
mmengi'nın söylediği olmalı. O yüzden bunu denedikten sonra yine hata veriyorsa açıklamaları ile nakledersen mutlaka çözüm bulunacaktır.
Başarılar...
hata : is not valid interrupt vector idi.
ben onu düzelttim ve derlemesini başardım.
program başında hiç değişken tanımlamamıştım. bir değişken tanımlayınca nedense düzeldi.... derleyicinin sorunu olduğunu düşünüyorum...
fakat bu seferde
proteus ta çalıştıramadım devreyi...
simülasyon yapamadan hata veriyor...
hata ise 12c6x.dll hatalı diyor.
hatalı olan ya benim programım, yada proteusun söz konusu dll dosyası...
hiç bilemiyorum.
programdaki interrupt hatası hala devam ediyor olabilir.... ;)
en iyisi olayı realde denemek diye düşünmeye başladım.
acaba proteusun son versiyonunu nerden indirebilirim? bende 6.2 var
629 ve 818 yok.... demo olan 6.6 da denedim devreyi... çalışmadı...
ilgilendiğiniz için çok teşekkür ederim..