Jaki konkretnie procesor? ATMEL to dość ogólnie napisane

Wysłanie sekwencji 0 na port B? Co to znaczy? Czy przy starcie wartość wysyłąna na port B to ff i co jakiś czas jest dekrementowana aż do wartości 0?
Klawisze podłączone są do jakiego portu? D?
Całego programu ci nie napiszę ale coś spróbuje pomóc.
Dodano po 7 [godziny] 47 [minuty]:
Treść zadania ;Silnik krokowy jest podłączony do 4 najmłodszych wyjść ekspandera
;PCF8574 przez wzmacniacze prądowe ULN2803.
;Przepływ prądu przez wybraną cewkę silnika uzyskuje się podając
;wartość “0” na pozycje bitową odpowiadającą wyprowadzeniu ekspandera
; do którego podłączona jest cewka.
;Zatem na początku programu należy wszystkie wyjścia ekspandera
; ustawić w stan “1”.
;Interesuje mnie sterowanie jednofazowe. Przy takim sterowaniu
;w danej chwili czasu prąd przepływa tylko przez jedno uzwojenie
;silnika.
;Trzeba tak zmontowac program żeby po nacisnieciu klawisza „start”
;powtarzal petle dawania na nozki portu A: 0111, 1011, 1101, 1110,
;dopoki nie zostanie wcisniety klawisz „stop”, przy przycisku
;„zmiana kierunku” powinien zatrzymac silnik czyli dac: 1111 i za
;jakis czas dawac w odwrotnej kolejności: 1110, 1101, 1011, 0111.
;porty bez znaczenia od A do D"
Napisałem taki oto program (nieskończony)i zachowuje się on dość dziwnie. Po wciśnięciu klawisza "start" (PB6) "roluje" rejestr i powinienem obserwować wędrującą diodę na pinach PB0-4 ... Tymczasem wykonuje się tylko jeden obieg i diody gasną ... jakbym gubił gdzieś znacznik przeniesienia do operacji adc.
Ktoś widzi błąd?
nolist ;
;8515def.inc
.include "2313def.inc" ;
.list ;
.listmac ;
;***********************
;-------------------- Początek segmentu kodu (Code Segment) -------------------
.cseg ;
.org 0 ;
rjmp ResetProcessor ;
;----------------- Tabela wektorów przerwań (Interrupt Vectors) ----------------
.org OVF0addr ; Overflow0 Interrupt
rjmp Timer ;Vector Address
;---------------------------------------------------------------------------------------------
ResetProcessor : ;
ldi R16,LOW(RAMEND) ; inicjacja stosu
out SPL,R16
;ldi R16,HIGH(RAMEND) ; inicjacja stosu
;out SPH,R16 ;
ldi R16,0xff
out DDRB,R16 ; PORTB jako wyjscie,
ldi R16,0xff
out PORTB,R16; port B w stanie wysokim
ldi R16,0x0f
out DDRB,R16 ; PORTB PB0-PB3 wyjscie, reszta jako wejscie (klawisze)
ldi r16,0x80
out SREG,r16 ;odblokowanie przerwań
ldi r16,0b00000101
out TCCR0,r16 ;timer start taktowany CK/1024 impuls=128us
ldi r16,0x02
out TIMSK,r16 ;odblokowanie przerwania od timera0
;ldi r27,177 ; timer zlicza 79 impulsów co daje ok 10ms
ldi r27,0
out TCNT0,r27
ldi r21,0
ldi r23,0 ;rej pomocniczy kykorzystywany w przerwaniu w operacji ADC
;******czekamy na klawisz**************
ldi R20,0xf0
out PORTB,R20; PB0-PB3 ustawione w stan 0
Main_0:
ldi r26,10
rcall Czekaj
in R20,PINB ; wczytanie PORTB do R20
andi R20,0b01110000 ; pozostawienie w r20 PB4-PB6
cpi R20,0b01110000 ;sprawdzenie czy wciśnięty klawisz
breq Start
Main_1 :
cpi R20,0b00110000 ;wcisnieto start
brne Main_2
ldi R22,0b10001000
ldi R21,1 ;gdy w r21 jest 1 to wykonuje się start
rjmp Start ;
Main_2 :
cpi R20,0b01010000 ;wcisnieto stop
brne Main_3
ldi R21,2 ;gdy w r21 jest 2 to wykonuje się stop
rjmp Stop ;
Main_3 :
cpi R20,0b01100000 ;wcisnieto zmiane kierunku
brne Main_0
ldi R21,3 ;
rjmp Zmiana
;wykonaj akcje
Start:
cpi R21,1 ;wcisnieto start
brne Stop
rol r22 ;obróc w lewo r22
adc r22,r23 ;dodanie znacznika C (przeniesienie)
clc ;zerowanie znacznika przeneisienia C
out PORTB,R22
rjmp Main_0 ;
Stop:
cpi R21,2 ;wcisnieto stop
brne Zmiana
;ror r22 ;obróc w prawo r22
ldi r22,0xf0
out PORTB,R22
rjmp Main_0
Zmiana:
cpi R21,3 ;wcisnieto zmiane kierunku
brne Main_0
ldi R22,0xFf
out PORTB,R22
rjmp Main_0
;***********************
Czekaj: ;czeka aż licznik zmniejszy r17 do 0
cpi R26,0;
in r18,SREG ;do sprawdzenie znacznika Z
sbrc r18,1 ;(zero) Z na drugiej pozycji SREG
ret
rjmp Czekaj
;************************
Timer:
in r25,sreg ;zapamiętanie rejestru statusowego
out TCNT0,r27
DEC R26
out sreg,r25 ;odtworzenie rej stat.
reti
.exit
Dodano po 22 [minuty]: W przerwaniu (timer) próbuje zachowaś status register ale zauważyłem że czekając na przerwanie w "Czekar" SREG=0x80 natomiast zaraz po wejściu do przerwania w linijce
in r25,sreg jest on równy 0! Więc moje zapisywanie go do r25 nic nie daje.
W czym problem?[/quote]