Без описания |
Поиск в теме | Версия для печати |
ilnur888 |
Отправлено: 11 Апреля, 2011 - 13:41:33
|
Маршал
Сообщений всего: 103
Дата рег-ции: Окт. 2010
|
Всем добрый день!
Прошу помогите, немогу понять в чем дело, почему код не работает так как надо.
Код для MK1 в режиме Master:
CODE:;=======================================================================
;Autor: Ilnur 2011
;Project: Mega8 работа с SPI в режиме Master
;Name: SPImega8Master
;=======================================================================
.device ATmega8
.include "m8def.inc"
.list
.def temp=r16
.def data=r17
.org $0
rjmp init
INIT: ;стек
ldi temp,high(RAMEND)
out SPH,temp
ldi temp,low(RAMEND)
out SPL,temp
;порты
ldi temp,$00
out DDRD,temp
ldi temp,0b11111111
out PortD,temp
ldi temp,(1<<SPE)|(1<<MSTR)|(1<<CPOL)|(1<<CPHA)|(1<<SPR1)|(1<<SPR0);
out SPCR,temp
;(1<<SPE) - разрешение работы SPI
;(1<<MSTR) - режим ведущего
;(1<<CPOL) - во время ожидания на SCK присутствует ВЫСОКИЙ уровень
;(1<<CPHA) - данные считываются по спадающему фронту SCK
;(1<<SPR1)|(1<<SPR0) - частота SCK равна СК/128
;режим работы №3 :)
ldi temp,(0<<SPI2X)
out SPSR,temp
;(0<<SPI2X) - двойная скорость отключена
;SPCR (0<<SPIE)|(1<<SPE)|(0<<DORD)|(1<<MSTR)|(1<<CPOL)|(1<<CPHA)|(1<<SPR1)|(1<<SPR0);
ldi temp,(1<<PB2)+(1<<PB3)+(1<<PB5)
out DDRB,temp ;MOSI, SS и SCK на выход
ldi temp,(0<<PB4) ;MISO на вход
out PortB,temp ;т.к. в режиме ведущего
;===
Main:
rcall Output
rjmp Main
Output:
ldi data,PortD
out SPDR,data ;запись данных в регистр данных
Wait_Transmit:
sbis SPSR,SPIF ;ждем окончания передачи байта
rjmp Wait_Transmit
ret
Код для MK2 в режиме Slave:
CODE:;=======================================================================
;Autor: Ilnur 2011
;Project: Mega8 работа с SPI в режиме Slave
;Name: SPImega8Slave
;=======================================================================
.device ATmega8
.include "m8def.inc"
.list
.def temp=r16
.def data=r17
.org $0
rjmp init
INIT: ;стек
ldi temp,high(RAMEND)
out SPH,temp
ldi temp,low(RAMEND)
out SPL,temp
;порты
ldi temp,$ff
out DDRD,temp
ldi temp,0b00000000
out PortD,temp
ldi temp,(1<<SPE)|(0<<MSTR)|(1<<CPOL)|(1<<CPHA)|(1<<SPR1)|(1<<SPR0);
out SPCR,temp
;(1<<SPE) - разрешение работы SPI
;(0<<MSTR) - режим ведомого
;(1<<CPOL) - во время ожидания на SCK присутствует ВЫСОКИЙ уровень
;(1<<CPHA) - данные считываются по спадающему фронту SCK
;(1<<SPR1)|(1<<SPR0) - частота SCK равна СК/128
;режим работы №3 :)
ldi temp,(0<<SPI2X)
out SPSR,temp
;(0<<SPI2X) - двойная скорость отключена
;SPCR (0<<SPIE)|(1<<SPE)|(0<<DORD)|(1<<MSTR)|(1<<CPOL)|(1<<CPHA)|(1<<SPR1)|(1<<SPR0);
ldi temp,(0<<PB2)+(0<<PB3)+(0<<PB5)
out DDRB,temp ;MOSI, SS и SCK на вход
ldi temp,(1<<PB4) ;MISO на выход
out PortB,temp ;т.к. в режиме ведомого
;===
Main:
rcall Receive
out PortD,data
rjmp Main
Receive:
sbis SPSR,SPIF
rjmp Receive
in data,SPDR
ret
схема на которой все испытывал:
а вот что во время работы твориться (несмотря на то, какую кнопку нажимаешь):
подскажите что не так, может в схеме проблема? или в проге?
(Добавление)
AVR Studio ошибок не находит, все нормально
Правда в Proteus`е пишется что проц загружается на 88%-100%, и иногда жалуется на то, что слишком сильно проц загружен...
В чем дело может быть???(Отредактировано автором: 11 Апреля, 2011 - 13:45:45) |
|
|
ilnur888 |
Отправлено: 11 Апреля, 2011 - 15:22:37
|
Маршал
Сообщений всего: 103
Дата рег-ции: Окт. 2010
|
Хех, заработало!!!
Ошибка-то в проге была!!!
Все, исправил, дело было вход/выход неправильно, соединение SPI правильно, теперь при нажатии на кнопку включ соотв светодиод, т.е. передача байтов работает!!!!
Ща, перепроверю отпишу...
Резисторы на всякий пожарный поставил уж... (хотя в компе ниче и не сгорит) ))
(Добавление)
Вообщем работает, только вот когда кнопку отожмешь, то лог. 1 все равно остается на выводе (с чего бы так), пробовал и в проге обнулять - пока незнаю че и делать.
Вот, работает так-то, передаетт!
(Отредактировано автором: 11 Апреля, 2011 - 15:41:55) |
|
|
|
Поиск в теме | Версия для печати |
Страниц (3): [1] 2 3 » |
« Программирование микроконтроллеров » |
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
|
|
|
|