Пн июн 11, 2012 14:20:43
; ******************************
; Автор: ххх *
; Дата: 11.06.2012 *
; Версия: 0.1 *
; Имя файла: Indicator *
; Для AVR: ATmega8L-8PU *
; Тактовая частота: 4 МГц *
; ******************************
; Выполняемые функции: Управление семисегментным ЖК-индикатором, функция подавления дребезга контактов
; ============
.device ATmega8
.nolist
.include "C:\Program Files\Atmel\AVR Studio 5.0\avrassembler\include\m8def.inc"
.list
; ============
; Блок объявлений
.def temp = r16
.def counter = r17
.def delay1 = r16 ; так надо
.def delay2 = r18
.def delay3 = r19
; ============
; Начало программы
rjmp Init
; ============
; Подпрограммы
Debounce: ; инициализируем регистры счетчика числом 0x13880 (для четности добавляем 0: 0х013880)
ldi delay1, 0x80 ;
ldi delay2, 0x38 ;
ldi delay3, 0x01 ;
Loop: ; формируем задержку
subi delay1, 1 ;
subi delay2, 0 ;
subi delay3, 0 ;
brcc Loop ;
ret
; ============
Init:
; Тело программы
; ==========
; Подблок инициализации стека
ldi temp, low(ramend) ;
out spl, temp ;
ldi temp, high(ramend) ;
out sph, temp ;
; ==========
ser temp ;
out DDRD, temp ; выходы
ldi temp, 0b11111110 ;
out DDRB, temp ; PB0 - вход, остальные не используются
ldi r20, 0b01111110 ; код для цифры "0"
out PortD, temp ; показать цифру "0"
ldi temp, 0b00000001 ;
out PortB, temp ; PB0 - подтяжка, остальные не используются
ldi r21, 0b00110000 ; коды цифр индикатора
ldi r22, 0b01101101 ;
ldi r23, 0b01111001 ;
ldi r24, 0b00110011 ;
ldi r25, 0b01011011 ;
ldi r26, 0b01011111 ;
ldi r27, 0b01110000 ;
ldi r28, 0b01111111 ;
ldi r29, 0b01111011 ;
clr counter ;
; ============
Start:
sbic PinB, 0 ;
rjmp Start ; если нет
inc counter ;
cpi counter, 10 ;
brne PC + 2 ; если нет
clr counter ;
ldi ZL, 20 ;
add ZL, counter ;
ld temp, Z ;
out PortD, temp ;
rcall Debounce ; задержка
ReleaseWait:
sbis PinB, 0 ;
rjmp ReleaseWait ; если нет
rcall Debounce ; задержка
rjmp Start ;
; ============
Пн июн 11, 2012 15:05:22
Loop: ; формируем задержку
subi delay1, 1 ;
subi delay2, 0 ;
subi delay3, 0 ;
brcc Loop ;
ret
Вт июн 12, 2012 01:24:18
Loop: ; формируем задержку
subi delay1, 1 ;
SBCI delay2, 0 ;вычитаем ноль и бит переноса!
SBCI delay3, 0 ;
brcc Loop ;
ret
subi delay3,0
Вт июн 12, 2012 10:55:42
eufs писал(а):У вас книжка неправильная.
Вт июн 12, 2012 11:44:43
... к сожалению таких очень много и "плюс помощь типографии" при наборе текстаJack_A писал(а):Книжку, видимо, писал чукча-писатель...
Вт июн 12, 2012 14:14:17
eufs писал(а):У вас книжка неправильная.
- Код:
Loop: ; формируем задержку
subi delay1, 1 ;
SBCI delay2, 0 ;вычитаем ноль и бит переноса!
SBCI delay3, 0 ;
brcc Loop ;
ret
Иначе из цикла не выйдет,потому какбит переноса всегда сбрасывается
- Код:
subi delay3,0