F
freakkaito
Guest
Noriu siųsti duomenis AT89S51 nuo ATMEGA32 per SPI uosto, tai mane taip sunku, yra ten kas nors galėtų man padėti.
Aš atlikau šį kodą į iniciacijos AT89s51, bet nėra atsakinga ne visi.Mano AVR naudoti XTAL 4MHz ir AT89s naudoti 16MHz, ir mano perduoti laikrodis 1 MHz (1 / 4 AVR laikrodis arba 1 / 16 at89s laikrodis, tai ką jie parašė ant lapo).Aš naudoju WinAVR parengti ją.
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <avr/pgmspace.h>
# include <avr/io.h>
# include <avr/interrupt.h># include "global.h"
# include "lcd.h"
# define SPI_USEINT
LC targetInit (void);
void targetClear (void);
uint8_t spiTransferByte (uint8_t duomenis);
lakiųjų u08 spiTransferComplete;
void spiInit (void);int main (void)
(
# ifdef SPI_USEINT
Signalas (SIG_SPI)
(
spiTransferComplete = TRUE;
)
# endiflcd_init (LCD_DISP_ON);
spiInit ();
pradžia:
if (! targetInit ())
(
lcd_gotoxy (0,1);
lcd_puts ( "Target Klaida");delay1s ();
goto pradžia;
)
kitas
(
lcd_clrscr ();
lcd_puts ( "tikslinė OK");
)
targetClear ();
_delay_ms (100);
spiTransferByte (0xAA) / / rašyti 0xAA nukreipti
)
LC targetInit (tuščia)
(
spiTransferByte (0xac) / / Siųsti pirmasis baitas
spiTransferByte (0x53); / / Siųsti antrasis baitas
spiTransferByte (0) / / Siųsti 3. baitas
if (spiTransferByte (0) == 105) / / atsa turėtų būti 105 dešimtųjų arba 69 HEX
(
return (1);
)
kitas
(
return (0);
)
)
tuščia targetClear (tuščia)
(
spiTransferByte (0xac) / / target aiškus nurodymas
spiTransferByte (0x80);
spiTransferByte (0);
spiTransferByte (0);
)
uint8_t spiTransferByte (uint8_t duomenys)
(
# ifdef SPI_USEINT
spiTransferComplete = false;
outb (SPDR duomenys) / / Siųsti duomenis
while (! spiTransferComplete);
# else
outb (SPDR duomenys) / / Siųsti duomenis
while (! (INB (SPSR) & (1 <<SPIF))) / / laukti apdaila
# endif
grįžti INB (SPDR) / / get return duomenų
)tuščia spiInit (tuščia)
(Skaičius (PORTB, 7) / / set SCK hi
Skaičius (DDRB, 7) / / set SCK kaip produkcija
CBI (DDRB, 6); / / set Miso kaip pirkimo
Skaičius (DDRB, 5) / / set MOSI kaip produkcija
Skaičius (DDRB, 4) / / SS turi būti produkcija Meistras režimu dirbti/ / Setup SPI sąsaja:
Skaičius (SPCR, MSTR) / / kapitonas būdas
CBI (SPCR, SPR0) / / clock = f / 4
CBI (SPCR, SPR1);
CBI (SPCR, DORD) / / MSB pirmą
Skaičius (SPCR, SPĮ); / / Enable SPI
INB (SPSR);/ / Enable SPI pertraukti
Skaičius (SPCR, SPIE);
)
Mano diplay yra LCD 16x2.Prašome kai kūno help me ....
Aš atlikau šį kodą į iniciacijos AT89s51, bet nėra atsakinga ne visi.Mano AVR naudoti XTAL 4MHz ir AT89s naudoti 16MHz, ir mano perduoti laikrodis 1 MHz (1 / 4 AVR laikrodis arba 1 / 16 at89s laikrodis, tai ką jie parašė ant lapo).Aš naudoju WinAVR parengti ją.
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <avr/pgmspace.h>
# include <avr/io.h>
# include <avr/interrupt.h># include "global.h"
# include "lcd.h"
# define SPI_USEINT
LC targetInit (void);
void targetClear (void);
uint8_t spiTransferByte (uint8_t duomenis);
lakiųjų u08 spiTransferComplete;
void spiInit (void);int main (void)
(
# ifdef SPI_USEINT
Signalas (SIG_SPI)
(
spiTransferComplete = TRUE;
)
# endiflcd_init (LCD_DISP_ON);
spiInit ();
pradžia:
if (! targetInit ())
(
lcd_gotoxy (0,1);
lcd_puts ( "Target Klaida");delay1s ();
goto pradžia;
)
kitas
(
lcd_clrscr ();
lcd_puts ( "tikslinė OK");
)
targetClear ();
_delay_ms (100);
spiTransferByte (0xAA) / / rašyti 0xAA nukreipti
)
LC targetInit (tuščia)
(
spiTransferByte (0xac) / / Siųsti pirmasis baitas
spiTransferByte (0x53); / / Siųsti antrasis baitas
spiTransferByte (0) / / Siųsti 3. baitas
if (spiTransferByte (0) == 105) / / atsa turėtų būti 105 dešimtųjų arba 69 HEX
(
return (1);
)
kitas
(
return (0);
)
)
tuščia targetClear (tuščia)
(
spiTransferByte (0xac) / / target aiškus nurodymas
spiTransferByte (0x80);
spiTransferByte (0);
spiTransferByte (0);
)
uint8_t spiTransferByte (uint8_t duomenys)
(
# ifdef SPI_USEINT
spiTransferComplete = false;
outb (SPDR duomenys) / / Siųsti duomenis
while (! spiTransferComplete);
# else
outb (SPDR duomenys) / / Siųsti duomenis
while (! (INB (SPSR) & (1 <<SPIF))) / / laukti apdaila
# endif
grįžti INB (SPDR) / / get return duomenų
)tuščia spiInit (tuščia)
(Skaičius (PORTB, 7) / / set SCK hi
Skaičius (DDRB, 7) / / set SCK kaip produkcija
CBI (DDRB, 6); / / set Miso kaip pirkimo
Skaičius (DDRB, 5) / / set MOSI kaip produkcija
Skaičius (DDRB, 4) / / SS turi būti produkcija Meistras režimu dirbti/ / Setup SPI sąsaja:
Skaičius (SPCR, MSTR) / / kapitonas būdas
CBI (SPCR, SPR0) / / clock = f / 4
CBI (SPCR, SPR1);
CBI (SPCR, DORD) / / MSB pirmą
Skaičius (SPCR, SPĮ); / / Enable SPI
INB (SPSR);/ / Enable SPI pertraukti
Skaičius (SPCR, SPIE);
)
Mano diplay yra LCD 16x2.Prašome kai kūno help me ....