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.
|