Подключение AT90S8515 с помощью SPI

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Prevan
Родился
Сообщения: 13
Зарегистрирован: Пт июн 11, 2010 16:44:07

Подключение AT90S8515 с помощью SPI

Сообщение Prevan »

Пытаюсь подключить два микроконтроллера AT90S8515 по интерфейсу SPI. Каждый МК имеет задатчики порта D (ввод данных) и индикацию порта С (вывод данных). Замысел программы предполагает при изменении задатчиков первого МК вывод этих изменений на второй МК и наоборот. При запуске программы PROTEUS выдаёт предупреждение: "PC is out of ROM space" (счётчик команд за пределами памяти). При запуске этой же программы, но с МК AT90S8535 программа работает согласно замыслу, без ошибок и предупреждений. Может кто-нибудь подскажет в чем ошибка.

Содержание кода программы первого МК (Master):

Код: Выделить всё

.include "8515def.inc"
rjmp RESET   ; Переход к метке Reset
rjmp SPI_STC ; Переход к метке SPI_STC

reset:
ldi r16,(1<<PB4)+(1<<PB5)+(1<<PB7)
out ddrb,r16	;mosi, SS и sck входы

ldi r16,255
out portd,r16	;Подключаем выводы порта D к шине +5В через подтягивающие резисторы
out ddrc,r16	;Порт С на вывод

ldi r16,(1<<spie)+(1<<spe)+(1<<mstr)
out spcr,r16	;spi включен, spi прерывания, режим master

in r16,pind	;копируем данные
out spdr,r16	;в регистр spdr SPI

ldi r16,high(RAMEND)
out SPH,r16 	; инициализация указателя стека в конце ОЗУ
ldi r16,low(RAMEND)
out SPL,r16
sei 			;Разрешение прерываний

ldi r16,(1<<PB4); ss->1 
out portb,r16

ldi r16,(1<<spie)+(1<<spe)+(1<<mstr)
out spcr,r16	; режим master

main:		;Главная программа
inc r17
cpi r17,255
breq spi_transmit
rjmp main	

SPI_STC:

in r16,spdr	; Копирование и вывод принятых данных
out portc,r16

reti

spi_transmit:
ldi r17,0

in r16,pind	;Копируем в регистр spdr состояние выводов порта D
out spdr,r16

ldi r16,(0<<PB4)
out portb,r16	;ss pin->0

rjmp main
Содержание кода программы второго МК (Slave):

Код: Выделить всё

.include "8515def.inc"
rjmp RESET   ; Переход к метке Reset
rjmp SPI_STC ; Переход к метке SPI_STC

reset:
ldi r16,(1<<pb6)
out ddrb,r16	;miso выход

ldi r16,(1<<pb6)
out portb,r16	;ss подключаем к шине +5 В

ldi r16,255
out portd,r16	;порт D подключаем к шине +5 В

ldi r16,255
out ddrc,r16	;Порт С на вывод

ldi r16,(1<<spie)+(1<<spe)
out spcr,r16	;spi включен и прерывание spi

ldi r16,high(RAMEND)
out SPH,r16 	; Инициализация указателя стека в конце ОЗУ
ldi r16,low(RAMEND)
out SPL,r16
sei 			; Разрешены прерывания

main:
rjmp main		; Главная программа

SPI_STC:

in r16,spdr		;читаем содержание регистра spdr
out portc,r16		;и выводим его на индикацию

in R16,PIND		;читаем значение порта D
out spdr,r16		;и копируем их в регистр spdr

ldi r16,(1<<spie)+(1<<spe)
out spcr,r16	;spi включен и прерывание spi

reti
В прилагаемых файлах схема подключения "Схема.jpg" и проект протеуса "8515.rar".
Схема.JPG
(60.22 КБ) 650 скачиваний
8515.rar
(40.09 КБ) 170 скачиваний
Реклама
Murav
Опытный кот
Сообщения: 877
Зарегистрирован: Чт фев 18, 2010 13:51:56

Re: Подключение AT90S8515 с помощью SPI

Сообщение Murav »

Prevan писал(а):При запуске программы PROTEUS выдаёт предупреждение: "PC is out of ROM space" (счётчик команд за пределами памяти).
В протеусе есть ошибка из-за которой он в 8-килобайтных МК AVR не может обрабатывать rjmp дальше половины размера памяти. Возможно в более новых версиях эту ошибку поправили.
Реклама
Prevan
Родился
Сообщения: 13
Зарегистрирован: Пт июн 11, 2010 16:44:07

Re: Подключение AT90S8515 с помощью SPI

Сообщение Prevan »

Murav писал(а): В протеусе есть ошибка из-за которой он в 8-килобайтных МК AVR не может обрабатывать rjmp дальше половины размера памяти. Возможно в более новых версиях эту ошибку поправили.
МК 8535 тоже 8-килобайтный, но с ним программа работает
Murav
Опытный кот
Сообщения: 877
Зарегистрирован: Чт фев 18, 2010 13:51:56

Re: Подключение AT90S8515 с помощью SPI

Сообщение Murav »

В нём размер прошивки скорее всего меньше получился.
Реклама
Эиком - электронные компоненты и радиодетали
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»