AT89S8252 SPI, bazate pe transmiterea întrerupe

N

NOORPURI

Guest
Am încercat SPI şi transmiterea UART folosind combinate întrerupere.În simulare se pare 100 # dreptul, dar în viaţa reală nu funcţionează.

/***********************************************/
# Include <AT898252.H>

char UART_RX nesemnat = 0;
char SPI_RX nesemnat = 0;
char SPI_RX_FLUSH nesemnat = 0;
bit UART_TRANSMIT = 0;
bit SPI_TRANSMIT = 0;
SPI_RECV bit = 0;UART_SPI_ISR void (void) întrerupă 4
(
în cazul în care (RI)
(UART_RX = SBUF; RI = 0;)

în cazul în care (TI) (TI = 0; UART_TRANSMIT = 0;)
/*------------- SPI ISR --------------- PARTEA * /
în cazul în care (SPSR == 0x80) / * citesc clar şi SPI statutul registrul * /
(
în cazul în care (SPI_RECV == 1)
(
SPI_RX = SPDR;
SPI_RECV = 0;)

în cazul în care (SPI_TRANSMIT == 1)
(
SPI_TRANSMIT = 0;
SPI_RX_FLUSH = SPDR;
PS = 1;) / * software stabilite de pavilion * /
)

)

UART_SPI_INIT nule ()
(
/*--- Iniţializaţi portul serial .----------*/

TMOD = 0x20;
PCON = PCON | 0x80;
TH1 = 0xFF; / / viteza transmisie 57600
TR1 = 1;
SCON = 0x50;
/*--------- Iniţializaţi SPI portul ------ * /

SPCR = 0xD0 / * 11010000 * /

ES = 1;
EA = 1;
)

/*----------------------------------------------*/
//--------------------------------------------
/ / UART TRIMITE FUNCŢIA CHAR
//--------------------------------------------
nule SEND_CHAR_UART (char SND nesemnate)
(

în timp ce ((SPI_TRANSMIT) | | (SPI_RECV) | | (UART_TRANSMIT));
în cazul în care (UART_TRANSMIT == 0)
(
UART_TRANSMIT = 1;
SBUF = SND;
)

)
/*-------------------------------------------*/
//--------------------------------------------
nule SEND_CHAR_SPI (char SND nesemnate)
(

în timp ce ((SPI_TRANSMIT) | | (SPI_RECV) | | (UART_TRANSMIT));
în cazul în care (SPI_TRANSMIT == 0)
(
SPI_TRANSMIT = 1;
SPDR = SND;
)

)

//--------------------------------------------
/ / Recv SPI FUNCŢIA CHAR
//--------------------------------------------
nesemnat RECV_CHAR_SPI char ()
(
char RECVD nesemnat = 0;

în timp ce ((SPI_TRANSMIT) | | (SPI_RECV) | | (UART_TRANSMIT));

SPDR = 0xFF;
SPI_RECV = 1;

în timp ce ((SPI_TRANSMIT) | | (SPI_RECV) | | (UART_TRANSMIT));
în cazul în care (SPI_RECV == 0)
(
RECVD = SPI_RX;
întoarcere RECVD;
)
)/*------------------------------------------------ -----------------------------
-------------------------------------------------- ---------------------------*/
void main (void)
(

UART_SPI_INIT ();

în timp ce (1)
(
SEND_CHAR_UART (0x55); / / TRIMITE "U" prin UART
SEND_CHAR_SPI (0x55); / / TRIMITE "U" de către SPI P1_0 = ~ P1_0;

)

)

 
Da, am încerca o mult pe UART cu C, în Keil, dar niciodată nu funcţionează!!

 

Welcome to EDABoard.com

Sponsor

Back
Top