;Цель: передать в последовательном формате из микроконтроллера во внешний регистр 4 байта полезных данных, находящихся в RAM по адресам:$060, $061, $062, $063, $064 с формированием для внешнего регистра сигнала завершения цикла передачи load.
;Вариант решения задачи программно, передавая на те же выходы порта B программно формируемые сигналы, для адресации данных в RAM, будем использовать регистр косвенной адресации X (с этим кодом требуется 303 команды)
.NOLIST ;не включать последующие команды в листинг
.INCLUDE "m32def.inc" ;включить в код файл описаний команд и регистров конкретного контроллера
.LIST ;включить последующие команды в листинг
.DEF temp=r16 ;определить переменную temp как регистр r16
.CSEG ;указываем, что далее будем работать с памятью программ FLASH
.ORG $000 ;установка положения в начальный $000 адрес памяти
rjmp init ;условный переход на метку init: (прерывание по reset)
.ORG $011 ;установка положения в $00a адрес памяти
init: ;инициализация используемых аппаратных средств, назначение портов на вход и выход
ldi temp, LOW(RAMEND) ;обязательная процедура инициализации стека, значение переменной RAMEND указано во включаемом файле .inc, различное значение для каждого контроллера
out SPL, temp
ldi temp, HIGH(RAMEND)
out SPH, temp
ldi temp, $f0 ;запись в temp числа 11110000
out DDRB, temp ;задействовать четыре старших бита регистра DDRB порта B как выходы, по умолчанию задействованы как входы 00000000
sbi PORTB, PB7 ;установить PB7
start: ;запуск цикла с выводом первого байта в последовательном формате
cli ;очистить флаг разрешения прерываний
clr XH ;очистка старшего байта спец. регистра косв. адресации X (состоит из 2 РОН)
ldi XL, $60 ;занести начальный адрес данных в регистр X
byte:
ld temp, X+ ;занести в temp байт с постинкрементом(использовать адрес, затем увеличить на 1) адреса в X
ldi r17, $08 ;определить количество бит в байте
bit:
sbrs temp, 7 ;пропустить, если бит 7 очищен
sbi PORTB, PB5 ;установить PB5
cbi PORTB, PB7 ;очистить PB7 (сигнал SCK)
lsl temp ;сдвиг влево байта данных
sbi PORTB, PB7 ;установить PB7 (сигнал SCK)
dec r17 ;декремент числа бит в r17
brpl bit ;перейти к метке bit:, если не все биты переданы (r17 еще не равен нулю)
cpi XL, $64 ;сравниваем текущий XL с конечным адресом
brne byte ;переходим на метку byte:, если еще не весь байт передан
end:
sbi PORTB, PB4 ;установить PB4 (сигнал load)
nop ;пустая инструкция (задержка)
cbi PORTB, PB4 ;сбросить PB4
sei ;общее разрешение прерываний
main: ;общий бессодержательный бесконечный цикл, может быть заменен любой программой
nop ;пустая инструкция (задержка)
rjmp main ;переход по метке main:
Thursday, October 3, 2013
Transmit_data
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment