Динамическая индикация
Добавлено: Сб окт 26, 2019 22:22:52
AT90USB162. Нужно чтобы два средних разряда 4-разрядного индикатора мигали. Прерывания по идее пока не должны использоваться.
В протеусе мигает, а вот настоящий микро просто светит цифры...
В протеусе мигает, а вот настоящий микро просто светит цифры...
Код: Выделить всё
.device AT90USB162
.include "usb162def.inc"
.def tmp= r16
rjmp reset ;прерывание по сбросу
.org $0040 ;*******начало основной программы
reset:
ldi tmp,High(RAMEnd)
out sph,tmp
ldi tmp,Low(RAMEnd)
out spl,tmp
ldi tmp,0b11111111
out DDRB,tmp
ldi tmp,0b11111111
out DDRD,tmp
ldi tmp,0b01100000
out PORTD,tmp
main:
ldi r21, 1 ; выводим единицы
call decode
call delay
ldi r21, 10 ;гасим
call decode
call delay
jmp main
decode:
lsl r21
ldi zh, high(DcMatrix*2)
ldi zl, low(DcMatrix*2)
ldi tmp,0
add zl,r21
adc zh,tmp
lpm r0,z
out PORTB,r0; вывод кода индикации в порт
ret
DcMatrix:
.db 0b00111111
.db 0b00000110
.db 0b01011011
.db 0b01001111
.db 0b01100110
.db 0b01101101
.db 0b01111101
.db 0b00000111
.db 0b01111111
.db 0b01101111
.db 0b00000000
delay:
ldi r17,255
ldi r18,200
ldi r19,0
ldi r20,0
_delay: subi r17,0x1
sbci r18,0
sbci r19,0
sbci r20,0
brcc _delay
ret