Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .include "m8515def.inc" ;файл определений для ATmega8515
- .def temp = r16 ;временный регистр
- .def reg_led = r20 ;регистр состояния светодиодов
- .equ START = 0 ;0-ой вывод порта
- .equ STOP = 1 ;1-ый вывод порта
- .org $000
- rjmp init
- ;***Инициализация***
- INIT: ldi reg_led,0x80 ;сброс reg_led.0 для включения LED0
- sec ;C=1
- clt ;T=1 – флаг направления
- ser temp ;инициализация выводов
- out DDRB,temp ; порта PB на вывод DDRB == 0xFF
- out PORTB,temp ;погасить СД PORTB == 0xFF
- clr temp ;инициализация temp == 0x00
- out DDRD,temp ; порта PD на ввод DDRD == 0x00
- ldi temp,0x03 ;включение ‘подтягивающих’
- out PORTD,temp ; резисторов порта PD (0-й, 1-й разряды)
- WAITSTART: ;ожидание
- sbic PIND,START ; нажатия skip (одну команду) bit if clear
- rjmp WAITSTART ; кнопки START
- LOOP: out PORTB,reg_led ;вывод на индикаторы
- ;***Задержка (два вложенных цикла)***
- ldi r19,6
- d3: ldi r17,255
- d1: ldi r18,255
- d2: dec r18
- brne d2
- dec r17
- brne d1
- dec r19
- brne d3
- sbic PIND,STOP ;если нажата кнопка STOP,
- rjmp MM ; то переход
- rjmp WAITSTART ; для проверки кнопки START
- MM: brts LEFT ;переход, если флаг T установлен T=1
- sbrc reg_led,0 ;пропуск следующей команды,
- ; если 0-й разряд reg_led установлен
- set ;T=1 - переключение флага направления
- sec
- ror reg_led ;сдвиг reg_led вправо на 1 разряд
- rjmp LOOP ;переход на проверку нажатия STOP
- LEFT: sbrs reg_led,7 ;пропуск следующей команды,
- ; если 7-й разряд reg_led установлен
- clt ;T=0 – переключение флага направления
- clc
- rol reg_led ;сдвиг reg_led влево на 1 разряд
- rjmp LOOP
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement