logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Visual Basic i MScomm: brak odbioru danych przez procesor 89c2051

scal12 30 Sty 2007 20:27 1677 14
  • #1 3508256
    scal12
    Poziom 19  
    Posty: 489
    Pomógł: 1
    Ocena: 52
    Panowie,mam taki mały problem z transmisja po stronie komputera jest program napisany w Visual basicu za pomoca kontrolki MScomm sa dane odbierane i wyswietlane w oknie text a do wysyłania uzyłem przycisku command do którego dałem polecenie:
    Mscomm1.output= "A"
    a=1
    Dim a as byte
    I ta jedynka ma powędrowac do procesora 89c2051,w procku taki program
    konfiguracja procka
    konfiguracja transmisji
    Print "witaj"- te polecenie działa ok jest wysyłane do PC
    dim a as byte
    do
    input,a
    if a=1 then p3.7=0 'gdy do procka doleci 1 wysłana z pc to na wyjsciu p3.7 ma pojawic sie 0
    end if
    loop
    I tu mój problem bo żadne dane nie docieraja nic sie nie dzieje transmisja do pc jest ok
    Dzięki za podpowiedz lub konkretne przykłady
  • #2 3508335
    wzagra
    Poziom 33  
    Posty: 1965
    Pomógł: 224
    Ocena: 278
    może tak?
    
    Dim a As byte
    a=1
    
    MSComm1.PortOpen = True
    
    MSComm1.Output = "A"       '-->przy takim zapisie wysyłasz literę A na port; moim zdaniem powinno być 
    MSComm1.Output =a
    
    MSComm1.PortOpen=False
    

    deklaracja zmiennej musi być przed jej użyciem, otwierasz port, wysyłasz zmienną, zamykasz port..
    albo wysyłasz nie na ten port? standardowo ustawiony jest na port nr 1
  • #3 3508462
    scal12
    Poziom 19  
    Posty: 489
    Pomógł: 1
    Ocena: 52
    Tak deklaracja jest przed tylko zle napisałem gdy dam polecenie
    Mscomm1.output=a,to wtedy wyskakuje błąd przy kompilacji,cudowałem na rózne sposoby i nic:(
  • #4 3508480
    wzagra
    Poziom 33  
    Posty: 1965
    Pomógł: 224
    Ocena: 278
    jaki błąd? co ci kompilator mówi?
    otwierałeś port?

    wygląda, że się zagalopowałem ;)) (no body's perfect)

    Cytat:

    Property Output As Variant
    Member of MSCommLib.MSComm
    Writes a string of characters to the transmit buffer.

    czyli wysyła ciąg znaków..
    
    Dim a As String
    a = 1
    MSComm1.PortOpen = True
    MSComm1.Output = a      '1 jako znak, a nie liczba
    MSComm1.PortOpen = False
    

    u mnie nie zgłasza, żadnych błędów...
  • #5 3508651
    scal12
    Poziom 19  
    Posty: 489
    Pomógł: 1
    Ocena: 52
    Błąd run-time error '429' ,port otwarty powtarzam dane z procka do pc idą jak nalezy
  • #6 3508679
    wzagra
    Poziom 33  
    Posty: 1965
    Pomógł: 224
    Ocena: 278
    tu masz opis tego błędu
    Cytat:

    • There is a mistake in the application.
    • There is a mistake in the system configuration.
    • There is a missing component.
    • There is a damaged component.

  • #7 3508803
    scal12
    Poziom 19  
    Posty: 489
    Pomógł: 1
    Ocena: 52
    I nadal nic nie idzie,jutro ciąg dalszy :(
  • #8 3509449
    M. S.
    Poziom 34  
    Posty: 2107
    Pomógł: 259
    Ocena: 680
    Input w Bascomie czeka na pojawienie się znaku CR, którego ty z PC nie wysyłasz.
    Wg mnie powinno być
    Mscomm1.output= "A" + Chr (13) '(ew. popraw skladnię)
  • #9 3511028
    scal12
    Poziom 19  
    Posty: 489
    Pomógł: 1
    Ocena: 52
    Próbowałem i ze znakiem entera i tez nic.
  • #10 3511236
    wzagra
    Poziom 33  
    Posty: 1965
    Pomógł: 224
    Ocena: 278
    jesteś pewien, że kontrolka działa ci prawidłowo?
    gdzieś na elektrodzie jest ta kontrolka, albo google ;)) - spróbuj sobie ściągnąć i wgrać ją na nowo..

    a swoją drogą zamieść listing z VB (albo nawet cały projekt)..
  • #11 3511489
    scal12
    Poziom 19  
    Posty: 489
    Pomógł: 1
    Ocena: 52
    program:Option Explicit

    Dim Buf1 As String

    Private Sub Command1_Click()
    Dim a As Byte
    a = 1
    MSComm1.Output = "a" & Chr(13)
    End Sub

    Private Sub Text1_KeyPress(KeyAscii As Integer)


    Buf1 = Buf1 & Chr$(KeyAscii)


    If KeyAscii = 13 Then
    MSComm1.Output = Buf1
    Buf1 = ""
    End If

    End Sub

    Private Sub Form_Load()


    MSComm1.CommPort = 1
    MSComm1.Settings = "9600,E,7,1"
    Debug.Print "----------------"



    MSComm1.RThreshold = 1


    MSComm1.PortOpen = True

    End Sub

    Private Sub Form_Unload(Cancel As Integer)


    MSComm1.PortOpen = False

    End Sub

    Private Sub MSComm1_OnComm()

    Dim s As String



    Select Case MSComm1.CommEvent
    Case comEvReceive
    s = MSComm1.Input
    If Asc(s) = 13 Then s = vbCrLf
    Text1.Text = Text1.Text & s
    Text1.SelStart = Len(Text1.Text)
    End Select

    End Sub
    Próbowałem tez z inna kontrolką
  • #12 3511565
    wzagra
    Poziom 33  
    Posty: 1965
    Pomógł: 224
    Ocena: 278
    u mnie po uruchomieniu nie zgłasza żadnych błedów..

    Private Sub Command1_Click()
    Dim a As Byte 'deklarujesz a jako byte
    a = 1 'nadajesz a wartość jeden
    MSComm1.Output = "a" & Chr(13) 'a potem wysyłasz znak "a" - więc po co to wyżej?
    End Sub

    pomyśl nad tym co napisałem w swoim poprzednim poscie (poście?)... ;)) w mojej poprzedniej wypowiedzi...

    chyba, że problem tkwi w programie procesorka...
  • #13 3511677
    scal12
    Poziom 19  
    Posty: 489
    Pomógł: 1
    Ocena: 52
    Juz zgłupiałem,może problem leży po stronie procka,może potrzebuje jakiegos przerwania ?
  • #15 3527808
    scal12
    Poziom 19  
    Posty: 489
    Pomógł: 1
    Ocena: 52
    Wracam do tematu,panowie jak podłącze ze soba 2 komputery i za pomocą kontrolki mscomm1.output=a&chr(13) to na terminalu 2 Pc pojawia sie to co wysłałem i tu pytanie co jest zle skoro procesor nie chce na wyjsciu portu ustawic "0"Jak prawidłowo powinien wyglądac program do procka 89c2051 aby po odebraniu polecenia mscomm1.output=a&chr(13) ustawił "0" na odpowiednim wyjsciu

Podsumowanie tematu

✨ Dyskusja dotyczy problemu z transmisją danych między komputerem a mikrokontrolerem 89c2051 za pomocą kontrolki MSComm w Visual Basicu. Użytkownik próbuje wysłać wartość 1 (jako bajt) z komputera do procesora, aby na wyjściu portu P3.7 pojawił się stan niski (0). W programie VB pojawia się błąd run-time 429 przy próbie wysłania zmiennej typu byte bezpośrednio przez MSComm1.Output. Sugerowano wysyłanie danych jako ciąg znaków z dodanym znakiem końca linii (CR, Chr(13)), ponieważ w Bascomie funkcja input oczekuje na znak CR. Pomimo wysyłania "A" + Chr(13) dane nie są odbierane przez mikrokontroler, choć transmisja z procesora do PC działa poprawnie. Wskazano na możliwe problemy z konfiguracją portu, otwieraniem i zamykaniem portu w VB oraz na konieczność sprawdzenia działania kontrolki MSComm. Pojawiła się sugestia, że program mikrokontrolera może wymagać obsługi przerwań lub innej metody odbioru danych. Użytkownik potwierdził, że połączenie między dwoma komputerami działa poprawnie, co wskazuje na problem po stronie oprogramowania mikrokontrolera. Poszukiwane jest prawidłowe rozwiązanie programu dla 89c2051, które umożliwi odbiór polecenia i ustawienie stanu niskiego na wyjściu portu.
Wygenerowane przez model językowy.
REKLAMA