Ребята помогите раз...
 
Уведомления
Очистить все

Ребята помогите разобраться с кодом

3 Посты
2 Пользователи
0 Likes
8,338 Просмотры
Lamer
(@lamer)
New Member
Присоединился: 13 лет назад
Сообщения: 2
Topic starter  

Вообщем на МК 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.


Цитата
Lamer
(@lamer)
New Member
Присоединился: 13 лет назад
Сообщения: 2
Topic starter  

по сути всё работает, но надо ответить на некоторые вопросы, ответа на которые я не знаю.
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
вот это тоже объяснить нужно..

товарищи, помогите ламеру,
зарание большое спасибо.))


ОтветитьЦитата
Мужик
(@yk)
Eminent Member
Присоединился: 16 лет назад
Сообщения: 39
 

с какой целью отнимается 1?
Это не вычитание, насколько я помню, команда LDI - загружает константу в регистр. А -1, имеет доп. код, где старший бит = 1.


ОтветитьЦитата