Дисплей нокии 3310 и atmega8 проблема с кодом

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
pimple2006
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Ср фев 08, 2012 22:58:32
Откуда: Лебедянь

Дисплей нокии 3310 и atmega8 проблема с кодом

Сообщение pimple2006 »

Здравствуйте,ребят я знаю что вы уже все разжевали вдоль и поперек эту тему,но все же прошу помощи. :))
1.подключил в протеусе через SPI интерфейс
2.стал писать программу в блокноте:

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

.include "C:\Appnotes\m8def.inc"

.def     Temp=R16


.cseg
.org 0

SPI_MasterInit:
; Set MOSI and SCK output, all others input
ldi r17,(1<<DD_MOSI)|(1<<DD_SCK)
out DDR_SPI,r17
; Enable SPI, Master, set clock rate fck/16
ldi r17,(1<<SPE)|(1<<MSTR)|(1<<SPR0)
out SPCR,r17
ret

SPI_MasterTransmit:
; Start transmission of data (r16)
out SPDR,Temp
Wait_Transmit:
; Wait for transmission complete
sbis SPSR,SPIF
rjmp Wait_Transmit
ret

ldi Temp,11111111
rjmp SPI_MasterTransmit
ldi Temp,11111111
rjmp SPI_MasterTransmit
ldi Temp,11111111
rjmp SPI_MasterTransmit
ldi Temp,11111111
rjmp SPI_MasterTransmit
ldi Temp,11111111
rjmp SPI_MasterTransmit
ldi Temp,11111111
rjmp SPI_MasterTransmit
3.Сохранил и поставил на компиляцию,но вылетело аж 8 ошибок(до этого по вашему тутору делал светодиоды на настоящем МК - проблем не было)
4.Ошибки:
DD_MOSI DDR_SPI не прописаны в файле с инструкциями
остальные 6 ошибок связаны с out of range ldi Temp,11111111
Парни,помогите прописать не достающих DD_MOSI DDR_SPI и расскажите почему происходит Out of range

P.S извините за нубский вопрос и за говно код,просто хочу сначала разобраться а потом делать норм код.(я знаю,что код нерабочий) :)
Реклама
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Re: Дисплей нокии 3310 и atmega8 проблема с кодом

Сообщение ibiza11 »

ldi Temp,11111111
Вы понимаете, что пытаетесь записать в 8-битную переменную(которая имеет макс значение 255) число 11 миллионов 111 тысяч 111?
DD_MOSI DD_SPI
вместо этого напишите номера битов портов, к которым обращаетесь

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

rjmp SPI_MasterTransmit 
...
SPI_MasterTransmit:
...
ret
у вас SPI_MasterTransmit определена как функция (поскольку в конце стоит ret), а обращаетесь вы к ней как к обычной метке. Это приведет к тому, что вы никогда не вернетесь из своей функции в исходное место.
Хорошо бы еще стек проинициализировать - последствия невыполнения этого читайте выше.
Дисплей нокии 3310 и atmega8 проблема с кодом
Плохо вы наш "тутор" читали, раз такие ошибки лепите.
Ставим плюсы: )
Реклама
pimple2006
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Ср фев 08, 2012 22:58:32
Откуда: Лебедянь

Re: Дисплей нокии 3310 и atmega8 проблема с кодом

Сообщение pimple2006 »

точно,забыл 0b11111111,вчера поздно просто было) лоханулся
orinoko

Re: Дисплей нокии 3310 и atmega8 проблема с кодом

Сообщение orinoko »

Тут ещё вопрос, откуда программа стартовать будет, и, мне кажется, явно не оттуда, откуда хочет ТС
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Дисплей нокии 3310 и atmega8 проблема с кодом

Сообщение Engineer_Keen »

Ну откуда стартовать будет известно - с 0-го адреса, и то что программа имеет капитальные структурные косяки и выполнятся будет ровно до первой строки с ret, а дальше поведет себя непредсказуемо (скорее всего сброс) это факт (хотя ТС признает что код не рабочий, но какой тогда смысл?) :)))
1) первой строкой написать RJMP на метку, где начинается инициализация
2) про инициализацию стека уже писали
3) про вызов SPI_MasterTransmit через RCALL, а не RJMP тоже
4) после последней строки программы (если выполнить п.п. 1 - 3) будет что? Последовательный перебор адресов, переполнения PC и сброс, т.к. не хватает главного цикла-заглушки:

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

LOOP: 
//главный цикл
RJMP LOOP
Реклама
pimple2006
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Ср фев 08, 2012 22:58:32
Откуда: Лебедянь

Re: Дисплей нокии 3310 и atmega8 проблема с кодом

Сообщение pimple2006 »

ребята,спасибо за упоминание говнокода,я писал про это.Что означает аббривиатура ТС?Если это ТупойСтудент - не обосновано! :evil:

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

.include "C:\Appnotes\m8def.inc"

.def     Temp=R16
.def     Temp1=R22


.cseg
.org 0

ldi Temp1,high(RamEnd)
out SPH,Temp1
ldi Temp1,low(RamEnd)
out SPL,Temp1

rcall SPI

Main:
ldi r16,0b00011010
rcall SPI_MasterTransmit
rjmp Main

SPI:
; Set MOSI and SCK output, all others input
ldi r17,0b00101000
out DDRB,r17
; Enable SPI, Master, set clock rate fck/16
ldi r17,(1<<SPE)|(1<<MSTR)|(1<<SPR0)
out SPCR,r17
ret

SPI_MasterTransmit:
; Start transmission of data (r16)
out SPDR,Temp
Wait_Transmit:
; Wait for transmission complete
sbis SPSR,SPIF
rjmp Wait_Transmit
ret
Реклама
orinoko

Re: Дисплей нокии 3310 и atmega8 проблема с кодом

Сообщение orinoko »

аббривиатура ТС
это обозначает ТопикСтартер, но ход ваших мыслей мне тоже нравится :)
pimple2006
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Ср фев 08, 2012 22:58:32
Откуда: Лебедянь

Re: Дисплей нокии 3310 и atmega8 проблема с кодом

Сообщение pimple2006 »

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

.include "C:\Appnotes\m8def.inc"

.def     Temp=R16
.def     Temp1=R22


.cseg
.org 0

ldi Temp1,high(RamEnd)
out SPH,Temp1
ldi Temp1,low(RamEnd)
out SPL,Temp1

rcall SPI
ldi r16,0b00000000
out PINB,r16
ldi r16,0b00100001
rcall SPI_MasterTransmit
ldi r16,0b10010000
rcall SPI_MasterTransmit
ldi r16,0b00100000
rcall SPI_MasterTransmit
ldi r16,0b00000001
out PINB,r16
ldi r16,0b00011111
rcall SPI_MasterTransmit

Main:

rjmp Main

SPI:
; Set MOSI and SCK output, all others input
ldi r17,0b00101001
out DDRB,r17
; Enable SPI, Master, set clock rate fck/16
ldi r17,(1<<SPE)|(1<<MSTR)|(1<<SPR0)
out SPCR,r17
ret

SPI_MasterTransmit:
; Start transmission of data (r16)
out SPDR,Temp
Wait_Transmit:
; Wait for transmission complete
sbis SPSR,SPIF
rjmp Wait_Transmit
ret
я учел ответы ваши,
посоны я сделал это,нарисовалась в протеусе линия,вопросик зачем нужен бесконечный пустой цикл?
orinoko

Re: Дисплей нокии 3310 и atmega8 проблема с кодом

Сообщение orinoko »

Тебе достаточно убрать и проверить пошагово, что будет с выполнением программы. Или убери мысленно, и подумай куда программа пойдёт
Ответить

Вернуться в «Периферия»