1st programm (Программы)
Описание файла
Файл "1st programm" внутри архива находится в следующих папках: labs, всякие проги, laba1, Rezviakov. Документ из архива "Программы", который расположен в категории "". Всё это находится в предмете "микропроцессоры и эвм в нк" из 7 семестр, которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. Архив можно найти в разделе "остальное", в предмете "микропроцессоры и эвм в нк" в общих файлах.
Онлайн просмотр документа "1st programm"
Текст из документа "1st programm"
.include "m8515def.inc"
.def mainout = r16
.def ccount = r17
.def waitparm = r18
.def tempreg = r19
.def loopdirect = r20
begin:
; mainout - результат
; ccount - переменная цикла
; waitparm - время задержки
; tempreg - переменная цикла задержки
; loopdirect - направление приращения ccount
; разъяснение работы проги...
; (примерный граф... или как там это.. без условий перехода)
; loop_in -> loop_out -> loop_end.. (далее интереснее)...
; / -> loop_end_inc (-> loop_in).. -> loop_end_pre_dec \
; \ -> loop_end_dec (-> loop_in).. -> loop_end_pre_inc /
; (и вся эта гадость).. -> loop_end -> loop_in
; ыыы... вот так то! =)
clr mainout
clr ccount
clr waitparm
clr tempreg
clr loopdirect
; начальные параметры.. менять только waitparm (от 01 до ff)
ldi mainout, 0x00
ldi ccount, 0x01
ldi waitparm, 0x01
; инициализация записи в portb
; чтоб не мельтешило перед глазами - закомментил
; для правильной записи в порт надо откомментировать!
; ldi tempreg, 0xff
; out ddrb, tempreg
; clr tempreg
rjmp loop_in
;==============================================================
; вывод наружу + задержка
.macro port_out
; sbr ddrb
out portb, @0
; clr ddrb
; параметрическая задержка.. от waitparm
; !!! ВНИМАНИЕ !!! откомментировать если нужна задержка =)
; mov tempreg, waitparm
;wait:
; dec tempreg
; cpi tempreg, 0x00
; brne wait
.endmacro
;==============================================================
; сдвигаем биты влево...
; 0x00 = 0000 0000
; 0x01 = 0000 0001
; 0x03 = 0000 0011
; 0x07 = 0000 0111
; 0x0f = 0000 1111
; 0x1f = 0001 1111
; 0x3f = 0011 1111
; 0x7f = 0111 1111
; 0xff = 1111 1111
loop_in:
; {
port_out mainout
; if mainout = ccount then goto loop_out
cp mainout, ccount
breq loop_out
sec ; установим бит C ( = 1)
rol mainout ; сдвиг влево (дополняется установленным битом c, через sec)
clc ; очищаем бит C (а оно надо? .. ну пущай будет)
rjmp loop_in
; }
;==============================================================
; сдвигаем биты вправо..
; 0xff = 1111 1111
; 0x7f = 0111 1111
; 0x3f = 0011 1111
; 0x1f = 0001 1111
; 0x0f = 0000 1111
; 0x07 = 0000 0111
; 0x03 = 0000 0011
; 0x01 = 0000 0001
; 0x00 = 0000 0000
; сдвигает до упора ;)) те до нуля
loop_out:
; {
port_out mainout
;if mainout = 0x00 then goto loop_end
cpi mainout, 0x00
breq loop_end
lsr mainout ; сдвигаем вправо..
rjmp loop_out
; }
;==============================================================
; запуск циклов с новыми параметрами
loop_end:
; {
;port_out mainout
; ldi mainout, 0x01 ; начальный бит сдвига для loop_in
; условия приращения
; if loopdirect = 0x00 then goto loop_end_inc
; если loopdirect = 0x00 знач ccount -> ff
cpi loopdirect, 0x00
breq loop_end_inc
; if loopdirect = 0xff then goto loop_end_dec
; если loopdirect = 0xff знач ccount -> 00
cpi loopdirect, 0xff
breq loop_end_dec
rjmp loop_in ; ? а нафига =)).. ну пусть будет на всякий случай..
; }
;==============================================================
; приращание ccount от (!) 0x01 до 0xff
loop_end_inc:
; {
; if ccount = 0xff then goto loop_end_pre_dec
; если ccount = 0xff знач надо поменять направление
cpi ccount, 0xff
breq loop_end_pre_dec
sec ; установим бит C ( = 1)
rol ccount ; сдвиг влево, добавл. единицы, параметр цикла .. -> ff
clc ; очищаем бит C (а оно надо? .. ну пущай будет)
rjmp loop_in
; }
;==============================================================
; уращение ccount от 0xff до 0x01 (!)
loop_end_dec:
; {
; if ccount = 0x01 then goto loop_end_pre_inc
; если ccount = 0x01 знач надо поменять направление
cpi ccount, 0x01
breq loop_end_pre_inc
lsr ccount ; параметр цикла .. -> 01
rjmp loop_in
; }
;==============================================================
; смена байта направления loopdirect на 0x00 (приращение)
loop_end_pre_inc:
; {
ldi loopdirect, 0x00
ldi ccount, 0x03 ; подгон - стартуем new sequence с двух бит!
rjmp loop_in
; }
;==============================================================
; смена байта направления loopdirect на 0xff (уращение..? те убывание)
loop_end_pre_dec:
; {
ldi loopdirect, 0xff
rjmp loop_end
; }