PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : مشکل با وقفه پورتB در 16f877



saeed210
03-08-2013, 13:53
سلام روزگارتون خوش
من با این وقفه روی 4تا بیت بالایی پورت B مشکل دارم بعد از دفعه اول که وقفه اتفاق می افته بعدش دیگه مرتب وقفه اتفاق می افته یعنی مثل اینکه برنامه وقفه رو توی یک while بینهایت بندازی البته من توی پروتئوس امتحان کردم اینجوری بود و پروگرم نکردم
هم با 16f877 مشکل دارم هم با 18f452
با ccs هم می نویسم
اینم برنامه

#include "E:\saftware\PICC\Examples\test\portb int18f.h"

#int_RB
void RB_isr(void)
{
CLEAR_INTERRUPT(INT_RB);
output_toggle(PIN_D1);
}



void main()
{

setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
enable_interrupts(INT_RB);
enable_interrupts(GLOBAL);
set_tris_d(0x00);
set_tris_b(0xff);

while(true);
}

saeed210
03-08-2013, 15:55
سلام مجدد
حل شد دوستان توی دیتاشیتش نوشته بود که بعد از وقفه اول باید پورت B خوانده بشه بعدش مقدار بیت RBIFتوی رجیستر INTCON که همون بیت flag پورتB هست پاک بشه یعنی اینجوری

#include "E:\saftware\PICC\Examples\test\portb int18f.h"

int key;

#int_RB
void RB_isr(void)
{
key=input_b();
CLEAR_INTERRUPT(INT_RB);
output_toggle(PIN_D1);
}



void main()
{

setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
enable_interrupts(INT_RB);
enable_interrupts(GLOBAL);
set_tris_d(0x00);
set_tris_b(0xff);

while(true);
}

zoz_zozm
03-08-2013, 21:23
این خوبه که راه حل مشکلتون رو پیدا کردین و تو سایت هم قرار دادین تا بقیه استفاده کنن.:wink:
منم قبلنا با این برخورد کرده بودم ولی پستتون رو ندیدم که جواب بدم.:sa: