Ngắt ngoài pic 16f887

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • 113vina
    Nhập môn đệ tử
    • Dec 2009
    • 1

    #1

    Ngắt ngoài pic 16f887

    EM CÓ VẤN ĐỀ THẾ NÀY MONG CÁC BÁC TRỢ GIÚP Ạ:
    EM DÙNG PIC 16F887, KHI EM DÙNG NGẮT NGOÀI RB0, THÌ MẠCH CHẠY BÌNH THƯỜNG, KHI EM DÙNG NGẮT PORTB(RB4-RB7) CŨNG CHẠY BÌNH THƯỜNG, NHƯNG KHI EM DÙNG CẢ NGẮT CHÂN RB0 VÀ PORTB(RB0-RB7) THÌ TRƯƠNG TRÌNH CHẠY BỊ SAI

    TRƯƠNG TRÌNH ĐÂY Ạ

    #include <16F887.h>
    #device adc=8

    #FUSES NOWDT //No Watch Dog Timer
    #FUSES HS //High speed Osc (> 4mhz)
    #FUSES NOPUT //No Power Up Timer
    #FUSES NOMCLR //Master Clear pin used for I/O
    #FUSES NOPROTECT //Code not protected from reading
    #FUSES NOCPD //No EE protection
    #FUSES NOBROWNOUT //No brownout reset
    #FUSES NOIESO //Internal External Switch Over mode disabled
    #FUSES NOFCMEN //Fail-safe clock monitor disabled
    #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
    #FUSES NODEBUG //No Debug mode for ICD
    #FUSES NOWRT //Program memory not write protected
    #FUSES BORV40 //Brownout reset at 4.0V

    #byte CoNgatRB=6

    #use delay(crystal=20000000)
    #use FIXED_IO( A_outputs=PIN_A5,PIN_A4,PIN_A3,PIN_A2,PIN_A1 )
    #use FIXED_IO( B_outputs=PIN_B3,PIN_B2,PIN_B1 )
    #use FIXED_IO( C_outputs=PIN_C6,PIN_C5,PIN_C4,PIN_C3,PIN_C2,PIN_C 1,PIN_C0 )
    #use FIXED_IO( D_outputs=PIN_D7,PIN_D6,PIN_D5,PIN_D4,PIN_D3,PIN_D 2,PIN_D1,PIN_D0 )
    #use FIXED_IO( E_outputs=PIN_E2,PIN_E0 )

    int8 uv,light;

    #INT_RB
    void RB_isr(void)
    {
    int8 a;
    if(!input(pin_b5))
    {
    while(!input(pin_b5)){}
    light++;
    if(light>1) light=0;
    }
    a = CoNgatRB;
    clear_interrupt(INT_RB);
    }

    #INT_EXT
    void EXT_isr(void)
    {
    uv++;
    if(uv>1)
    {
    uv=0;
    }
    }

    #INT_TIMER0
    void TIMER0_isr(void)
    {

    }

    void main()
    {
    setup_adc_ports(sAN0);
    setup_adc(ADC_CLOCK_DIV_2);
    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256|RTCC_8_bi t); //13.1 ms overflow
    setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); //13.1 ms overflow
    setup_timer_2(T2_DIV_BY_1,0,1); //0.2 us overflow, 0.2 us interrupt

    clear_interrupt(INT_RB);
    enable_interrupts(INT_RB4);
    enable_interrupts(INT_RB5);
    enable_interrupts(INT_RB6);
    enable_interrupts(INT_RB7);

    enable_interrupts(INT_EXT);
    ext_int_edge( L_TO_H );
    enable_interrupts(INT_TIMER0);
    enable_interrupts(GLOBAL);
    uv=0;light=0; output_low(pin_C5);output_low(pin_C6);
    while(TRUE)
    {
    if(uv==1) output_high(pin_C6);
    else output_low(pin_C6);
    output_d(uv);
    if(light==1) output_high(pin_C5);
    else output_low(pin_C5);
    output_d(light);
    }

    }

    CÁC BÁC XEM TRỢ GIÚP EM VỚI Ạ, EM CẢM ƠN NHIỀU
Working...