shift register tanımlama

Başlatan onurinci, 05 Ekim 2022, 23:20:37

onurinci

hocam ben bu programı 10 yıl evvel yazmıştım,sizde bozuk çalışan yerleri düzeltmiştiniz, bu programı attığım alet hala kusursuzca çalışmakta,tesadüfen dosyayı açınca gördüm ,PORTB tanımlamalarını özellikle kapatmışım.ilginçtirki INCLUDE "modedefs.bas" dosyasıda eklenmemiş, peki bu program B Port'un hangi pin'inin Clock Data Enable olduğunu nasıl yorumlayabiliyor. ? sevgiler.....


@ Device PIC16F628A,WDT_OFF,PWRT_ON,PROTECT_OFF, CPD_OFF,MCLR_OFF,BOD_OFF,INTRC_OSC_NOCLKOUT,LVP_OFF
DEFINE OSC 4

TRISA= %00000000 : PORTA= 0
TRISB= %00000000 : PORTB= 0
CMCON= 7 : OPTION_REG.7= 0

' Data_Pin   PORTB-0
' Clock_Pin  PORTB-1
' Enable_Pin PORTB-2

'ilk N'i yolladı   458225 mhz prescaler 127
' Load /R Counter with a Value of [ D 2304 ], MSB First 14.400 MHz Ref 6.25 KHz

RVAL VAR WORD
NVAL VAR WORD
AVAL VAR BYTE

RVAL= 2304                      ' Reference Value
NVAL= 577                       ' N Divider Value
AVAL= 37                        ' A Divider Value
                                ' SHIFTOUT Data, Clock, Mode, [Var\Bits]
                          
      SHIFTOUT 0,1,1,[RVAL\14]  ' Load /R Counter with a Value of RVAL (14 Bits), MSB First ,[ D 2304 ]
      SHIFTOUT 0,1,1,[1\1]      ' CONTROL, R = 1
'-------------------------------------------------------------------------------
      HIGH 2 :  LOW 2           ' Bring pin 8 High (PORTB-2 - ENB)  Then Back LOW
      SHIFTOUT 0,1,1,[NVAL\10]  ' Load /N Counter with a value of NVAL (10 bits), MSB First, [ D 577 ]
'-------------------------------------------------------------------------------      
      SHIFTOUT 0,1,1,[AVAL\7]   ' Load /A Counter with a Value of AVAL (7 bits),  MSB First, [ D 37 ]
      SHIFTOUT 0,1,1,[0\1]      ' CONTROL, N & A = 0
      HIGH 2 :  LOW  2          ' ENB
      
END

ete

Basic işlemci pinlerine default numaralar vermiştir.
18 pinli işlemcilerde;
PORTB pinleri 0-7 arası numaralara sahiptir. PORTA pinleri ise 8-15 arası numaralara sahiptir.
SHIFTOUT 0,1,1,[RVAL\14]   komut satırında Data Pini 0 ile gösterilmiş olup bu PORTB.0 anlamına geliyor. Benzer şekilde CLK pini ise 1 numara ile gösterilmiş olup buda PORTB.1 pinine tekabül etmektedir.
Bu varsayımdan dolayı pinleri doğru olarak bilmektedir Basic.

Yeri gelmişken şu MODEDEFS.BAS dosyası konusunda değinmek isterim.
Bu dosyayı INCLUDE olarak pek çok kişi alakası olsada olmasada programlarına ekliyorlar.
Halbuki bu dosya yanlızca aşağıdaki şekilde Seri haberleşme komutlarında bazı komut parametrelerini anlaşılır hale getirmek amacı ile kullanılmaktadır. Etkili olduğu yerler aşağıdadır.
' Serin / Serout Modes ( Serin2 / Serout2 için kullanmayınız!!!!!!

Symbol N2400  = 4       ' Driven Inverted
Symbol N1200  = 5       ' Driven Inverted
Symbol N9600  = 6       ' Driven Inverted
Symbol N300   = 7       ' Driven Inverted

Symbol OT2400 = 8       ' Open True
Symbol OT1200 = 9       ' Open True
Symbol OT9600 = 10      ' Open True
Symbol OT300  = 11      ' Open True

Symbol ON2400 = 12      ' Open Inverted
Symbol ON1200 = 13      ' Open Inverted
Symbol ON9600 = 14      ' Open Inverted
Symbol ON300  = 15      ' Open Inverted


' Shiftin Modes
Symbol MSBPRE = 0       ' MSB first, sample before clock
Symbol LSBPRE = 1       ' LSB first, sample before clock
Symbol MSBPOST = 2      ' MSB first, sample after clock
Symbol LSBPOST = 3      ' LSB first, sample after clock

' Shiftout Modes
Symbol LSBFIRST = 0     ' LSB first
Symbol MSBFIRST = 1     ' MSB first

Örnek vermek gerekir ise;
SHIFTOUT PORTB.0,PORTB.1,1,[B0,B1] şeklinde yazılması gerekn bir komut satırını Modedefs.bas dosyasını include ederek, SHIFTOUT PORTB.0,PORTB.1,MSBFIRST,[B0,B1] şeklinde kullanabiliyorsunuz. Burada MSBFIRST ifadesi daha anlaşılır bir açıklama oluyor.

Nerelerde etkili olduğunu yazdım onun dışında bu dosyayı include etmeyin.


Ete
 

onurinci

Hocam emeğinize vaktinize sağlık,çok açıklayıcı ve yol gösterici olmuş,teşekkür ederim..

Powered by EzPortal