讓我們來個(gè)徹底的研究:如何用VB實(shí)現(xiàn)PC機(jī)與單片機(jī)的通信?
有做過單片機(jī)通訊工程的工程師們都一起來吧!讓我們一起愉快地交流、輕松的探討,把您的思想和大家說說,把您未能解決的問題和大家討論,把您擁有的經(jīng)驗(yàn)和大家交流,把您寶貴成果和大家分享......哪怕每個(gè)人只是奉獻(xiàn)出一點(diǎn)點(diǎn),說了,討論了,交流了,那我們將擁在座所有人的智慧,come on!
全部回復(fù)(3)
正序查看
倒序查看
我先頂了
實(shí)現(xiàn)功能:
用VB編一個(gè)界面,界面如下:
實(shí)現(xiàn)功能:
用VB編一個(gè)界面,界面如下:
計(jì)算機(jī)任意發(fā)送一個(gè)十六進(jìn)制0-FFH,單片機(jī)對應(yīng)接收一個(gè)十六進(jìn)制0-FFH,
用單片機(jī)P2口依次接上八個(gè)指示燈,以觀看其輸出結(jié)果(亮代表1,滅代表0).
上位機(jī)程序(發(fā)送):計(jì)算機(jī)
'******************************************
'初始化串口
'******************************************
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.Handshaking = comNone
MSComm1.EOFEnable = False
MSComm1.DTREnable = False
MSComm1.RTSEnable = False
MSComm1.InputLen = 1
MSComm1.RThreshold = 1
MSComm1.InBufferSize = 1
MSComm1.OutBufferSize = 1
MSComm1.SThreshold = 0
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
MSComm1.InputMode = comInputModeBinary
'******************************************
'計(jì)算機(jī)根據(jù)用戶輸入數(shù)據(jù)發(fā)送數(shù)據(jù)給單片機(jī)
'******************************************
Private Sub Button_SEND_Click()
Dim X As String
Dim Num As Variant
Dim outbyte(0) As Byte
If Text_SEND.Text = "" Then
X = MsgBox("發(fā)送數(shù)據(jù)不能為空", 16)
Exit Sub
End If
If Not MSComm1.PortOpen Then
MSComm1.PortOpen = True
End If
Num = str(Text_SEND.Text)
outbte(0) = CByte(Num)
MSComm1.OutBufferCount = 0 '...清空輸出寄存器
MSComm1.Output = outbyte '...發(fā)送數(shù)據(jù)
End Sub
下位機(jī)程序(接收):單片機(jī)
;*****************************************
;CPU:AT89C51 晶振:11.0592MHz
;*****************************************
BUFFER EQU 7FH
ORG 0000H
JMP MAIN
ORG 0023H
JMP RECEIVE
MAIN:
MOV SP,#30H
MOV BUFFER,#00H
MOV PCON,#00H ;波特率不倍增
MOV SCON,#40H ;串行通訊為方式1,即1起始位+8數(shù)據(jù)位+停止位,無校驗(yàn)位
MOV TMOD,#20H ;定時(shí)器T1為方式1
MOV TH1 ,#0FDH
MOV TL1 ,#0FDH ;波特率為9600 bit/s
SETB REN ;允許接收
SETB ES ;使能單片機(jī)串行中斷
SETB EA ;打開總中斷
SETB TR1 ;啟動(dòng)定時(shí)T1
LOOP:
MOV A,BUFFER
CPL A
MOV P2,A ;實(shí)時(shí)將接收緩存值BUFFER取反輸出
JMP LOOP
RECIVE:
PUSH ACC
CLR RI
MOV A,SBUF
MOV BUFFER,A ;讀取計(jì)算機(jī)發(fā)送過來的數(shù)據(jù)到BUFFER
RETI
END
實(shí)現(xiàn)功能:
用VB編一個(gè)界面,界面如下:
實(shí)現(xiàn)功能:
用VB編一個(gè)界面,界面如下:
計(jì)算機(jī)任意發(fā)送一個(gè)十六進(jìn)制0-FFH,單片機(jī)對應(yīng)接收一個(gè)十六進(jìn)制0-FFH,
用單片機(jī)P2口依次接上八個(gè)指示燈,以觀看其輸出結(jié)果(亮代表1,滅代表0).
上位機(jī)程序(發(fā)送):計(jì)算機(jī)
'******************************************
'初始化串口
'******************************************
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.Handshaking = comNone
MSComm1.EOFEnable = False
MSComm1.DTREnable = False
MSComm1.RTSEnable = False
MSComm1.InputLen = 1
MSComm1.RThreshold = 1
MSComm1.InBufferSize = 1
MSComm1.OutBufferSize = 1
MSComm1.SThreshold = 0
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
MSComm1.InputMode = comInputModeBinary
'******************************************
'計(jì)算機(jī)根據(jù)用戶輸入數(shù)據(jù)發(fā)送數(shù)據(jù)給單片機(jī)
'******************************************
Private Sub Button_SEND_Click()
Dim X As String
Dim Num As Variant
Dim outbyte(0) As Byte
If Text_SEND.Text = "" Then
X = MsgBox("發(fā)送數(shù)據(jù)不能為空", 16)
Exit Sub
End If
If Not MSComm1.PortOpen Then
MSComm1.PortOpen = True
End If
Num = str(Text_SEND.Text)
outbte(0) = CByte(Num)
MSComm1.OutBufferCount = 0 '...清空輸出寄存器
MSComm1.Output = outbyte '...發(fā)送數(shù)據(jù)
End Sub
下位機(jī)程序(接收):單片機(jī)
;*****************************************
;CPU:AT89C51 晶振:11.0592MHz
;*****************************************
BUFFER EQU 7FH
ORG 0000H
JMP MAIN
ORG 0023H
JMP RECEIVE
MAIN:
MOV SP,#30H
MOV BUFFER,#00H
MOV PCON,#00H ;波特率不倍增
MOV SCON,#40H ;串行通訊為方式1,即1起始位+8數(shù)據(jù)位+停止位,無校驗(yàn)位
MOV TMOD,#20H ;定時(shí)器T1為方式1
MOV TH1 ,#0FDH
MOV TL1 ,#0FDH ;波特率為9600 bit/s
SETB REN ;允許接收
SETB ES ;使能單片機(jī)串行中斷
SETB EA ;打開總中斷
SETB TR1 ;啟動(dòng)定時(shí)T1
LOOP:
MOV A,BUFFER
CPL A
MOV P2,A ;實(shí)時(shí)將接收緩存值BUFFER取反輸出
JMP LOOP
RECIVE:
PUSH ACC
CLR RI
MOV A,SBUF
MOV BUFFER,A ;讀取計(jì)算機(jī)發(fā)送過來的數(shù)據(jù)到BUFFER
RETI
END
0
回復(fù)