Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Atmel => Konuyu başlatan: agora_meyhanesi42 - 18 Mart 2009, 11:39:58

Başlık: Atmega8 Anlamadıgım kod çalışmaması
Gönderen: agora_meyhanesi42 - 18 Mart 2009, 11:39:58
Arkadaşlar aşagıdaki *** ile işaretli satırda butona basıldıgı zaman ilgili etikete dallanması gerekiyor normalde ama proteusta denediğim zaman hiç bir işlem yapmıyor yani normal çalışmasına devam ediyor acaba sorun nedir




#include "m8def.inc"

.CSEG
.ORG 0x00
;Osilatoru ayarlıyoruz
ldi   r16,0b00001111 ;r16 ya 0x0F yi yükle
out osccal,r16     ;osilator frekansı

;stack pointeri ayarlıyoruz
ldi r16,high(RAMEND)
out sph,r16
ldi r16,low(RAMEND)
out spl,r16

;PORTC çıkış için ayarlanıyor
ldi r16,0xFF
out ddrc,r16
ldi r16,0x01
out portc,r16

;PORTD giriş için ayarlanıyor
ldi r16,0x00
out ddrd,r16
ldi r16,0xFF
out portd,r16


clt  ;T Flagı reset
ldi r16,0x01

DNN:

sbic portd,2 ;2. bit sıfır ise bir sonraki satırı atla ******
rjmp PRG0    ;Yok 2.bit bir ise PRG0 etiketine git
rcall TBIT   ;TBIT rutine atla

PRG0:    
brts SAGA    ;T Bayragı bir (1) ise SAGA etiketine git
rjmp SOLA    ;T Bayragı sıfır(0) SOLA etiketine git

SOLA:
rol r16        ;r16 içindeki sayıyı bir sola kaydır
out portc,r16  ;r16 yı portc'de göster
rjmp DNN       ;DNN etikete git

SAGA:  
ror r16        ;r16 içindeki sayıyı bir saga kaydır
out portc,r16  ;r16 yı portc'de göster
rjmp DNN       ;DNN etikete git

TBIT:
brts RESETLE   ;T Bayragı bir (1) ise RESETLE etikete git
set            ;Bir (1) değil ise set (1) yap
rjmp CIKIS     ;CIKIS etikete git

RESETLE:
clt            ;T Bayragını clear(0) la

CIKIS:
sbis portd,2   ;2. bit bir ise bir sonraki satırı atla
rjmp CIKIS     ;CIKIS etikete git

ret            ;Kim çağırdıysa onun yanına git...
Başlık: Atmega8 Anlamadıgım kod çalışmaması
Gönderen: araknafobya - 11 Kasım 2009, 18:31:04
portd,2 olarak tanımlanana ardes port d ye ait 3. bit olmaktadır
eger hata bundan kaynaklanıyorsa çözmen kolaylaşır.