Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
11.02.2011, 12:54
|
#1
|
Прохожий
Регистрация: 26.04.2010
Сообщений: 7
Сказал спасибо: 2
Сказали Спасибо 1 раз в 1 сообщении
|
Подключение AT90S8515 с помощью SPI
Пытаюсь подключить два микроконтроллера 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".
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:35.
|
|