N
NOORPURI
Guest
Estic intentant SCI i la transmissió UART usant combinat interrupció.A la simulació sembla dret # 100, però en real no funciona.
/***********************************************/
# Include <AT898252.H>
unsigned char UART_RX = 0;
unsigned char SPI_RX = 0;
unsigned char SPI_RX_FLUSH = 0;
poc UART_TRANSMIT = 0;
poc SPI_TRANSMIT = 0;
poc SPI_RECV = 0;UART_SPI_ISR (void) interrompre 4
(
if (RI)
= (UART_RX SBUF; RI = 0
if (TI) (TI = 0; UART_TRANSMIT = 0
/*------------- --------------- SPI ISR PART * /
if (SCRS == 0x80) / * llegir i clar SPI situació registre * /
(
if (SPI_RECV == 1)
(
SPI_RX = SPDR;
SPI_RECV = 0
if (SPI_TRANSMIT == 1)
(
SPI_TRANSMIT = 0;
SPI_RX_FLUSH = SPDR;
SS = 1
/ * Flag Programari establir * /
)
)
void UART_SPI_INIT ()
(
/*--- Inicialitzar el port sèrie .----------*/
TMOD = 0x20;
PCON = PCON | 0x80;
TH1 = 0xFF; / / VELOCITAT DE TRANSMISSIÓ 57.600
TR1 = 1;
Scones = 0x50;
/*--------- Inicialitzar el port SPI ------ * /
SPCR = 0xD0 / * 11.010.000 * /
ES = 1;
EA = 1;
)
/*----------------------------------------------*/
//--------------------------------------------
/ / UART ENVIAR CHAR FUNCIÓ
//--------------------------------------------
void SEND_CHAR_UART (unsigned char SND)
(
while ((SPI_TRANSMIT) | | (SPI_RECV) | | (UART_TRANSMIT));
if (UART_TRANSMIT == 0)
(
UART_TRANSMIT = 1;
SBUF = SND;
)
)
/*-------------------------------------------*/
//--------------------------------------------
void SEND_CHAR_SPI (unsigned char SND)
(
while ((SPI_TRANSMIT) | | (SPI_RECV) | | (UART_TRANSMIT));
if (SPI_TRANSMIT == 0)
(
SPI_TRANSMIT = 1;
SPDR = SND;
)
)
//--------------------------------------------
/ / SPI recv CHAR FUNCIÓ
//--------------------------------------------
unsigned char RECV_CHAR_SPI ()
(
unsigned char RECVD = 0;
while ((SPI_TRANSMIT) | | (SPI_RECV) | | (UART_TRANSMIT));
SPDR = 0xFF;
SPI_RECV = 1;
while ((SPI_TRANSMIT) | | (SPI_RECV) | | (UART_TRANSMIT)),
if (SPI_RECV == 0)
(
RECVD = SPI_RX;
tornar RECVD;
)
)/*------------------------------------------------ -----------------------------
-------------------------------------------------- ---------------------------*/
void main (void)
(
UART_SPI_INIT ();
while (1)
(SEND_CHAR_UART(0x55); // SEND 'U' by UART SEND_CHAR_SPI (0x55); / / Enviar ', per U' SPI P1_0 = ~ P1_0;
)
)
/***********************************************/
# Include <AT898252.H>
unsigned char UART_RX = 0;
unsigned char SPI_RX = 0;
unsigned char SPI_RX_FLUSH = 0;
poc UART_TRANSMIT = 0;
poc SPI_TRANSMIT = 0;
poc SPI_RECV = 0;UART_SPI_ISR (void) interrompre 4
(
if (RI)
= (UART_RX SBUF; RI = 0
if (TI) (TI = 0; UART_TRANSMIT = 0
/*------------- --------------- SPI ISR PART * /
if (SCRS == 0x80) / * llegir i clar SPI situació registre * /
(
if (SPI_RECV == 1)
(
SPI_RX = SPDR;
SPI_RECV = 0
if (SPI_TRANSMIT == 1)
(
SPI_TRANSMIT = 0;
SPI_RX_FLUSH = SPDR;
SS = 1
)
)
void UART_SPI_INIT ()
(
/*--- Inicialitzar el port sèrie .----------*/
TMOD = 0x20;
PCON = PCON | 0x80;
TH1 = 0xFF; / / VELOCITAT DE TRANSMISSIÓ 57.600
TR1 = 1;
Scones = 0x50;
/*--------- Inicialitzar el port SPI ------ * /
SPCR = 0xD0 / * 11.010.000 * /
ES = 1;
EA = 1;
)
/*----------------------------------------------*/
//--------------------------------------------
/ / UART ENVIAR CHAR FUNCIÓ
//--------------------------------------------
void SEND_CHAR_UART (unsigned char SND)
(
while ((SPI_TRANSMIT) | | (SPI_RECV) | | (UART_TRANSMIT));
if (UART_TRANSMIT == 0)
(
UART_TRANSMIT = 1;
SBUF = SND;
)
)
/*-------------------------------------------*/
//--------------------------------------------
void SEND_CHAR_SPI (unsigned char SND)
(
while ((SPI_TRANSMIT) | | (SPI_RECV) | | (UART_TRANSMIT));
if (SPI_TRANSMIT == 0)
(
SPI_TRANSMIT = 1;
SPDR = SND;
)
)
//--------------------------------------------
/ / SPI recv CHAR FUNCIÓ
//--------------------------------------------
unsigned char RECV_CHAR_SPI ()
(
unsigned char RECVD = 0;
while ((SPI_TRANSMIT) | | (SPI_RECV) | | (UART_TRANSMIT));
SPDR = 0xFF;
SPI_RECV = 1;
while ((SPI_TRANSMIT) | | (SPI_RECV) | | (UART_TRANSMIT)),
if (SPI_RECV == 0)
(
RECVD = SPI_RX;
tornar RECVD;
)
)/*------------------------------------------------ -----------------------------
-------------------------------------------------- ---------------------------*/
void main (void)
(
UART_SPI_INIT ();
while (1)
(SEND_CHAR_UART(0x55); // SEND 'U' by UART SEND_CHAR_SPI (0x55); / / Enviar ', per U' SPI P1_0 = ~ P1_0;
)
)