伊莉討論區
標題:
VB 經由RS232傳送到8951
[打印本頁]
作者:
miechelle
時間:
2011-6-23 05:23 PM
標題:
VB 經由RS232傳送到8951
本帖最後由 arthurliuliu 於 2011-6-23 07:15 PM 編輯
各位大大你好,我想請問一下,要如何傳輸資料到8951,我目前已可傳兩個ASCII碼的值
而我現在流程如下
1.由VB6作一程式發送資料
2.再經由USB轉RS232之後輸出
3.由8951接收,然後再輸出到LED
目前確定硬體上應該是沒有錯的,所以我在想是不是程式上出了問題我把程式貼上來
這是VB的
Dim t, s As String
Private Sub Command1_Click()
Call Text1_Change
End Sub
Private Sub Command2_Click()
Call Text2_Change
End Sub
Private Sub Form_Load()
' 通訊參數: 9600bps, 無校驗, 8bit資料, 1bit停止碼
MSComm1.Settings = "9600,N,8,1" '設定通訊埠位元
End Sub
Private Sub OptCOM1_Click()
If OptCOM1.Value Then MSComm1.CommPort = 1
End Sub
Private Sub OptCOM2_Click()
If OptCOM2.Value Then MSComm1.CommPort = 2
End Sub
Private Sub OptCOM3_Click()
If OptCOM3.Value Then MSComm1.CommPort = 3
End Sub
Private Sub OptCOM4_Click()
If OptCOM4.Value Then MSComm1.CommPort = 4
End Sub
'==========================================================
'2進位轉換成16進位的副程式
'把8個2進位字串分成2組,轉換成2個16進位碼
'==========================================================
Public Function bin_hex(bin$)
Dim tmp As Integer '宣告tmp為數值
Dim tmp2 As Integer '宣告i為數值
Dim hex As String '宣告hex為字串
Dim hex2bit As String '宣告hex2bit為字串
tmp = Int(bin$ / 16)
tmp2 = bin$ - tmp * 16
Select Case tmp '取得的10進位碼轉換成16進位碼
Case 0 To 9: hex = CStr(tmp) '如果是0-9數值,則是轉換成0-9的字串
Case 10: hex = "A" '如果是10,則轉換成"A"字串
Case 11: hex = "B" '如果是11,則轉換成"B"字串
Case 12: hex = "C" '如果是12,則轉換成"C"字串
Case 13: hex = "D" '如果是13,則轉換成"D"字串
Case 14: hex = "E" '如果是14,則轉換成"E"字串
Case 15: hex = "F" '如果是15,則轉換成"F"字串
End Select
hex2bit = hex2bit + hex
Select Case tmp2 '取得的10進位碼轉換成16進位碼
Case 0 To 9: hex = CStr(tmp2) '如果是0-9數值,則是轉換成0-9的字串
Case 10: hex = "A" '如果是10,則轉換成"A"字串
Case 11: hex = "B" '如果是11,則轉換成"B"字串
Case 12: hex = "C" '如果是12,則轉換成"C"字串
Case 13: hex = "D" '如果是13,則轉換成"D"字串
Case 14: hex = "E" '如果是14,則轉換成"E"字串
Case 15: hex = "F" '如果是15,則轉換成"F"字串
End Select
hex2bit = hex2bit + hex
bin_hex = hex2bit '傳回2進位轉換成16進位的值
End Function
Private Sub Text1_Change()
t = bin_hex(Val(Text1))
Label1.Caption = "T..."
MSComm1.PortOpen = True '開啟通訊埠
MSComm1.Output = "9" + t 'Chr$(&H30) 設定單晶片判別碼及輸出資料MSComm1.PortOpen = False
End Sub
MSComm1.Output = "9" + t "<----輸出9的ASCII碼和tmp的ASCII 而 tmp2卻無法出來
若改成
MSComm1.Output = t+"9" "<----輸出tmp的ASCII碼和tmp2的ASCII 而9卻無法出來
以下是我8951的程式
#include <AT89X51.h>
void UART(void)
{
SCON=0x50;
TMOD=0x20;
TH1=253;
TL1=253;
TR1=1;
PCON = 0x00;
IE=0x90;
}
void delay(void) {
long int j = 0;
for (j = 0; j < 40000; j++);
}
main()
{
int tmp = 0x00;
char i = 0;
P1=0x00;
UART();
while(1)
{
while(RI==0);
RI=0;
P1=SBUF;
delay();
P1=0x00;
delay();
}
}
複製代碼
以上就是我的程式和步驟,我想請各位大大幫一下,這兩個程式卡了很久了,如果有甚麼建議或者是範例,不知可不可以貼上來討論一下
作者:
kev72806
時間:
2011-10-10 12:01 PM
bps建議改成1200
51那裏的TH1和TL1也要改成250(如果你石英晶體是12MHz)
SCON也要改成0x70
我都是用1200傳都沒問題喔
重點是...
你51那裏沒有串列接收副程式(interrupt 1)
寫一個串列中斷副程式吧~沒有的話怎模也接不到東西的
作者:
miechelle
時間:
2011-10-10 01:56 PM
我的問題己經解決了 ,不過還是要謝謝你喔。^^
之前不行是因為我忘了寫中斷的副程式= =,唉~~~
總之謝謝囉
歡迎光臨 伊莉討論區 (http://a13.mobile.wahas.com/)
Powered by Discuz!