Ngắt trong UART

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • Knight_FlyCn
    Đệ tử 1 túi
    • Apr 2013
    • 17

    #1

    Ngắt trong UART

    [CODE] /* _CPUDIV_OSC1_PLL2_1L, // Divide clock by 2
    _FOSC_HS_1H, // Select High Speed (HS) oscillator
    _WDT_OFF_2H, // Watchdog Timer off
    MCLRE_ON_3H // Master Clear on
    */




    #include <RFD.h>
    #include "def_18f4620.c"
    #include "slave_1_tx_rx.h"


    #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=8)
    #define SPI_MODE_0 (SPI_L_TO_H | SPI_XMIT_L_TO_H)

    ///////////////////////////////////////////////////////////////////////////
    #ifndef FREQ
    #define FREQ 4000000 /// 4Mhz
    #define baud 9600
    #define spbrg_value (((FREQ/16)/baud)-1)

    ////////////////////////////////////////////////////////
    int StartFlag = 0;
    int StopFlag = 0;
    char array[12];
    char i = 0;
    ///////////////////////////////////////////////////////


    ///////////////////////////////////////////////////////////////////////////////
    void uart_init(void)
    {
    SPEN =1;
    SYNC = 1;
    BRGH = 1;
    SPBRG = spbrg_value;
    CREN =1;
    GIE =1;
    PEIE =1;
    RCIE =1;
    }


    void interrupt_RXR()
    {
    RCIF = 0;
    if(RCREG == 0X02)
    {
    StartFlag = 1;
    }
    if(StartFlag == 1 && RCREG != 0X03)
    {
    array[i] = RCREG;
    i++;
    }
    if(RCREG == 0X03)
    {
    array[i] = '\0';
    StopFlag = 1;
    i = 0;
    }
    }
    ///////////////////////////////////////////////////////////////////////////////

    void main()
    {

    /////////////////////////////////////////////////////////////
    TRISC0 = TRISD3 = 0;
    TRISC7 = 1;
    TRISC6 = 0;

    uart_init();
    while(1)
    {
    if(StopFlag == 1)
    {
    StopFlag == 0;
    StartFlag == 0;
    for(i=0; i <=13; i++)
    {
    array[i]=0;

    }
    i=0;
    }

    }

    }

    [\CODE]

    Mọi người cho mình hỏi mình viết thế này thì ngắt uart có hoạt động ko vậy. Mình muốn đọc dữ liệu từ chân RX lưu vào array.
Working...