включение и выключение порта одной кнопкой
Добавлено: Пн апр 14, 2014 00:39:09
работает исправно прога, организован антидребезг на атмеге8 проверял, длинновата что то, как ужать код?
; одной кнопкой включаем и выключаем светодиод
.include "m8Adef.inc"
ldi r16, high(RAMEND); инициализация стека
out SPH,r16;
ldi r16, low(RAMEND);
out SPL,r16
;**************************************************************
ldi r16, 0b00000000
out DDRD, r16 ;Д на вход
ldi r16, 0b11111111
out PORTD, r16 ;подтягиваем Д к пит через рез
ldi r16, 0b11111111
out DDRC, r16 ;порт С на вых
;**************************************************************
MAIN:
rcall START
ldi r16, 0b00000010
out PORTC, r16 ;зажзигаем лед, 1 ножка порта С
rcall SUKA
rcall START
ldi r16, 0b00000000
out PORTC, r16 ;гасим лед, 1 ножка порта С
rcall SUKA
rjmp MAIN
;**************************************************************
PUKA:
ldi r16,0 ;задержка
ldi r17,10
Loop1: dec r16
brne Loop1
dec r17
brne Loop1
ret
;**************************************************************
START:
sbis PIND, 3 ;читаем порт, пропус. след. команду, если бит =1
rjmp KUKA
rcall PUKA
rjmp START
KUKA:
rcall PUKA
sbis PIND, 3 ;читаем порт, пропус. след. команду, если бит =1
rjmp KUKA1
rcall PUKA
rjmp START
KUKA1:
rcall PUKA
ret
;**************************************************************
SUKA:
rcall PUKA
sbis PIND, 3 ;читаем порт, пропус. след. команду, если бит =1
rjmp SUKA
ret
; одной кнопкой включаем и выключаем светодиод
.include "m8Adef.inc"
ldi r16, high(RAMEND); инициализация стека
out SPH,r16;
ldi r16, low(RAMEND);
out SPL,r16
;**************************************************************
ldi r16, 0b00000000
out DDRD, r16 ;Д на вход
ldi r16, 0b11111111
out PORTD, r16 ;подтягиваем Д к пит через рез
ldi r16, 0b11111111
out DDRC, r16 ;порт С на вых
;**************************************************************
MAIN:
rcall START
ldi r16, 0b00000010
out PORTC, r16 ;зажзигаем лед, 1 ножка порта С
rcall SUKA
rcall START
ldi r16, 0b00000000
out PORTC, r16 ;гасим лед, 1 ножка порта С
rcall SUKA
rjmp MAIN
;**************************************************************
PUKA:
ldi r16,0 ;задержка
ldi r17,10
Loop1: dec r16
brne Loop1
dec r17
brne Loop1
ret
;**************************************************************
START:
sbis PIND, 3 ;читаем порт, пропус. след. команду, если бит =1
rjmp KUKA
rcall PUKA
rjmp START
KUKA:
rcall PUKA
sbis PIND, 3 ;читаем порт, пропус. след. команду, если бит =1
rjmp KUKA1
rcall PUKA
rjmp START
KUKA1:
rcall PUKA
ret
;**************************************************************
SUKA:
rcall PUKA
sbis PIND, 3 ;читаем порт, пропус. след. команду, если бит =1
rjmp SUKA
ret