Ponizej zamieścilem listing programu, zadanie trywialne, dioda swieci, wciskamy klawisz dioda gasnie , wciskamy ponownie swieci itd.
Przycisk NO jedna noga do masy druga do INT1 , dodatkowo podciągnięta zew. rezystorem do plusa . Symulacja pod AVRstudio dziala bezbłędnie. w fizycznej aplikacji - nie. jeśli zmieniam na wyzwalanie niskim poziomem a nie zboczem opadajacym to dziala poprawnie tyle ze trzymajac wcisniety przycisk caly czas wywolywane jest przerwanie . Tu wyjasnie , docelowo ma to byc licznik (enkoder z wykrywaniem kierunku ruchu )wiec przytrzymanie przycisku bedzie powodowalo ze wartość bedzie rosła , pomimo tego ze wielkosc liczona , przemieszczenie suportu nie ulega zmianie .
Prośba moze ktoś bardziej wprawny zerknie na kod . pisane bylo pod 902313 ale pod Atiny tez chodzi.
Kod: Zaznacz cały
.nolist
.include "2313def.inc"
.list
.cseg
.org 0
rjmp ResetProcessora
.org INT0addr
reti
.org INT1addr
rjmp Impuls_A
.org ICP1addr
reti
.org OC1addr
reti
.org OVF1addr
reti
.org OVF0addr
reti
.org URXCaddr
reti
.org UDREaddr
reti
.org UTXCaddr
reti
.org ACIaddr
reti
ResetProcessora:
cli
ldi r16,LOW(RAMEND)
out spl,r16
ldi r16,$08
out mcucr,r16
ldi r16,$80
out GIMSK,r16
ldi r16,0xFF
out DDRB,r16
out PORTB,r16
ldi R16,0x73
out DDRD,R16
ldi R16,0xFF
out PORTD,r16
Sei
start:
nop
rjmp start
Impuls_A:
in r16,portb
andi r16,0x01
cpi r16,0x00
breq LED_ON
cbi PORTB,0
rjmp koniec
LED_ON:
sbi PORTB,0
koniec:
reti
.exit