

FreshMan писал(а):начал задавать знатокам вопросы о .CSEG и .ORG address................, короче забуксовал........,
suslogon писал(а):вопрос такой: мог бы кто небесплатно разумеется (но и не очень дорого) написать программку для мега32 для термометра на дс18б20 с несколько хитрой индикацией?
Как организовать побитовый вывод регистра общего назначения в 1 выход порта микроконтроллера?
при этом свободно по своему усмотрению использовать другие биты этого же порта?
Код: Выделить всё
print:
ldi XH,high(display_buf+6)
ldi XL,low(display_buf+6)
ldi rx1,6 ; выводим 6 байт с конца
print_0:
ld rx3,-X ; в rx3 - выводимый байт
ldi rx2,8 ; в rx2 - счётчик до 8
print_1: ; data_port,data_bit - куда выводим
sbrc rx3,0
sbi data_port,data_bit
sbrs rx3,0
cbi data_port,data_bit
push_imp
lsr rx3
dec rx2
brne print_1
dec rx1
brne print_0
ret
ploop писал(а):Как организовать побитовый вывод регистра общего назначения в 1 выход порта микроконтроллера?
Анализировать крайний бит РОН (левый или правый, смотря с какой стороны выводить), в зависимости от его состояния устанавливать или сбрасывать бит порта, затем сдвигать содержимое РОН влево/вправо
копирует младший бит регистра в бит Т SREG, а потом сдвигаем содержимое регистра, вставляем этот бит в другой регистр - надеваем на него маску - и выводим на порт:)
Код: Выделить всё
sbrc Rx,0
sbi port,bit
sbrs Rx,0
cbi port,bit
Arlleex писал(а):Вчера еще организовал так:
копирует младший бит регистра в бит Т SREG, а потом сдвигаем содержимое регистра, вставляем этот бит в другой регистр - надеваем на него маску - и выводим на порт:)

john_rise писал(а):Эдакая задачка для эрудиции
Не сильно и растётjohn_rise писал(а):Или при помощи инструкций типа BRxx, но здесь растёт число инструкций, что тоже не греет душу.
Код: Выделить всё
add XL,indx
brcc noinc
inc XH
noinc:john_rise писал(а):Код: Выделить всё
add XL,indx
clr r16
adc XH,r16
Код: Выделить всё
ldi XL, low(table)
ldi XH, high(table)
add XL,indx
clr r16
adc XH,r16Код: Выделить всё
ldi XL, low(table)
ldi XH, high(table)
add XL,indx
adc XH, ZERO_REGКод: Выделить всё
mov XL,indx
clr XH
subi XL, low( -table)
sbci XH, high( -table)IM1 писал(а):avreal , полностью согласен, только писать надо не table, а (table*2)
GP1 писал(а):справедливо если table расположено во флеше, а вот если в EEPROMе или RAMе...