Вообщем на МК ATMEGA88 был написан при помощи Avr Studio следующий код:rjmp start
.equ portb = 0x05
.equ ddrb = 0x04
.equ pinb = 0x03
.equ ddrc = 0x07
.equ portc = 0x08
.equ pinc = 0x06
.equ ddrd = 0x0A
.equ portd = 0x0B
.equ pind = 0x09
Table: .db 0xc0,0x00,0xf9,0xa4,0x00,0xb0,0x99,0x92,0x00,0x82,0xf8,0x80,0x00,0x90
start:
ldi r16, 0xFF
out ddrd, r16
ldi r16, 0xc7
out ddrb, r16
ldi r16, 0x30
out ddrc, r16
nullcount:
ldi r21, -1
ldi r20, 0
ldi r17, 0xFE
check:
out portd, r17
in r16, pinc
andi r16,0x02
breq segment1check
inc r20
in r16,pinc
andi r16, 0x04
breq segment1check
inc r20
cpi r20,15
breq nullcount
rol r17
rjmp check
segment1check:
mov r18,r17
ldi r23,2
sub r23,r18
cp r23,r20
brne segment1
rjmp segment1check
segment1:
ldi r31,high(Table*2)
add r21,r20
mov r30,r21
lpm r29,z+
out portd, r29
sbi portb,0
cbi portb,0
ldi r25,255
loop:
ldi r27,100
loop2:
dec r27
cpi r27,0
brne loop2
dec r25
cpi r25,0
brne loop
rjmp nullcount
суть когда в том, что нажимая на макете на кнопочки, на циферблате появляются цифры от 0 до 9.
по сути всё работает, но надо ответить на некоторые вопросы, ответа на которые я не знаю.
Table: .db 0xc0,0x00,0xf9,0xa4,0x00,0xb0,0x99,0x92,0x00,0x82,0xf8,0x80,0x00,0x90
зачем тут , в таблице нужны "нули" (0x00)
nullcount:
ldi r21, -1
с какой целью отнимается 1?rol r17
для чего?
ldi r31,high(Table*2)
что это значит, и для чего конкретно в этом коде нужно это?
segment1check:
mov r18,r17
ldi r23,2
sub r23,r18
cp r23,r20
brne segment1
rjmp segment1check
вот это тоже объяснить нужно..
товарищи, помогите ламеру,
зарание большое спасибо.))
с какой целью отнимается 1?
Это не вычитание, насколько я помню, команда LDI - загружает константу в регистр. А -1, имеет доп. код, где старший бит = 1.