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;
)
)
/***********************************************/
# 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;
)
)