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

по МК и не только
Ответить
Lamer
Сообщения: 2
Зарегистрирован: 13 май 2011, 03:32

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

Сообщение Lamer » 13 май 2011, 03:41

Вообщем на МК 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 13 май 2011, 03:48, всего редактировалось 1 раз.

Lamer
Сообщения: 2
Зарегистрирован: 13 май 2011, 03:32

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

Сообщение Lamer » 13 май 2011, 03:45

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


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

Аватара пользователя
Мужик
Сообщения: 39
Зарегистрирован: 15 ноя 2008, 21:36

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

Сообщение Мужик » 28 ноя 2011, 21:26

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

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей