| Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
Без команд S* и *L*
23.05.2010, 06:13
|
|
|
Частый гость
Регистрация: 11.07.2007
Сообщений: 28
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 1 сообщении
|
Без команд S* и *L*
Давайте расслабимся и развлечемся.
Задача: 0xa5 записать по адресу 0x6e.
Усложнение- не использовать команды:
Atmega8 - S*(можно еще L*, но загромоздит код)
PIC16F - *L*,B* ; банк не имеет значения
Последний раз редактировалось zelvans; 23.05.2010 в 06:24.
|
|
|
|
23.05.2010, 08:34
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,578
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: Без команд S* и *L*
Сообщение от zelvans
|
Давайте расслабимся и развлечемся.
Задача: 0xa5 записать по адресу 0x6e.
Усложнение- не использовать команды:
PIC16F - *L*,B* ; банк не имеет значения
|
|
Код:
|
REG_TEMP EQU 20h
REG EQU 6eh
;поизваращаемся с регистром
;зная что число 0ха5=10100101=165
;очистка временого регистра
LOOP DECFSZ REG_TEMP,1
GOTO LOOP
;очистка W
ANDWF REG_TEMP,0
;также очищаем регистр STATUS интересует бит С
MOVWF STATUS
;теперь устанвливаем единички в промежуточном регистре
;сдвигаем командой RRF через С и делаем ИЛИ с регистром W
INCF REG_TEMP,1
IORWF REG_TEMP,0 ;нулевой бит
RRF REG_TEMP,1
RRF REG_TEMP,1
IORWF REG_TEMP,0 ;седьмой бит
RRF REG_TEMP,1
RRF REG_TEMP,1
IORWF REG_TEMP,0 ;пятый бит
RRF REG_TEMP,1
RRF REG_TEMP,1
RRF REG_TEMP,1
IORWF REG_TEMP,0 ;второй бит
;кажись готово число в регистре W переносим в 6eh
MOVWF REG |
Кажись так,в симуляторе не проверял,мож где и ошибся.Но было интересно
__________________
Глаза боятся,а руки делают.
|
|
|
|
23.05.2010, 13:54
|
|
|
Частый гость
Регистрация: 11.07.2007
Сообщений: 28
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 1 сообщении
|
Re: Без команд S* и *L*
ОК!
Жду еще варианты для PIC-а
|
|
|
|
23.05.2010, 14:16
|
|
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,578
Сказал спасибо: 175
Сказали Спасибо 1,567 раз(а) в 810 сообщении(ях)
|
Re: Без команд S* и *L*
Жди
|
|
|
|
24.05.2010, 05:39
|
|
|
Частый гость
Регистрация: 11.07.2007
Сообщений: 28
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 1 сообщении
|
Re: Без команд S* и *L*
для PIC-а в моем варианте 3 команды, последняя конечно же movwf.
CERGEI1982 все равно молодец.
Для AVR CERGEI1982 для первой части раскрыл идею, теперь можно использовать ldi, которых 3 штуки, а всего 6 команд
|
|
|
|
24.05.2010, 13:30
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,578
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: Без команд S* и *L*
Сообщение от zelvans
|
|
для PIC-а в моем варианте 3 команды, последняя конечно же movwf.
|
Покажи интересно...
__________________
Глаза боятся,а руки делают.
|
|
|
|
25.05.2010, 03:06
|
|
|
Временная регистрация
Регистрация: 18.07.2006
Сообщений: 90
Сказал спасибо: 8
Сказали Спасибо 13 раз(а) в 9 сообщении(ях)
|
Re: Без команд S* и *L*
Для avr
Если ldi не использовать
|
Код:
|
start:
clr tmp
out sph,tmp
clr tmp
loop1:
inc tmp
cpi tmp,0x6e
brlt loop1
out spl,tmp
clr tmp
loop2:
dec tmp
cpi tmp,0xa6
brge loop2
push tmp
forever:
rjmp forever |
если использовать
|
Код:
|
start:
clr tmp
out sph,tmp
ldi tmp,0x6e
out spl,tmp
ldi tmp,0xa5
push tmp
forever:
rjmp forever |
Итого : в первом случае 12 комманд, во втором 6
Последний раз редактировалось Markusha; 25.05.2010 в 04:07.
|
|
|
|
25.05.2010, 17:08
|
|
|
Частый гость
Регистрация: 11.07.2007
Сообщений: 28
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 1 сообщении
|
Re: Без команд S* и *L*
Зачтено!
Для PIC-a
1 . . .
2 movf
3 movwf
|
|
|
|
30.05.2010, 04:37
|
|
|
Частый гость
Регистрация: 11.07.2007
Сообщений: 28
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 1 сообщении
|
Re: Без команд S* и *L*
password stsmovf
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:43.
|
|