Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;**********************************************************************
- ;Программа 1.1 для микроконтроллеров ATx8515:
- ;переключение светодиодов (СД) при нажатии на кнопку START (SW0),
- ;после нажатия кнопки STOP (SW1) переключение прекращается и
- ;возобновляется c места остановки при повторном нажатии на кнопку START
- ;Соединения: SW0-PD0, SW1-PD1, LED-PB
- ;**********************************************************************
- ;.include "8515def.inc" ;файл определений для AT90S8515
- .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,0xFE ;сброс reg_led.0 для включения LED0
- sec ;C=1
- set ;T=1 – флаг направления
- ser temp ;инициализация
- out DDRC,temp ; порта PB на вывод
- out PORTC,temp ;погасить СД
- clr temp ;инициализация
- out DDRD,temp ; порта PD на ввод
- ldi temp,0x03 ;включение подтягивающих
- out PORTD,temp ; резисторов порта PD
- WAITSTART: ;ожидание
- sbic PIND,START ; нажатия
- rjmp WAITSTART ; кнопки START
- LOOP: out PORTC,reg_led ;включение СД
- ;***Задержка (два вложенных цикла)***
- ldi r19,0x6
- d1: ldi r17,0xEB ;1+(1+(0,75*r18)*r17)*r19
- d2: ldi r18,0xEA ;1+(0,75*r18)*r17
- d3: dec r18 ;0,75*r18
- brne d3 ;
- dec r17
- brne d2
- dec r19
- brne d1
- sbic PIND,STOP ;если замкнута кнопка STOP, то
- rjmp MM ; переход
- rjmp WAITSTART ; для проверки кнопки START,
- SETR: ldi reg_led, 0xC0
- clc
- rjmp LOOP
- SETL: ldi reg_led, 0xFE
- sec
- rjmp LOOP
- MM: brts LEFT ;переход, если флаг T установлен
- sbrc reg_led,0 ;пропуск следующей команды,
- ; если 0-й разряд reg_led установлен
- set ;T=1 - переключение флага направления
- sbrc reg_led,0 ;пропуск следующей команды,
- rjmp SETL
- ror reg_led ;сдвиг reg_led вправо на 1 разряд
- rjmp LOOP
- LEFT: sbrs reg_led,7 ;пропуск следующей команды,
- ; если 7-й разряд reg_led установлен
- clt ;T=0 – переключение флага направления
- sbrs reg_led,7 ;пропуск следующей команды,
- rjmp SETR
- rol reg_led ;сдвиг reg_led влево на 1 разряд
- rjmp LOOP
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement