N
NOORPURI
Guest
Jeg forsøger SPI og UART transmission med kombineret afbryder.I simulering synes det 100 # ret, men i det virkelige it doesn't work.
/***********************************************/
# include <AT898252.H>
unsigned char UART_RX = 0;
unsigned char SPI_RX = 0;
unsigned char SPI_RX_FLUSH = 0;
bit UART_TRANSMIT = 0;
bit SPI_TRANSMIT = 0;
bit SPI_RECV = 0;void UART_SPI_ISR (void) afbryder 4
(
if (DI)
(UART_RX = SBUF; DI = 0
if (TI) (TI = 0; UART_TRANSMIT = 0
/*------------- SPI ISR DEL --------------- * /
if (SPSR == 0x80) / * læse og klar SPI status register * /
(
if (SPI_RECV == 1)
(
SPI_RX = SPDR;
SPI_RECV = 0
if (SPI_TRANSMIT == 1)
(
SPI_TRANSMIT = 0;
SPI_RX_FLUSH = SPDR;
SS = 1
/ * sæt software flag * /
)
)
void UART_SPI_INIT ()
(
/*--- Initialiser den serielle port .----------*/
TMOD = 0x20;
PCON = PCON | 0x80;
Th1 = 0xFF; / / BAUD RATE 57.600
TR1 = 1;
SCON = 0x50;
/*--------- Initialiser SPI port ------ * /
SPCR = 0xD0 / * 11.010.000 * /
ES = 1;
EA = 1;
)
/*----------------------------------------------*/
//--------------------------------------------
/ / UART SEND CHAR FUNCTION
//--------------------------------------------
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 FUNCTION
//--------------------------------------------
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;
return RECVD;
)
)/*------------------------------------------------ -----------------------------
-------------------------------------------------- ---------------------------*/
void main (void)
(
UART_SPI_INIT ();
while (1)
(
SEND_CHAR_UART (0x55); / / Send 'U' fra UART
SEND_CHAR_SPI (0x55); / / Send 'U' fra SPI P1_0 = ~ P1_0;
)
)
/***********************************************/
# include <AT898252.H>
unsigned char UART_RX = 0;
unsigned char SPI_RX = 0;
unsigned char SPI_RX_FLUSH = 0;
bit UART_TRANSMIT = 0;
bit SPI_TRANSMIT = 0;
bit SPI_RECV = 0;void UART_SPI_ISR (void) afbryder 4
(
if (DI)
(UART_RX = SBUF; DI = 0
if (TI) (TI = 0; UART_TRANSMIT = 0
/*------------- SPI ISR DEL --------------- * /
if (SPSR == 0x80) / * læse og klar SPI status register * /
(
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 ()
(
/*--- Initialiser den serielle port .----------*/
TMOD = 0x20;
PCON = PCON | 0x80;
Th1 = 0xFF; / / BAUD RATE 57.600
TR1 = 1;
SCON = 0x50;
/*--------- Initialiser SPI port ------ * /
SPCR = 0xD0 / * 11.010.000 * /
ES = 1;
EA = 1;
)
/*----------------------------------------------*/
//--------------------------------------------
/ / UART SEND CHAR FUNCTION
//--------------------------------------------
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 FUNCTION
//--------------------------------------------
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;
return RECVD;
)
)/*------------------------------------------------ -----------------------------
-------------------------------------------------- ---------------------------*/
void main (void)
(
UART_SPI_INIT ();
while (1)
(
SEND_CHAR_UART (0x55); / / Send 'U' fra UART
SEND_CHAR_SPI (0x55); / / Send 'U' fra SPI P1_0 = ~ P1_0;
)
)