Я пытаюсь немного изучить сборку, играя с платой Atmega128. Я пытаюсь сделать так, чтобы набор из 8 светодиодов включался/выключался индивидуально при нажатии соответствующей кнопки.
.INCLUDE "m128def.inc"
.CSEG
.ORG $0
initialize:
ldi r16, 1<<7 | 1<<6 | 1<<5 | 1<<4 | 1<<3 | 1<<2 | 1<<1 | 1<<0
out PORTB, r16 ; Pull up resistors
ldi r16, 1<<7 | 1<<6 | 1<<5 | 1<<4 | 1<<3 | 1<<2 | 1<<1 | 1<<0
out DDRD, r16 ; set all pins on PORTD to output
test:
in r16, PINB ; input values of buttons
swap r16 ; invert so button pressed makes value low
out PORTB, r16 ; output to led
end:
rjmp test
Это работает? У меня светодиоды подключены к PortD, а кнопки к Port/PinB. Это в основном то, что я хочу сделать, написанное на C. (Я гораздо лучше разбираюсь в C, чем в ассемблере.) Возможно, это могло бы сделать это немного яснее.
DDRD = 0xFF; // set to output
DDRB = 0; // set to input
PORTB = 255; // enable pull-up resistors
while (1) {
PORTD = ~PINB;
}