Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: UART И SPI НА АССЕМБЛЕРЕ, ATMEGA128A
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Uragan
здравствуйте всем! очень нужна ваша помощь
пишем spi на ассемблере для atmega 128 a, тихим тихим. буду признательна, если поможете) еще uart нужен, с ним вообще сложно
CODE
.include "m128def.inc"
.equ LowByte=60
.equ CS=PB0
.equ SCK=PB7

.org $000
rjmp reset
.org $001C
rjmp timer1_ovf

reset:
cli

ldi r16, TCNT1H
out TCNT1H, r16
ldi r16, LowByte
//ldi r16, TCNT1L
out LowByte, r16

ldi r16, (1<<TOIE1)
out TIMSK, r16
ldi r16, (1<<CS10)|(1<<CS11)
out TCCR1B, r16
ldi r17, (1<<4)
out DDRB, r17
clr r16
sei

main:
RJMP main

ldi r18, 1<<ADEN| 1<<ADIE|1<<ADPS2|1<<ADPS0
out ADCSRA, r18

timer1_ovf:
eor r16, r17
out PORTE, r16///


;start ADC 1/32=125; interrupt enable
ldi r18, 1<<ADEN| 1<<ADIE|1<<ADPS2|1<<ADPS0|1<<ADSC
out ADCSRA, r18
/*ldi r18, 1<<ADFR
out ADCSRA, r18
ldi r18, 1<<ADSC
out ADCSRA, r18*/



SPI_MasterInit:
; Установка MOSI и SCK на вывод, все остальные на ввод
ldi r17,(1<<DDB5)|(1<<DDB1)
out DDRB,r17
; Разрешение SPI в режиме мастера, установка скорости связи fck/16
ldi r17,(1<<SPE)|(1<<MSTR)|(1<<SPR0)
out SPCR,r17
ret
SPI_MasterTransmit:
; Запуск передачи данных (r16)
out SPDR,r16
Wait_Transmit:
; Ожидание завершения передачи данных
sbis SPSR,SPIF
rjmp Wait_Transmit
ret

SPI_SlaveInit:
; Установка MISO на вывод и всех ост. на ввод
ldi r17,(1<<DDB3)
out DDRB,r17
; Разрешение SPI
ldi r17,(1<<SPE)
out SPCR,r17
ret
SPI_SlaveReceive:
; Ожидание завершения передачи
sbis SPSR,SPIF
rjmp SPI_SlaveReceive
; Чтение принятых данных и выход из процедуры
in r16,SPDR
ret
Xenia
Цитата(Uragan @ Dec 13 2014, 00:55) *
здравствуйте всем! очень нужна ваша помощь
пишем spi на ассемблере для atmega 128 a, тихим тихим. буду признательна, если поможете) еще uart нужен, с ним вообще сложно.


А с кем/чем ваша ATMEGA128A по SPI разговаривать собралась? Кто/что там с другой стороны на проводе висит?

В чем ваши сложности, если все функции инициалиции и передачи у вас уже написаны? Например, вызываете разок фунцию SPI_MasterInit, чтобы для SPI режим установить, а потом передаете текст по одной букве, запихивая каждую букву по очереди в регистр r16 и сразу же за этим вызывая функцию SPI_MasterTransmit для передачи. Вот и вся недолга.

Проблему я вижу не в передаче/приеме по SPI, а в том, что у вас Main пустая, а потому непонятно, откуда брать текст для передачи или куда его девать после приема. А без этого неизвестно, как проверить, работает ваш передатчик/приемник или нет.
ILYAUL
Не определен стек.
Это вообще никогда не работает
Код
ldi r18, 1<<ADEN| 1<<ADIE|1<<ADPS2|1<<ADPS0
out ADCSRA, r18


Прерывание по таймеру сработает один раз что-то отошлёт по SPI и всё . Дальше программа навсегда повисает в MAIN
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.