DİZİ ELEMAN SAYISI

Başlatan picman, 19 Mart 2005, 23:05:47

picman

BEYLER BEN BİR KAYAN YAZI PROGRAMINI ASM KOMUTLARIYLA YAZDIM VE HER BİR SUTUNU SUTUN ADINI VERDİĞİM DİZİ İLE TANIMLADIM
AŞAĞIDAKİ GİBİ


SUTUN        EQU 0X0C                 ;SUTUN REGİSTER DİZİSİ
COUNT        EQU 0X1D                 ;SAYICI REGİSTERİ
CHAR_SUTUN   EQU 0X1E               ;KARAKTERIN SUTUN SAYISI
LINE         EQU 0X1F                 ;DÖNÜŞTÜRME TABLOSU İÇİN OFSET REGİSTERİ
KARAKTER     EQU 0X20                 ;ULAŞILACAK KARAKTER SAYISI
SUTUN_SAYAC  EQU 0X21                 ;SUTUN SAYAC REGİSTERİ
SIRA_SAY     EQU 0X22                 ;ALINAN KARAKTERİN TABLODAKİ SIRA SAYISI                                      
SAYAC        EQU 0X23                 ;TIMER INTERRUPT İÇİN SAYAC REGİSTERİ
_STATUS      EQU 0X24                 ;STATUS REGİSTERİNİN KOPYASI
WORKING      EQU 0X24                 ;WORKİNG REGİSTERİNİN KOPYASI
I            EQU 0X26                 ;TEMİZLEME ALTPROGRAMI İÇİN DONGU REGİSTERİ
VERI         EQU 0X27                 ;ALINAN KARAKTERİN ASCII DEĞERİNİN SAKLANDIĞI REGİSTER
SAYICI1      EQU 0X28                 ;ZAMAN GECİKME ALT PROGRAMMI İİÇİN SAYAC1
SAYICI2      EQU 0X29                 ;ZAMAN GECİKME ALT PROGRAMI İÇİN SAYAC2
SAYICI3      EQU 0X30                 ;ZAMAN GECİKME ALT PROGRAMI İÇİN SAYAC3

VE GÖRÜNTÜNÜN NOKTA MATRİS DİSPLAYDE OLUŞMASI İÇİN BİR TARAMA ALT PROGRAMINI AŞAĞIDAKİ GİBİ HAZIRLADIM

TEKRAR       CLRF PORTB       ;PORTB İÇERİĞİ SIFIRLANIR (BU ANDA 74164 ENTEGRESİ RESETLENİR)
            NOP              ;BİR KOMUT SAYKILI BEKLE
            NOP              ;BİR KOMUT SAYKILI BEKLE
            MOVLW B'01001'   ;DATA 1,CLOCK 0,RESET 1
            MOVWF PORTA      ;BU BİLGİLERİ PORTA YA YUKLE          
            NOP              ;İKİ KOMUTSAYKILI
            NOP              ;BEKLE
            MOVLW B'01011'   ;DATA 1,CLOCK 1(74164 ENTEGRESİ İÇİN YUKSELEN KENAR TETİKLEMESİ)RESET 1
            MOVWF PORTA      ;BİLGİLER PORTA YA YÜKLENİR
            MOVLW SUTUN      ;SUTUN DİZİSİNİN BAŞLANGIÇ ADRESİ ÇAĞRILIR
            MOVWF FSR        ;BAŞLANGIÇ ADRESİ FSR REGİSRERİNE YÜKLENİR
PALS        MOVF INDF,W      ;FSR REGİSTERİNE YÜKLÜ ADRESTEKİ SUTUN DİZİSİNİN İÇERİĞİ WORKİNG REGİSTERE YÜKLENİR
            MOVWF PORTB      ;BİLGİ PORTB YE AKTARILIR
            CALL TIMER       ;ZAMAN GECİKMESİ ALT PROGRAMINA GİDİLİR
            MOVLW B'01010'    ;\
            MOVWF PORTA       ; \
            NOP               ;  \   74164 ENTEGRESİ İÇİN PALS SİNYALİ
            NOP               ;  /   ÜRETİLİR BİRSONRAKİ SUTUN SEÇİLİR
            MOVLW B'01000'    ; /
            MOVWF PORTA       ;/
            INCF FSR          ;BİR SONRAKİ SUTUN DİZİSİNE ULAŞILIR  
            BTFSS PORTA,2     ;TARAMA İŞLEMİ TAMAMLANDIMI?  
            GOTO PALS         ;HAYIR TARAMAYA DEVAM ET
            MOVLW B'01010'    ;\
            MOVWF PORTA       ; \
            NOP               ;  \   74164 ENTEGRESİ İÇİN PALS SİNYALİ
            NOP               ;  /   ÜRETİLİR BİRSONRAKİ SUTUN SEÇİLİR
            MOVLW B'01000'    ; /
            MOVWF PORTA       ;/        
            CALL TIMER        ;ZAMAN GECİKME ALT PROGRAMINA GİT
            RETURN            ;TARAMA ALT PROGRAMINDAN ÇIK

BU SAYEDE HER BİR SUTUN REGİSTERİ OKUNUYOR VE PORTB YE GÖNDERİLİYOR BU PROGRAMI HEX E DÖNÜŞTÜRÜP PROTEUSTA DENEDİM AMA PROGRAM ÇALIŞMADI SUTUN DİZİSİNİ 8 ELEMANLI YAPTIĞIM ZAMAN PROGRAM ÇALIŞIYOR FAKAT SUTUN DİZİSİNİN ELEMAN SAYISINI ARTIRDIĞIM ZAMAN PROGRAM TIKANIYOR (PROTEUS TA) BUNUN NEDENİNİ ANLAYAMADIM ASM DE DİZİNİN ELEMAN SAYTISI SINIRLIMIDIR SINIRI VARSA KAÇTIR BU KONU HAKKINDA BİLGİSİ OLAN ARKADAŞLAR DAN YARDIM BEKLİYORUM
Bilgi paylaştıkça artar..

by-electro

slm ben fsr register ın tam olarak nasıl kullanılacağını bilmiyorum yardımcı olursanız sevinirim bende kayan yazı devresiyle uğraşıyorum

HEXF2

dostum FSR registeri fiziksel bir yazmaç değildir RAM bölgesinin istediğimzi bir adresine ulaşmamızı sağlar yani sıralı adreslere FSR deki adres içeriği ise INDF register'ında görülür mesela sen 5 elemanlı bir değişken listesi hazırladın ve bunların içeriğini temizlemek istiyorsun

değişkenlerin başlangıç adresi 0x20 olsun bitiş adresi de 0x25 olsun

Bu tanımladığın adresler biliyorsun RAM bölgesindeki adresler dir.

Şimdi de kaç tane değişken tanımladıysak bunu miktari da cnt değişkenine yazalım 5 değişken tanımlamıştık o zaman cnt içine 5 yazıcaz

Bu hazırladığımız değişkenleri SIRA ile temizlemek için değişkenlerin başlangıç adresini FSR ye yazarız FSR deki adres içeriği INDF de gözükeceğinden clrf komutu ile INDF nin içeriği sileriz daha sonra FSR adresini bir arttırır yine INDF içeriğini temizleriz kaç değişken hazırladıysak bu işlem bu kadar devam eder aşağıya bir sample hazırladım işini görür


          movlw     5              ;Değişkenlerin adetini
          movwf     cnt           ;Cnt ye yükle
          movlw     0x20         ;Değişkenlerin başlangıç adresi
          movwf     FSR          ;FSR te yükle
clear    clrf          INDF         ;FSR deki adresi temizle
          incf          FSR          ;Dizinin bir sonraki elememanın adresi
          decfsz      cnt,F         ;Bütün değişkenler temizlendi mi
          goto         claer        ;hayır devam et
          return                      ;Evet geri dön