AT89S8252 SPI afbryde baseret transmission

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;

)

)

 
Ja, jeg har prøve en masse om UART med C i Keil, men det aldrig virker!!

 

Welcome to EDABoard.com

Sponsor

Back
Top