; Приклад «Управління світлодіодами від кнопок»
; написаний для налагоджувальної платні AS-MegaM
; світлодіоди підключені до виводів PD6 і PD7 через резистори - на загальний
; провід. Кнопки - на PE4 і PE5
.include "m128def.inc"
; основна програма
begin:
; ініціалізація стека
ldi r16,low(RAMEND)
out spl,r16
ldi r16,high(RAMEND)
out sph,r16
; ініціалізація світлодіодів
ldi r16,(1<<6) | (1<<7)
out DDRD,r16
; ініціалізація виводів, до яких підключені кнопки (на вхід)
; внутрішні підтягаючі резистори підключені
; для цього в PORTE потрібно встановити відповідні біти в одиниці
ldi r16,(1<<4) | (1<<5)
out PORTE,r16
; а в DDRE - в нулі, щоб світлодіоди в початковому положенні були вимкнені
ldi r16,0
out DDRE,r16
; нескінченний цикл
forever:
in r16,PINE ; тепер в r16 знаходиться поточний "стан" кнопок
com r16 ; кнопка "натискається" нулем, тому інвертуємо регістр
lsl r16
lsl r16
; переносимо біти 4,5 у позиції 6,7 шляхом подвійного зсуву вліво по
; розрядам регістра
andi r16,(1<<6) | (1<<7) ; і оновлюємо "світіння" світлодіодів при відпусканні кнопки
out PORTD,r16
rjmp forever ; цикл виконується нескінченно
Рис. 2.3
На схемі 2.3 взято мікросхему Atmega128 і підключено два світлодіоди до виводів 31 і 32 (це біти 6 і 7 порту D).
AVR-контролери мають потужні вихідні каскади, типовий струм кожного виводу складає 20 мА, максимальний струм виводу - 40 мА, причому це відноситься як до вхідного, так і до витікаючого струму.
У нашому прикладі світлодіоди підключені анодами до виводів мікроконтролера, а катоди через гасячі резистори сполучені із землею. Це означає, що світлодіод запалюється подачею «1» на відповідний вивід порту.