Visual Basic 6.0 Rehberi (Türkçe)

Başlatan OG, 20 Mayıs 2006, 03:42:33

OG

16F84 ILE SERI PORT http://rapidshare.com/files/210056574/16F84_ILE_SERI_PORT.pdf


Alıntı YapSeri porttan haberleşme
Visual Basic (VB), diğer dillerden farklı olarak seri port haberleşme için hazır bir
bileşen sunar. Microsoft Comm Control olarak adlandırılan bu bileşen seri portla ilgili bir
çok ayarı beraberinde getirmektedir.
Comm bileşenini form üzerine getirmek için aşağıdaki yol takip edilir.
· Projects menüsünden Components alt başlığı seçilir.
· "Controls" sekmesinden "Microsoft Comm Control 5.0 " yada VB sürümüne
bağlı olarak "Microsoft Comm Control 6.0 " seçilir.
Seçim yapıldıktan sonra alet kutusunun (toolbar) alt tarafında Comm bileşeninin
sembolü görünür. Üzerinde telefon resmi olan bileşen seri portla haberleşmede kullanılacak
Comm bileşenidir.
MsComm bileşeni MSCOMM32.OCX dosyasını kullanılır. Bunun \WINDOWS\
SYSTEM dizininde olması gerekiyor. VB, seri haberleşmesi sürücüsü olarak serialui.dll
dosyasını, MsComm'un arka planında kullanmaktadır.
Kullanılacak her bir seri port için form üzerine bir MsComm bileşeni konur.

Program satırlarında MsComm'un üç özelliği kullanıldı. PortOpen, Output ve Input.
PortOpen: "True" değeri verilerek geçerli port kullanıma açılır.
MsComm1.PortOpen=True
Output: Porta bilgi gönderir. Özellikler penceresinde görünmez.
MsComm1.Output=" MAVİ MENEKŞE"
Output özelliği verilerin hem metin hem de ikilik düzende gönderilmesini sağlar.
"String" tipinde tanımlanan bir değişkeni metin, bayt dizisi olarak tanımlanan bir değişkeni
ikilik düzende gönderir.
‘ İkilik olarak
Dim Talebe() As Byte
.....................................
MsComm1.Output=Talebe
‘Metin olarak
Dim Talebe() As String
MsComm1.Output=Talebe
‘Modeme bir komut göndermek için
MsComm1.Output="ATDT 123-87654"
Input: Belirtilen seri porttan bilgi okur. Okuma işlemi giriş tamponunu da boşaltır.
Text1.Text=MsComm1.Input
Burada iki özellik kullanılmasına rağmen esasında MsComm'un "özellikler"
(properties) kutusunda yazılı olan değerler geçerli kabul edilmişlerdir. İstenirse bu değerler
program satırlarında da değiştirilebilir.
CommPort: Kullanılacak seri port seçilir ve seçilen port numarası okunur.
MsComm1.ComPort=1 ‘Com1 seçilir
Port numaraları 1-99 arasında olabilir.
Settings: Geçerli port ayarları yapılır ve geçerli ayarlar okunur.
MsComm1.Settings="9600,N,8,1" ‘9600 baud hızı, Eşlik biti yok, 8 veri
biti, 1durdurma biti
MsComm'un kabul ettiği baud hızları: 110, 300, 600, 1200, 2400, 9600, 14400,
19200, 38400, 56000, 128000, 256000. Varsayılan değer 9600 dür.
Geçerli eşlik bitleri: E(Even), M(Mark), N(None), O(Odd), S(Space). Varsayılan
olarak None (yok) atanmıştır.
Geçerli bit sayıları: 4, 5, 6, 7, 8. Varsayılan değer 8.
Geçerli durdurma(stop) bitleri: 1, 1.5, 2. Varsayılan değer 1.
InputLen: Seri porta gelen bilgiler tampon belleklerde tutulur. Bu bilgiler okunurken kaç
karakterlik bloklar halinde okunacağını belirtir. 0 değeri atanırsa tek seferde bilgiler okunur.
InBufferCount: Kabul edilen her karakter bir alıcı tamponuna konulur ve InBufferCount
sayısı bir arttırılır. Tamponda bekleyen karakter sayısı, bu değer okunarak öğrenilir. 0 değeri
atanarak tampon boşaltılır.
Örnek kod:
If MSComm1.InBufferCount Then
Varna$ = MSComm1.Input
End If
OutBufferCount: Gönderici tampon alanında sırasını bekleyen karakter sayısını verir. 0
verilerek gönderici alan silinir.
OutBufferSize: Verici için tampon bellek miktarı. Ne kadar büyük bellek ayrılırsa programın
çalışmasına o kadar az yer kalır. Fakat günümüzde bellek kapasitesi yüksek olduğundan
programın ihtiyacına göre belirlenir. Varsayılan değer 512'dir. Bu değer azaltılabilir veya
arttırılabilir.

Alıntı YapVisual Basic İle Seri İletişim Portu Kullanımı.
'Serkan UCAR

'NightBLuex@hotmail.com

'24.11.2001 04:10:00

Selam Arkadaslar.
Bu makalemizin konusu Visual Basic MSCOMM nesnesi hakkında olacak.
Nedir bu MSCOMM ne işe yarar.
Mscomm seri iletişim kontrolüdür.
Bunu kullanmak için önce Toolbox'u ters tıklıyoruz.Menuden Components sekmesini tıklıyoruz.
Yine Menuden Microsoft comm kontrols 6.0 ı seciyoruz.Tamamı tıklıyoruz :).
Kullanılan .ocx windows\system\mscomm32.ocx dosyasıdır.

Simdi.Açtıgımız forma bir tane MSComm ilave edelim.
Ekledigimiz MSComm1 nesnesinin custom özelligine baktıgımızda General kısmında ilk olarak
hangi port'u kullanacagımız yazar.Oraya kullanacagımız port numarasını yazıyoruz.
Genel olarak seri portları Fare,modem ve ethernet kartları kullanır.
General menusunde setting kısmının karsısında 9600,n,8,1degerleri görecegiz.
9600 : yazan kısım Haberleşme için kullanılacak Hızı belirler.(bps cinsinden)
n :yazan kısım Hata kontrolu için ek bir bit ekler.'n=Parity YOk :)
8:Kullanılacak Bit sayısını ifade eder.
1:Ise Mesajın bittigini belirtmek için kullanılan bit sayısıdır.

Şimdi program kodu ile neler yapabilecegimiz üzerinde duralım.
Mscomm nesnesi hangi yöntemleri kullanır.Bir Bakalım.
MSComm1.commport = 1' Yukarda da anlattıgım gibi kullanılacak portun numarasını belirler.
MSComm1.settings ="9600,n,8,1" '9600 bps hızında,Parity biti yok,8 Bitlik veriler,1 bit stop biti seklinde ayarla.
MSComm1.portopen =True 'portu ac

Eger Porttan bilgi okumak istiyorsak kod su sekilde olur.TexBoxtan okutulan bilgiyi
mscomm1.input degerine eşitlenerek saglanır.
textoku.text=mscomm.input

Eger porta bir bilgi yazıdrmak istiyorsak yazdıracagımız degeri mscomm.output 'a eşitliyoruz.
mscomm1.output = " Hi Visual Basic"

Portu kullanıma kapamak içinde Yine mscomm1.portopen=False yazıyoruz.

Şimdi bunları ufak iki ornekle pekiştirelim.
İlk örnegimiz porta Bir mesaj göndermek olsun.

Bunun için formun üzerine bir tane textbox (txtmesaj) bir tane command (cmdgonder) bir
tanede mscomm (mscomm) nesnesi ilave ediyoruz.

Private Sub cmdgonder_Click()
On Error GoTo hata
Mesaj = txtmesaj.Text
MSComm.Output = Mesaj
Exit Sub
hata:
MsgBox "Mesaj Yollanamadı"
End Sub

Private Sub Form_Load()
MSComm.CommPort = 1
MSComm.Settings = "9600,N,8,1"
On Local Error GoTo hata
MSComm.PortOpen = True
Exit Sub
hata:
MsgBox "Port Acılamıyor"
End Sub



İkinci ornegimiz ise modeme "ATDT" modem komutu ile arama yaptırmak.
Bunun için öncelikle Bilgisayarım/Denetim Masası/ içindeki modem iconunu tıklıyoruz.
Modem özelliklerinden Baglantı noktası kısmına bakıyoruz modemimiz hangi portu kullanıyor.
Ornegin benim modemim Com 4'ü kullanıyor ve kodları ona göre yazıyorum.

Ewet bir form acıyoruz.
Yine bir tane textbox (txtnumara) bir tane command (cmdara) ve
bir tanede (konu başlıgı :) Mscomm(mscomm) ilave ediyoruz.



Private Sub cmdAra_Click()
On Error GoTo Hata
num = txtnumara.Text
MSComm.Output = "ATDT" & num & vbCr
Exit Sub
Hata:
MsgBox "Hata"
End Sub


Private Sub Form_Load()
MSComm.CommPort = 4
MSComm.Settings = "9600,N,8,1"
On Local Error GoTo Hata
MSComm.PortOpen = True
Exit Sub
Hata:
MsgBox "Port Acılamıyor"
End Sub

'F5 tusuna basınca textbox a girdigimiz numarayı aradıgını görüyoruz. :)"
'Konuyu Anladık Sanırım.Benden Bu Kadar.Geliştirmek size kalmış :).

Alıntı YapVB 6.0 İLE SERİ PORT KONTROLÜ
VB'de kontrolüne geçmeden önce seri iletişimden kısaca bahsedeyim: Seri iletişim bilgisayarın seri portundan RS232 protokolünce verinin ardarda 1 ve 0'lar biçiminde gönderilmesiyle yapılan haberleşme şeklidir. 9 ve 25 pinli olmak üzere 2 türlü seri port vardır. Yaygın olanı ise 9 pinli olanlarıdır ve biri 4, diğeri de 5 pinli olan 2 sıradan oluşur. 4 pinli olan sıra altta bulunacak şekilde bakıldığında 5 pinli olan sıranın ortadaki pini portun çıkış pini(TX), bu pinin sağındaki pin giriş pini(RX) ve o sıranın en solundaki pin ise toprak (referans) pinidir. Seri port 12V düzeyinde çalışır ve bu yüzden de 5V seviyesine düşürülmeden bir mikrodenetleyici ile doğrudan bağlantı kurulması mikrodenetleyici için sakıncalıdır. 5V seviyesindeki veriyi seri porta 12V ile ulaştıran ve seri porttan gelen 12V düzeyindeki veriyi 5V seviyesine düşüren MAX232 yongası bu sorunu çözmek için kullanılabilir.
Gelelim seri portun VB'de kontrolüne: Öncelikle seri port kontrolü için gereken RS232 protokolüne göre haberleşmemizi sağlayacak olan "mscomm32.ocx" dosyasına ihtiyacımız var. Bu dosya bileşenini formunuza eklemek için toolbox alanına sağ tıklayıp "components" tuşunu tıklayın, beliren menünün "Controls" sekmesinde "Microsoft Comm Control 6.0" kontrolünü seçip "Tamam" tuşunu tıkladığınızda bu dosya bileşeni eklenmiş olur ve toolbox alanında "MSComm" tuşu belirir. "MSComm" tuşunu sürükleyip formunuza bırakın. Şimdi ise forma eklediğiniz "MSComm" kontrolünün haberleşme ayarlarını yapmanız gerekli. Bunu da formda bulunan MSComm kontrolünü tıklayıp özellikler kısmından yapabilirsiniz. "Commport" bilgisayarın kaç numaralı seri portunun kontrol edileceğini gösterir. Settings kısmına da sırasıyla saniyede kaç bit gönderileceği(baud rate), parite biti kullanılıp kullanılmayacağı, verinin kaç bitten oluşacağı ve kaç stop biti olacağı sorularının cevapları yazılır. Örneğin: "9600,n,8,1" demek; Hız 9600bps, parite biti yok, 8 veri biti var, 1 stop biti var anlamına gelir. Burada belirlediğiniz ayarların bilgisayarınızın seri port iletişimi ayarlarıyla uyuşması gerekir. Bilgisayarınızın seri port iletişim ayarlarını da şu şekilde düzenleyebilirsiniz: "Bilgisayarım"a sağ tıklayın, "donanım" sekmesinde "aygıt yöneticisi"ne girin,"bağlantı noktaları"nı açın. Burada LPT paralel portu, COM ise seri portu temsil eder. Kontrol etmek istediğiniz seri portu sağ tıklayıp "özellikler"e girin, "Bağlantı Noktası Ayarları" sekmesinde "Saniyedeki bit sayısı" ile "BAUD RATE" değerini, "Veri bitleri" ile kaç veri biti kullanacağınızı, "Eşlik" ile parite biti kullanıp kullanmayacağınızı, "Dur bitleri" ile de kaç stop biti kullanacağınızı ayarlayabilirsiniz. Şimdi tekrar VB'ye dönelim: Forma 4 adet tuş ekleyin, biri seri portu açmak için "başlat", biri portu kapatmak için "bitir", biri gelen veriyi okumak için "verial", diğeriyse veri göndermek için "verigönder" olsun. Bu durumda aşağıdaki kodları kullanabilirsiniz. Hepinize iyi çalışmalar arkadaşlar.

Dim input, output As String
_____________________________________


Private Sub başlat_Click()
MSComm1.PortOpen = True
End Sub
_____________________________________


Private Sub bitir_Click()
MSComm1.PortOpen = False
End Sub
_____________________________________


Private Sub verial_Click()
input=MSComm1.Input
End Sub
_____________________________________


Private Sub verigönder_Click()
MSComm1.Output= output
End Sub

Alıntı YapSeri port kullanımının nekadar kolay ve basit olduğunu vereceğim ufak örneklerle sizlere göstermek istemekteyim. Formumuzda 1 command ve 1 adet label bulunmaktadır ve bunların görevlerini yazılımın üzerinde inceleyerek gidelim.

Private Sub Command1_Click()
Dim veri, L As String
MSComm1.Output = "SERI PORTTAN MERHABA"
veri = MSComm1.Input
Label1.Caption = veri
End Sub

Private Sub Form_Load()
MSComm1.CommPort = 2
MSComm1.Settings = "9600,n,8,1"
MSComm1.PortOpen = True
End Sub

Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False
End Sub

Form_Load'da Mscomm1.Commport bilgisayarın hangi numaralı seri portunu kullanıcağımız belirtilmektedir. Bu numara form yüklenirken girilebileceği gibi daha sonradanda atanabilir ve değiştirilebilmektedir. Mscomm1.Settings ise Baud oranını 9600, veri bit sayısını 8, stop bit sayısını 1 ve paritisiz iletişim özelliklerini seçtik ve Portopen = True ilede portu aktif ettik. Eğerki bu portu herhangi bir mikrodeneteyici, bilgisayar veya bir başka bir cihaz tarafından kullanılıyor ise hata verecektir.

Butonumuza bastığımız zaman Mscomm1.Output= "..........." komuduyla beraber programımızdan veri gönderilecek ve daha sonra veri=Mscomm1.Input la ise gönderilen veri bittikten sonra karşıdan okunan veri, veri isimli değişkene atanacak ve label1 e yazılacaktır.

Burada dikat etmeniz gereken en önemli husus form kapanırken Mscomm1.Portopen= False demeyi unutmamanızdır. Unuttuğunuz taktirde porttak iletişim açık kalacak ve bir daha açışınızda hata ile karşılacaksınızdır.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

OG

Alıntı YapVB60 - PIC16F628 2X16 LCD HABERLEŞMESİ

VB60 LCD KONTROL PROGRAMI İÇİN FORM OLUŞTURDUKTAN SONRA;

1 ADET CHECKBOX
1 ADET COMBOBOX
3 ADET COMMANDBUTTON
KOMPONENTLERDEN 1 ADET MSCOMM
3 ADET TEXTBOX
1 ADET Timer (Timer.INTERVAL=100 OLARAK AYARLANIR)

EKLEYİP FORMUNUZU DÜZENLEYİN. AŞAĞIDAKİ KODLARI EKLEYİNİZ.

----------------------------------------------------------------------------------------------------------
Private Sub Combo1_Click()
'COMBODAN PORT SEÇİMİ YAPILDI
MSComm1.CommPort = Combo1.ListIndex + 1

End Sub

Private Sub Command1_Click()
If Text1 = "" Then Text2 = "LÜTFEN MESAJ YAZINIZ.": GoTo ATLA


'CHECK BOX A İŞARET ATILIR.
Check1.Value = Checked
Text2 = "MESAJ GÖNDERİLİYOR......."
ATLA:

End Sub

Private Sub Command2_Click()
End
End Sub


Private Sub Command3_Click()
Text3 = "1" ' KARAKTER SAYACI BAŞA ALINIR.

MSComm1.Settings = "9600,N,8,1"
'rs232 ile ilgili ayarlar

MSComm1.PortOpen = True
'port açiliyor

MSComm1.Output = Chr(128)
'Text penceresine yazilan deger pic'e gonderiliyor

MSComm1.PortOpen = False
'port kapatiliyor
Text2 = "LCD SİLİNDİ."
End Sub

Private Sub Form_Load()
Combo1.AddItem "COM1"
Combo1.AddItem "COM2"
Combo1.ListIndex = 0
Text2 = "DEVREYİ COM1 PORTUNA TAKINIZ, TÜRKÇE KARAKTER KULLANMAYINIZ."
Text3.Text = "1"

End Sub

Private Sub Timer1_Timer()
If Check1.Value = Checked Then
If Text1 = "" Then Text3 = "1"
I = Val(Text3.Text)

DEVAM:
If Mid(Text1.Text, I, 1) = "" Then Text2 = "MESAJ GÖNDERİLDİ.": Text3 = "1": GoTo SON
MSComm1.Settings = "9600,N,8,1"
'rs232 ile ilgili ayarlar

MSComm1.PortOpen = True
'port açiliyor



MSComm1.Output = Mid(Text1.Text, I, 1)
' Text penceresine yazilan deger pic'e gonderiliyor

MSComm1.PortOpen = False


I = I + 1
If I = 33 Then I = 1: Text2 = "MESAJ GÖNDERİLDİ.": GoTo SON

Text3.Text = Str(I)
GoTo DEVAM

Else
End If

SON:
Check1.Value = Unchecked

End Sub

----------------------------------------------------------------------------------------------------------------

ŞİMDİ SIRA PIC 16F628 Lİ DEVYERİ KURMADA VE PROGRAMINI YÜKLEMEDE..

DEVRE ŞEMASI:
LCD D0 D1 D2------ D7= RB0 -RB1 RB2------- RB7
LCD E = RA0
LCD RW = GND
LCD RS = RA1

LCD VDD= +5V
LCD VSS= GND

LCD VEE = 10K POT ORTACU (POTUN DİĞER UCLARI +5V VE GND'YE BAĞLANIR)

SERİ PORT BAĞLANTI SOKETİ;

COMPIN9 TX (3) = RA3 'E SERİ 10K DİRENÇLE BAĞLANIR !....
COMPIN9 (5) = GND

PIC16F628 PIN 4 = +5V

PIC ASM KODLARI:


; LCD ekrana rs232 com 9pin tx veri gönderme

;*************************************************************************
    LIST P=16F628     
    INCLUDE "P16F628.INC"        
__CONFIG H'0030'


;------------------------------------
CNTL    EQU    0X20        ;zaman gecikme sayacı
CNTH    EQU    0X21        ;zaman gecikme sayacı
CX    EQU    0X22        ;genel amaçlı sayaç    
CY    EQU    0X23        ;SÜTUN SAYACI

S1    EQU    0X24
S2    EQU    0X25
S3    EQU    0X26
SN    EQU    0X27
;------------------RS232 DEĞİŞKENLERİ---------------
cycl_1     Equ    0x28        ; sayıcı
cycl_2    Equ    0x29        ; sayıcı
rs232in    Equ    0x2A        ;temp variable To pass its value To portb
Byte    Equ    0x2B        ;variable used To locate 8 bit
Temp    Equ    0x2C        ;temp variable For pause Time
In    Equ    2        ;RA2 Is Input
;--------------------------------------------------------
Text    EQU    0X2D        ;TEXTBOX 'TAKİ VERİ
D_LCD    EQU    0X2E
DX    EQU    0X2F
P_W    EQU    0X30
P_ST    EQU    0X31
KOM    EQU    0X32
;İLK SATIR 0X40--0X4F
;İKİNCİ    SATIR    0X50--0X5F

;--------------
#DEFINE    EN    PORTA,0        ;LCD ENABLE UCU
#DEFINE    RS    PORTA,1        ;LCD RS UCU
                ;RW UCU GND YE BAĞLANDI.

    ORG    0X00
    GoTo    INITIAL
    ORG    0X04
    GoTo    KESME

;----------------portlar hazırlanır-----------------
INITIAL
    BSF    STATUS,RP0
    CLRF    TRISB        ;PORTB --> DB0---DB7 ÇIKIŞLARI
    CLRF    TRISA    
    BSF    TRISA,2        ;RA2 --> RS232 COM PORT TX GİRİŞİ
            
    ;-----TMR0 KESME AYARLARI--------------
    MOVLW    b'10100000'    ;INTCON düzenleme bilgisi W'ye yazılır.TÜM KESME İPTAL
    MOVWF    INTCON        ;W'ye INTCON 'a aktarılır.
    MOVLW    b'10000101'    ;Option düzenleme bilgisi W'ye yazılır.
    MOVWF    OPTION_REG    ;W'ye Option 'a aktarılır.(PRESCALER=64) PULL-UP İPTAL D7.

    BCF    STATUS,RP0
;------LCD ÖN AYARLARI YAPILIYOR---
LCD_INI
    Call    LCD_RESET
    Call    TIMER_LOW
    MOVLW    0X01        ;CLEAR
    MOVWF    D_LCD
    Call    KOMUT

    MOVLW    0X38        ;TWO_LINE
    MOVWF    D_LCD
    Call    KOMUT

    MOVLW    0X0E        ;DISPLAY_ON KURSÖR On BLINK OFF
    MOVWF    D_LCD
    Call    KOMUT

    MOVLW    0X06        ;KURSÖR_INC DISPLAY
    MOVWF    D_LCD
    Call    KOMUT
    MOVLW    .16
    MOVWF    CY
    
    MOVLW    0X50
    MOVWF    FSR    
;------------------------------------------------------
    MOVLW    0X07
    MOVWF    CMCON        ;16F628 İN PORTLARI (PORTA) HAZIR..
;--------------------------------------------------------------------



;===================================================================================================



Loop
    
    
    Call    ser_RX        ; ser_RX dallan
    
    BTFSC    KOM,7
    GoTo    INITIAL

    Call    VERI_YAZ    
    DECFSZ    CY,F
    GoTo    Loop

    MOVLW    0XC0
    Call    KOMUT
    MOVLW    .16
    MOVWF    CY
    

LOOP2
    Call    ser_RX        ; ser_RX dallan
    
    
    BTFSC    KOM,7
    GoTo    INITIAL

    Call    VERI_YAZ    
    DECFSZ    CY,F        
    GoTo    LOOP2
        
    MOVLW    0X80
    Call    KOMUT
    MOVLW    .16
    MOVWF    CY        

    GoTo    Loop

    

;**********************************************************
;receive one Byte To 'Byte', 'rs232in' And w respectively

ser_RX
    clrf    Byte            ; Byte temizle
    movlw    5
    movwf    cycl_1            ; 5 times for5 bits
    btfss    PORTA, In        ; wait until Startbit
    GoTo    ser_RX            ; If no startbit GoTo ser_RX
    Call    Pause            ; pause For 1/2 Bit (48 usec)
    btfss    PORTA, In        ; test porta again
    
RX_2    
    Call    Wait            ; wait 1 Bit (94 usec)
    btfsc    PORTA, In        ;
    bcf    STATUS, C        ; high -> 0
    btfss    PORTA, In        ;
    bsf    STATUS, C        ; low -> 1
                ;
    rrf    Byte, f            ; pass carry flag To Byte reg.
    decfsz    cycl_1, f        ; 8 bits
    
    Call    Wait            ; wait 1 Bit (94 usec)
    btfsc    PORTA, In        ; Stop-Bit 1
    Call    Wait    
    btfsc    PORTA, In        ; Stop-Bit 2
    GoTo    ser_RX            ; If no StopBit 2

    movf    Byte, w
    movwf    KOM        ; Byte pass through rs232in
    Return



Wait    movlw    D'15'            ; 9600 / 4 MHz receive
    movwf    cycl_2            ;

Wait1    
    nop
    nop
    nop
                        ;
    decfsz    cycl_2, 1    
    GoTo    Wait1
    
    Return


Pause    movlw    D'15'            ; 9600 / 4 MHz
    movwf    Temp            ;    
Pause2    
    decfsz    Temp, f        ; Pause For 1/2 Bit    
    GoTo    Pause2            ;    
    Return                    ;

;**********************************************************


;===================================================================================================        

;------LCD ALT PROGRAMLARI-------------------------
;---------------------KOMUT GÖNDERME---------------
KOMUT
        
    MOVWF    PORTB        ;W --> PORTB = DB0-DB7
    BCF    RS
    ;BCF    RW        ;RW GND YAPILDI
    BSF    EN
    NOP
    BCF    EN
    Call    TIMER_LOW        ;LCD    İŞLEM GECİKMESİ
    
    Return
;---------------------VERI YAZMA---------------
VERI_YAZ
    ;DATA UÇLARINA VERİ HAZIRLA    
    MOVWF    PORTB        ;W --> PORTB = DB0-DB7
    BSF    RS
    ;BCF    RW        ;RW GND YAPILDI
    BSF    EN
    NOP
    BCF    EN
    Call    TIMER_LOW        ;LCD    İŞLEM GECİKMESİ
    
    Return

;----------------------------------------------
LCD_RESET

    MOVLW    0X03
    MOVWF    CX
NEXTI    Call    TIMER_LOW    ;bekle
    BCF    RS        ;RS=0 komut
    ;BCF    RW        ;RW GND YAPILDI

    MOVLW    0X30        ;resetleme komutu 30h
    MOVWF    PORTB        ;W --> PORTB = DB0-DB7    
    
    BSF    EN    
    NOP
    BCF    EN
    DECFSZ    CX,F        ;CX = CX -1
    GoTo    NEXTI
    Return

;----------------------------------------------------------
TIMER_LOW

    MOVLW    0X12
    MOVWF    CNTH

NEXT2    MOVLW    0XFF
    MOVWF    CNTL

NEXT1    DECFSZ    CNTL,F
    GoTo    NEXT1
    DECFSZ    CNTH,F
    GoTo    NEXT2
    
    Return
;-------------------------------------------------------

GECIKME

MOVLW    .2
MOVWF S1
DONGU1

MOVLW    .254
MOVWF S2
DONGU2

MOVLW .254
MOVWF S3
DONGU3

DECFSZ S3,1
GoTo DONGU3
DECFSZ S2,1
GoTo DONGU2
DECFSZ S1,1
GoTo DONGU1
Return

;----------------TMR0 KESME ALT PROGRAMI----------------
KESME
PUSH
    MOVWF    P_W    ;W --> P_W
    MOVF    STATUS,W
    MOVWF    P_ST    ;STATUS -->P_ST

    INCF    SN,F
    
    
    MOVLW    .61
    SUBWF    SN,W
    btfss    STATUS,Z
    GoTo    POP
    clrf    SN
    

    
POP
    MOVF    P_ST,W
    MOVWF    STATUS    ;P_ST -->STATUS
    MOVF    P_W,W    ;P_W --> W
    BCF    INTCON,2


    RETFIE

;----------------------------------
    End


;*************************************************************************


Not : TAKILDIĞINIZ YER OLURSA MRESAT42@HOTMAIL 'E GÖNDEREBİLİRSİNİZ.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

OG

Alıntı YapMscomm1 kullanarak porta binary veri yollama
Sevgili arkadaslar genellikle com portdan bir aygıt kontrol etmek istediğiniz zaman bu bilgiyi porta binary olarak göndermek gerekebilir. Umarım bu ipucu sizlere faydalı olur..
Burda porta sayısal Ascii değerler gönderiyoruz. (klavyede bastığımız tuşların karşılığını)
İsteyen bu ipucundan yola cıkarak programı dahada geliştirebilir..

Projeye eklemeniz gereken öğeler..

Combo1 (portu seçmek icin ama isterseniz textbox ta kullanabilirsiniz)
text1 (Gönderilen veri)
text2 (alınan veri)
command1 (data gönderme)
command2 (gönderilen datayı alma)
command3 (Port acma)

mscomm1 (comport bağlantısı için activex nesnesi)


Dim Ac As Boolean

Private Sub Command1_Click() ' Veriyi gönder
If Ac = False Then: MsgBox "Port acık değil", vbCritical, "": Combo1.SetFocus: Exit Sub

If Not IsNumeric(Text1.Text) Then
MsgBox "Sayısal Değer Giriniz", vbCritical, ""
Text1.Text = "": Text1.SetFocus
Exit Sub
End if

If Text1.Text > 255 Then
MsgBox "255 den küçük değer giriniz", vbCritical, ""
Text1.Text = "": Text1.SetFocus
Exit Sub
End if

Dim TransmitByte As Byte
TransmitByte = Text1.Text
MSComm1.Output = Chr(TransmitByte)
End Sub

Private Sub Command2_Click() ' veriyi al

If Ac = False Then
MsgBox "Port acık değil", vbCritical, ""
Combo1.SetFocus
Exit Sub
End if

Dim TmpStr As String
Dim StrLen As Long, I As Long
Dim FileData(100) As Byte

While MSComm1.InBufferCount > 0
TmpStr = MSComm1.Input
StrLen = Len(TmpStr)
For I = 1 To StrLen
FileData(I) = CByte(Asc(Mid(TmpStr, I, 1)))
Next I
Wend

Text2.Text = TmpStr

End Sub

Private Sub Command3_Click() ' portu aç
On Error GoTo PORTHATA

If Ac = False Then
MSComm1.CommPort = Combo1.Text
MSComm1.PortOpen = True
Ac = True
MsgBox "COM" & Combo1.Text & " ACILDI!.", vbInformation, ""
End If

Exit Sub

PORTHATA:
MsgBox Err.Description, vbCritical, ""

End Sub
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

OG

Alıntı YapCom Port ile elektronik terazilerden bilgi okuma ve kullanma
' işlemlere baslamadan once
' Microsoft Common Dialog Control 6.0 (SP3)
' componnetinin eklenmiş ve form üzerine yerleştirilmiş olması gerekmektedir.

Private Sub terazi_tart_Click()
On Error Resume Next
' kantar portları açılacak
MSComm1.PortOpen = True
MSComm1.Output = "cpa0000000" + Chr(13)

MSComm1.Output = "rd" + Chr(13)
Do
'dummy = doevent()
Loop Until MSComm1.InBufferCount >= 5
okunan_sayi.Text = Val(MSComm1.Input)


HAM_DEGER = okunan_sayi
okunan_sayi = Left(okunan_sayi.Text, Len(okunan_sayi.Text) - 1)
ONDALIK_DEGER = Right(HAM_DEGER, 1)

okunan_sayi = okunan_sayi & "." & ONDALIK_DEGER


'******************* HESAPLAMALARLA ILGILI ISLEMLER

net_kilo = Val(okunan_sayi) - ((amb_adet * darasi) + ARAC_DARA)

net_kilo = Round(net_kilo, 3)

birim_agirlik = net_kilo / ADET

birim_agirlik = Round(birim_agirlik, 3)

'KANTAR PORTUNU KAPATACAK
MSComm1.PortOpen = False

'End If


'******************* HESAPLAMALARLA ILGILI ISLEMLER BITTI

End Sub
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

OG

Alıntı YapZEBRA BARKOD YAZICISINI SURUCU OLMADAN KULLANMAK
Bu kodlar ile Zebra S500 muadiri barkod/etiket yazıcılarından istediğiniz ebatta çıktı alabilirsiniz. Aşağıdaki kodlar yazıcı üzerindeki fontları kullanarak çıktı almanızı sağlar. Ancak bu kodlar ile türkçe karakterleri yazdıramazsınız.

'Fx = yazınn kağıt üzerinde yatay düzlemdeki yeri
'Fy = yazınn kağıt üzerinde dikey düzlemdeki yeri
'Fh=Font yüksekliği
'Fw=Font genişliği
'Fara = bir satırdaki harf sayısı, HARF SINIRI (FCH) nı aşdığında aşağıya geçer.Bu değişken iki satır arasındaki aralığın uzunluğudur.
'Fch bir satırdaki harf sayısı
Dim ZStr As String
Public Sub ZbrPrn(InWrd, Fx As Integer, Fy As Integer, Fh As Integer, Fw As Integer, Fara As Integer, FCh As Integer)
Dim Ad1 As String
Dim S As Integer
If Trim(InWrd) <> "" Then
Ad1 = ""
For S = 1 To Len(InWrd)
If S < Len(InWrd) And Len(Ad1) < FCh Then
Ad1 = Ad1 & Mid(InWrd, S, 1)
ElseIf S < Len(InWrd) And Len(Ad1) = FCh Then
Ad1 = Ad1 & Mid(InWrd, S, 1)
ZStr = ZStr & " ^FO" & Fx & "," & Fy & "^AON," & Fh & "," & Fw & "^FD" & Ad1 & "^FS"
Fy = Fy + Fara
Ad1 = ""
ElseIf S = Len(InWrd) Then
Ad1 = Ad1 & Mid(InWrd, S, 1)
ZStr = ZStr & " ^FO" & Fx & "," & Fy & "^AON," & Fh & "," & Fw & "^FD" & Ad1 & "^FS"
Ad1 = ""
End If
Next
End If
End Sub
Public Sub ZbrOut(MsComm1 As Object)
MsComm1.Output = ZStr
End Sub
Public Sub ZbrStr()
ZStr = "^XA"
End Sub
Public Sub ZbrEnd()
ZStr = ZStr & "^XZ"
End Sub
Public Sub ZbrClose(MsComm1 As Object)
MsComm1.PortOpen = False
End Sub
Public Sub ZbrOpen(MsComm1 As Object)
With MsComm1
.CommPort = Trim(UsrCfg.PortNo)
.Settings = Trim(UsrCfg.BpS) & "," & Trim(UsrCfg.Prt) & "," & Trim(UsrCfg.DBit) & "," & Trim(UsrCfg.SBit)
.PortOpen = True
.InputLen = 0
End With
End Sub

Private Sub Command1_Click()
ZbrOpen MsComm1
ZbrStr
ZbrPrn "BU BIR DENEMEDIR", 50, 50, 40, 20, 50, 30
ZbrEnd
ZbrOut MsComm1
ZbrClose MsComm1
End Sub
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

subram

#35
hocam linki yenileme şansımız var mı acaba

Edit: düzelttim hocam. gerek kalmadı ama :)
http://www.elektronark.org  Türkiyede Elektronik Kültürünü Değiştirmeye Geliyoruz

gareven

bu kodlar çok iyi olmuş hocam bunlarla bir servo motor kontrol arayüzü de yapabilir miyiz acaba?

OG

Alıntı yapılan: subram - 19 Nisan 2011, 23:06:19
hocam linki dşansımız var mı acaba
Subram sorunu yeni gördüm ama anlamadım, "dşansımız" ne demek? Herhalde yanlış tuşladın.
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.