;Алгоритм сканирования кнопок на одном порте.Нажимая кнопки будет загораться светодиод.
.include "tn2313def.inc"
.list
.def temp=r16
.def count=r17
.def k=r18
.def j=r19
.cseg
.org 0
ldi temp,ramend
out spl,temp
ldi temp,0x80
out acsr,temp
ldi temp,1
out ddra,temp
ldi temp,0
out porta,temp
out ddrd,temp
ldi temp,255
out portd,temp
main: clr count ;будем очищать этот регистр все время
ldi temp,0 ;выключаем светодиод
out porta,temp ;на порте А
in temp,pind ;читаем кнопки
check: lsr temp ;сдвигаем бит вправо
brcc proc ;проверяем бит переноса в SREG
;если например нажали первую кнопку-000 0001,то при сдвиге в право
;эта единица попадёт с бит переноса и при проверке мы попадём на
;метку proc,если нажали вторую кнопку-000 0010,то будем увеличивать
;на единицу count
inc count
cpi count,7 ;сравниваем count с числом 7
brne check ;если ещо не 7 сдвигаем temp есчо на 1
rjmp main ;и всё заново
proc: ldi temp,1 ;включаем светодиод
out porta,temp
rcall delay ;немного задержки
rjmp main ;и опять на сканирование кнопки
delay: ldi j,255
jloop: ldi k,255
kloop: dec k
brne kloop
dec j
brne jloop
ret
НАЗАД Assembler PIC Си AVR ДАЛЬШЕ