全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2700
推到 Plurk!
推到 Facebook!

藍牙傳送與接收問題

尚未結案
power7772
一般會員


發表:2
回覆:3
積分:1
註冊:2009-07-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-09-03 03:36:47 IP:203.74.xxx.xxx 訂閱
程式(七段顯示器)
我目前是用電腦1(vb)>>>rs232>>>8051>>>藍牙>>>電腦2(vb)
當我用電腦1執行動作時能把執行完的資料透過藍芽傳給電腦2,但是當我要用電腦2執行動作時電腦1卻沒接收到任何資料。
我所有的鮑率都設9600,TX跟RX都確認過無誤,電腦端的com1都設9600,本人也用LINK.EXE跟X8051.EXE確認過8051的程式就不知問題出在何處~~~請各位大大幫一下
附加檔案:4a9ec94facc14_程式.txt
阿信
版主


發表:111
回覆:983
積分:813
註冊:2005-03-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-09-03 15:25:00 IP:114.32.xxx.xxx 訂閱
你的VB並沒有寫回傳程式,
且8051也沒有回傳的路徑(UART只有一組),
這樣電腦1怎麼會收到資料?

另外你的程式的註解是亂碼。
編輯記錄
阿信 重新編輯於 2009-09-03 15:25:49, 註解 無‧
power7772
一般會員


發表:2
回覆:3
積分:1
註冊:2009-07-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-09-04 00:54:07 IP:203.74.xxx.xxx 訂閱

[code vb]
請在此區域輸入程式碼
[/code]
Public num As Integer '宣告num為整數公共變數
'==========================================================
'關閉通訊埠之執行鈕,關閉後讓通訊埠指示燈熄滅
'==========================================================
Private Sub CLOSEsw_Click()
Timer1.Enabled = False '設定計時器關閉
MSComm1.Output = "G" '傳送字串"G"到MCS-51端
MSComm1.PortOpen = False '關閉通訊埠
OPENsw.Enabled = True '把OPENcom按鈕致能
CLOSEsw.Enabled = False '把CLOSEcom按鈕失效
ONsw.Enabled = False '讓ONcom按鈕失效
OFFsw.Enabled = False '讓OFFcom按鈕失效
For i = 0 To 7
LED1(i).FillColor = RGB(0, 0, 0)
Next i
PWRled.FillColor = RGB(0, 0, 0) '通訊埠指示燈熄滅
num = 0
End Sub
'==========================================================
'啟動按鈕,啟動計時器
'==========================================================
Private Sub ONsw_Click()
Timer1.Enabled = True '設定計時器開始計時
ONsw.Enabled = False
CLOSEsw.Enabled = True
OFFsw.Enabled = True
End Sub
'==========================================================
'停止按鈕傳送字串"G"到MCS-51端
'==========================================================
Private Sub OFFsw_Click()
Dim i As Integer
MSComm1.Output = "G" '傳送"G"字元到MCS-51端,也可送出其他字元
ONsw.Enabled = True
OFFsw.Enabled = False
Timer1.Enabled = False
For i = 0 To 7
LED1(i).FillColor = RGB(0, 0, 0)
Next i
End Sub
'==========================================================
'開啟通訊埠之執行鈕,開啟後讓通訊埠指示燈亮起
'==========================================================
Private Sub OPENsw_Click()
MSComm1.PortOpen = True '開啟通訊埠
PWRled.FillColor = RGB(0, 255, 0) '通訊埠指示燈亮起
OPENsw.Enabled = False '把OPENcom按鈕失效
CLOSEsw.Enabled = True '把CLOSEcom按鈕致能
ONsw.Enabled = True
End Sub
'==========================================================
'表單載入
'==========================================================
Private Sub Form_Load()
CLOSEsw.Enabled = False '把CLOSEcom按鈕失效
ONsw.Enabled = False
OFFsw.Enabled = False
num = 0 '設定num初始值為0
End Sub
'==========================================================
'串列埠通訊事件,利用ComEvReceive事件當接收緩衝區中的
'接收位元組數達到RThreshold屬性設定值後即引發事件
'==========================================================
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvReceive '收到最小接收字元數的字元
Dim buf As String
Dim decnum As Integer
buf = MSComm1.Input '把接收的字元放放在buf中
Select Case buf
Case "0"
decnum = &HC0 '數字0之16進位顯示碼
Case "1"
decnum = &HF9 '數字1之16進位顯示碼
Case "2"
decnum = &HA4 '數字2之16進位顯示碼
Case "3"
decnum = &HB0 '數字3之16進位顯示碼
Case "4"
decnum = &H99 '數字4之16進位顯示碼
Case "5"
decnum = &H92 '數字5之16進位顯示碼
Case "6"
decnum = &H82 '數字6之16進位顯示碼
Case "7"
decnum = &HF8 '數字7之16進位顯示碼
Case "8"
decnum = &H80 '數字8之16進位顯示碼
Case "9"
decnum = &H90 '數字9之16進位顯示碼
Case "A"
decnum = &H88 '數字A之16進位顯示碼
Case "B"
decnum = &H83 '數字B之16進位顯示碼
Case "C"
decnum = &HA7 '數字C之16進位顯示碼
Case "D"
decnum = &HA1 '數字D之16進位顯示碼
Case "E"
decnum = &H86 '數字E之16進位顯示碼
Case "F"
decnum = &H8E '數字F之16進位顯示碼
End Select
display (decnum)
End Select
End Sub
'=========================================================
' 把16進位的值轉換成2進位LED的顯示值
' "0"LED亮綠燈,"1"LED燈熄,(低態動作)
'=========================================================
Public Sub display(decnum)
Dim i As Integer
For i = 0 To 7 '重覆8次
If (decnum And 2 ^ i) = 2 ^ i Then '轉換成2進位中那一位元為"1",那一位元為"0"
LED1(i).FillColor = RGB(0, 0, 0) '如果是"1",則讓這個(i)位元的LED燈熄
Else
LED1(i).FillColor = RGB(255, 0, 0) '如果是"0",則讓這個(i)位元LED燈亮
End If
Next i
End Sub
'=========================================================
'Timer1計時器副程式,傳送0-F之資料到MCS-51端
'=========================================================
Private Sub Timer1_Timer()
Dim i As Integer
Dim data(16) As String '宣告data陣列有16個資料
data(0) = "0"
data(1) = "1"
data(2) = "2"
data(3) = "3"
data(4) = "4"
data(5) = "5"
data(6) = "6"
data(7) = "7"
data(8) = "8"
data(9) = "9"
data(10) = "A"
data(11) = "B"
data(12) = "C"
data(13) = "D"
data(14) = "E"
data(15) = "F"
If num <= 15 Then '如果num小於或等於15
MSComm1.Output = data(num) '則傳送data(num)到MCS-51端
num = num 1 'num加一
Else
num = 0 '如果num大於15,則重設num=0
End If
End Sub
power7772
一般會員


發表:2
回覆:3
積分:1
註冊:2009-07-29

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-09-04 00:58:42 IP:203.64.xxx.xxx 訂閱
8051程式 -------------------------------------------------------------------------------- ORG 0000H JMP START ; 跳到主程式,避開0023H之串列中斷副程 ORG 0023H JMP INTERR ; 跳到串列中斷副程式。 ;---------------------------------- START MOV SP,#70H ; 把堆疊指標,移到70H MOV R0,#00H ; 把#00H放入R0中 MOV IE,#10010000B ; 設定中斷致能暫存器EA=1,ES(串列中斷)=1。 MOV SCON,#01110000B ; 設定串列埠控制存器,模式1,SM2=1,REN=1允許接收 MOV TMOD,#00100000B ; 設定計時/計數器1,為模式2,自動載入功能。 MOV TH1,#0FDH ; 石英振盪器為11.059MHz,串列傳輸飽率9600bps, ; TH1=0FDH。如果為12Mhz,則TH1=243,鮑率為2400bps SETB TR1 ; 啟動計時器1。 ;---------------------------------- MAIN AJMP MAIN ; 等待串列埠中斷 ;---------------------------------- INTERR PUSH A ; 把A之內容推入堆疊 JBC TI,TIINT ; 傎測串列中斷是否為發射中斷,是則跳到TIINT CLR RI ; 清除接收中斷RI旗標 MOV A,SBUF ; 把SBUF接收到的資料放入A累積器 CLR C ; 清除進位旗標 SUBB A,#30H ; 把A之內容減去#30H MOV R0,A ; 把A之內放入R0中 XRL A,#17H ; 判斷從PC端接收之資料是"G"字元,ASCII碼是47H JZ STOP ; A累積器為零,則跳到STOP MOV A,R0 ; 再把R0之內容放入A中 MOV DPTR,#TABLE1 ; 把指標暫存器指向TABLE1 MOVC A,@A DPTR ; 取資料表內相對之七段顯示器字型碼 MOV P1,A ; 從PORT1輸出 AJMP TIINT ; 跳到TIINT發射相對的ASCII碼 RETI STOP MOV P1,#0FFH ; 把#FFH由PORT1輸出,七段顯示器熄滅 POP A RETI ;------------------------ TIINT MOV DPTR,#TABLE2 ; 把指標暫存器指向TABLE2 MOV A,R0 ; 把R0之資料放入A中 MOVC A,@A DPTR ; 取出相對的ASCII碼放入A中 MOV SBUF,A ; 把放入發射暫存器的資料發射出去 JNB TI,$ ; 等待8BIT發射完 CLR TI ; 清除發射中斷旗標 POP A RETI ;---------------------------------------- ;七段顯示器顯示的字型碼 ;---------------------------------------- TABLE1 DB 11000000B ; 0 DB 11111001B ; 1 DB 10100100B ; 2 DB 10110000B ; 3 DB 10011001B ; 4 DB 10010010B ; 5 DB 10000010B ; 6 DB 11111000B ; 7 DB 10000000B ; 8 DB 10010000B ; 9 DB 11111111B DB 11111111B DB 11111111B DB 11111111B DB 11111111B DB 11111111B DB 11111111B DB 10001000B ; A DB 10000011B ; B DB 10100111B ; C DB 10100001B ; D DB 10000110B ; E DB 10001110B ; F ;---------------------------------------- ; 0-F 的ACSII碼 ;---------------------------------------- TABLE2 DB 30H ;0 DB 31H ;1 DB 32H ;2 DB 33H ;3 DB 34H ;4 DB 35H ;5 DB 36H ;6 DB 37H ;7 DB 38H ;8 DB 39H ;9 DB 24H DB 24H DB 24H DB 24H DB 24H DB 24H DB 24H DB 41H ;A DB 42H ;B DB 43H ;C DB 44H ;D DB 45H ;E DB 46H ;F ;---------------------------------------- END
power7772
一般會員


發表:2
回覆:3
積分:1
註冊:2009-07-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-09-04 01:37:30 IP:203.64.xxx.xxx 訂閱

===================引 用 阿信 文 章===================
你的VB並沒有寫回傳程式,
且8051也沒有回傳的路徑(UART只有一組),
這樣電腦1怎麼會收到資料?

另外你的程式的註解是亂碼。?


但是我也有用這種方法(電腦>>RS232>>8051)可以執行,反之(電腦>>藍牙>>8051)毫無動作,改用藍牙(RS232轉藍牙)當傳輸線時小弟我也用示波器接在MAX232測試過完全沒有任何反應代表電腦端的藍牙沒傳執令給51單的藍牙執行動作就因為沒寫回傳程式跟回傳路逕的關係嗎??
補充:我的1對藍牙只要設好鮑率跟連線模式就能使用了
系統時間:2024-05-07 10:30:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!