Jestem początkujący w programowaniu w środowisku labview i napotkałem problem z wysyłaniem danych z labview do uC po przez VISA Write a mianowicie jak wysyłam liczby z zakresu od 0 do 9 to uC odbiera je normalnie natomiast jak już ma przejść większa liczba np 15 to ścina jedynkę i uC dostaje tylko 5 i tak samo jest z wiekszymi liczbami. Zawsze kończy sie na tym ze uC odbiera tylko ostatnia cyfre natomiast jeżeli użyję np terminala z bascom avr to uC odbiera pełną wartość.
Druga sprawa to uC zawsze odbiera od labview wartość 48 czy to wysyłam puste pole czy też jakąś wartość.
Założenie jest takie że chcę wysyłać zmienną z zakresu 1 do 255 do uC i ta zmienna ma sterować całym portem.
W załączniku załączam plik z labview
Tak wygląda kod uC:
Kod: Zaznacz cały
$regfile = "m644pdef.dat"
$baud = 57600
$crystal = 16000000
Const Cmaxchar = 20
Dim Bc As Byte
Dim Buf As String * Cmaxchar
Dim D As Word
Config 1wire = Portc.0
Dim Minus As Bit
Dim Id(8) As Byte
Dim T As Word
Dim S As String * 4
Dim A As Byte
Dim W As Word
Id(1) = 1wsearchfirst()
Config Portb = Output
Portb = &B1111111
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
On Urxc Rec_isr
Enable Urxc '
Enable Interrupts
Do
1wreset
1wwrite &H55
1wverify Id(1)
1wwrite &HBE
T = 1wread(2)
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 750
If T > &HFC00 Then
T = 65536 - T
Minus = 1
Else
Minus = 0
End If
T = T * 10
T = T / 16
S = Str(t)
S = Format(s , "000.0")
W = Getadc(7)
W = W / 10
If Minus = 1 Then
Print "-" ; S ; " " ; W
Else
Print " " ; S ; " " ; W
End If
Disable Serial
If Bc = Cmaxchar Then
Buf = ""
Bc = 0
End If
Enable Serial
Loop
Rec_isr:
A = Inkey()
Cls
Lcd A
Portb = A
Return