Программы (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

; }


Случайные файлы

Файл
17174.rtf
128123.doc
115151.rtf
Abstract.doc
28726-1.rtf




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.