您尚未
登入
註冊
忘記密碼
搜尋
贊助
贊助本站
數位公仔
紀念T恤
紀念馬克杯
廣告
刊登廣告
廣告價格
線上申請刊登
用雅幣刊登
免費刊登
目前客戶
簡訊
簡訊說明
購買金幣
發送簡訊
預約簡訊
發送記錄
好友通訊
罐頭簡訊
論命
數位論命舘
免費排盤工具
葫蘆墩 優生造命
葫蘆墩 八字命書
影音論命(葫蘆墩)
影音占卜(葫蘆墩)
購買金幣
星座分析
孔明神數
周公解夢
星僑線上論命
娛樂
影 像 行 腳
數 位 造 型
數 位 畫 廊
心 情 日 記
公 益 彩 券
送生日蛋糕
俄羅斯方塊
四 川 省
猜 數 字
比 大 小
泡 泡 龍
許 願 池
萬 年 曆
經 期 計 算
體 重 測 量
音 樂 點 播
衛 星 地 圖
時間戳字幕
男女聊天室
求助
論壇守則
會員等級
會員權限
語法教學
常見問題
最新活動
打工賺雅幣
首頁
新版首頁(全頁)
傳統首頁(全頁)
新版首頁(選單)
傳統首頁(選單)
MyChat 數位男女
命理風水
15
星僑五術軟體
4
葫蘆墩命理網
5
命理問答
9
四柱八字
1
紫微斗數
1
姓名學
手面相
易經占卜
1
風水研討
1
擇日&三式
1
西洋占星
無視論塔羅牌
10
修行&武術
1
中醫研討
五術哈啦
1
電腦資訊
13
硬體討論
5
超頻 & 開箱
3
數位生活
2
PDA 討論
手機討論區
軟體推薦
2
軟體討論
6
Apple 討論
1
Unix-like
網路&防毒
2
程式設計
網站架設
4
電腦教學資源
生活休閒
14
休閒哈啦
7
感情世界
2
上班一族
5
國考&法律
7
生活醫學
4
運動體育
1
單車討論
1
釣魚討論
6
旅遊討論
4
天文觀星
3
攝影分享
8
圖片分享
4
數位影視
2
笑話集錦
3
興趣嗜好
13
文學散文
7
繪圖藝術
1
布袋戲
3
動漫畫討論
3
美食天地
6
理財專區
心理測驗
1
汽、機車
3
寵物園地
模型&手工藝
4
花卉園藝
魔術方塊
獨輪車專區
電玩遊戲
13
遊戲歡樂包
4
CS討論
8
Steam
3
MineCraft
2
東方Project
英雄聯盟LOL
1
單機遊戲
2
WebGame
3
線上遊戲1
6
線上遊戲2
5
電視遊樂器
1
掌上型遊戲
2
模擬器遊戲
1
工商服務
6
虛擬城市
7
好康分享
新品販售
二手拍賣
1
租屋&找屋
工商建議區
1
站務專區
10
最新活動
活動成果
數位造型
心情日記
個人圖庫
新人報到練習
論壇問題建議
1
榮會及電子報討論
-最近版區-
-最近瀏覽-
»
程式設計
»
8051如何接收RS232資料
手機版
訂閱
地圖
簡體
您是第
20247
個閱讀者
可列印版
加為IE收藏
收藏主題
上一主題
|
下一主題
u955067
級別:
路人甲
x0
x0
分享:
▼
x
0
[求助] 8051如何接收RS232資料
各位大大好!!
小弟想要用8051擷取GPS資料
8051 -> RS-232 -> GPS -> 資料顯示在LCD模組
GPS是USB 轉 RS-232
小弟之前是用PC -> USB -> GPS 來擷取資料
程式是用VB寫的
現在想用8051(因為比較輕便,而且用PC在家中會抓不到經緯度)
對於組合語言極度不熟,只有以前在學校玩過8051的LED
==============用PC擷取出來的資料==============
$GPGGA,000357.039,0000.0000,N,00000.0000,E,0,00,50.0,0.0,M,0.0,M,0.0,0000*7D
$GPGGA,000358.030,000 ..
訪客只能看到部份內容,免費
加入會員
或由臉書
Google
可以看到全部內容
x
0
[樓 主]
From:歐洲 |
Posted:
2009-05-08 19:00 |
jason-poul
級別:
小人物
x1
x26
分享:
▲
▼
在這部分,
不管是使用 assembly / C 都應該不會有多少差異,
因為不會因為語法的不同而導致你的Uart不能動!!
一般使用到RS-232(即Uart),
則會有Baud Rate的問題,
要先設好Buad Rate(看你是使用9600/14400/19200/38400/57600/115200... ...),
接者就要看你的datasheet,
你可以到那家廠商的網站下載sampo code,
一般就uart的部分,
都有完整的sampo code。
我有一些code可以給你參考,
其餘就靠你努力了!!
#define Uart_19200 0xEE // 19200 Bps, At 11.0592 Meg.
#define Uart_38400 0xF7 // 38400 Bps, At 11.0592 Meg.
#define Uart_57600 0xFA // 57600 Bps, At 11.0592 Meg.
#define Uart_115200 0xFD // 115200 Bps, At 11.0592 Meg
// Name : Uart_Select_Baud_Rate
// US_Baud_Rate. (Can Be Uart_19200/Uart_38400/Uart_57600/Uart_115200)
void Uart_Select(unsigned char US_Baud_Rate)
{
T2CON = 0x34; // 0011 1000,
// TF2 = 0, EXF2 = 0, RCLK = 1, TCLK = 1,
// EXEN2 = 1, TR2 = 0, C/T2 = 0, CP/RL2 = 0.
TL2 = US_Baud_Rate; // Set Count.
TH2 = 0xFF; // Set Up Count.
RCAP2L = US_Baud_Rate; // Set Count.
RCAP2H = 0xFF; // Set Up Count.
SCON = 0x50; // 0101 0000,
// SM0 = 0, SM1 = 1 (8 BIT VARIABLE), SM2 = 0 (NO MULTIMODE), REN = 1 (SERIAL RECEPTION),
// TB8 = 0, RB8 = 0, TI = 0, RI = 0.
ES = 1; // Enable Uart Interrupt.
EA = 1; // Global Int Enable.
TR2 = 1; // Timer 2 Enable.
}
// Local Variable Definition
#define Receive_Buffer_Size 128 // Receive Buffer Size. (0 - 255)
bit Receive_Get = 0;
unsigned char xdata Receive_Buffer_Index = 0;
unsigned char xdata Receive_Buffer[Receive_Buffer_Size] = {0}; // Receive_Buffer.
// Name : Uart_Interrupt
void Uart_Interrupt(void) interrupt 4
{
if (RI == 1)
{
if (Receive_Get == 0) // If Receive_Buffer Not Full.
{
if ((SBUF >= 0x21) && (SBUF <= 0x7E)) // Only ASCII From 0x21 To 0x7E Into Receive_Buffer.
{
Receive_Buffer[Receive_Buffer_Index] = SBUF;
Receive_Buffer_Index++;
if (Receive_Buffer_Index == Receive_Buffer_Size)
Receive_Get = 1;
}
}
RI = 0; // Clear RI (Receive Interrupt).
}
if (TI == 1)
{
Transmit_Busy = 0; // Mark Transmit Not Busy.
TI = 0; // Clear TI (Transmit Interrupt).
}
}
[ 此文章被jason-poul在2009-05-10 01:00重新編輯 ]
此文章被評分,最近評分記錄
財富:20 (by 三仙) | 理由:
因為您的參與,讓程式設計更容易!!
x
0
[1 樓]
From:歐洲 |
Posted:
2009-05-10 00:46 |
u955067
級別:
路人甲
x0
x0
分享:
▲
▼
感謝jason-poul兄
雖然沒有很懂 但我看得懂部分
我繼續研究 若有不懂 再來請教
x
0
[2 樓]
From:臺灣中華電信 |
Posted:
2009-05-11 08:59 |
u955067
級別:
路人甲
x0
x0
分享:
▲
▼
我GPS的鮑率是4800
我想用組合語言寫
==========我的程式碼如下==========
org 0
jmp Start
Start:
mov sp,#6fh
mov tmod,#00100000b
anl pcon,#01111111b
mov th1,#250 ;鮑率4800
setb tr1
mov scon,#01010000b ;設定UART工作再Mode1的接收模式
clr ri ;清除接收完畢旗標
Receive_Wait:
jbc ri,Receive_Ok ;檢查UART是否將8bit的資料接收完畢,若還沒完畢(RI=0)則繼續,完畢(RI=1)則跳至Receive_Ok且清除RI=0
jmp Receive_Wait ;跳至Receive_Wait檢查RI位元
Receive_Ok:
mov a,sbuf ;接收到的資料
cpl a
mov p0,a ;LED顯示出來
jmp Receive_Wait ;接收完畢跳至Receive_Wait繼續
.end
這些是我的想法,還沒測試
我想問怎麼在組合語言上直接做篩選的動作??
我只要開頭$GPGGA的資料,組合語言能做到嗎?
x
0
[3 樓]
From:歐洲 |
Posted:
2009-05-12 01:24 |
㊣小天㊣
級別:
路人甲
x0
x2
分享:
▲
▼
在8051裡有Serial interrupt,就是當程式接收到值或送出值都會產生interrupt。
而Serial port要溝通的話必須要先設定相同的Baud Rate才能互相溝通。
以下是Baud Rate的設定表。
========================
Baud Rate TH1 SMOD
========================
1200 0xE8 0
2400 0xF4 0
4800 0xFA 0
9600 0xFD 0
19200 0xFD 1
========================
設定的程式如下:(以9600 Baud Rate為例)
void main()
{
Byte t;
EA=0;
SCON=0x50;
TMOD=0x21;
ES=1;
TH1=0xFD;
SMOD=0;
TR1=1;
EA=1;
//送出資料,以 t 為送出資料的變數
SBUF=t;
while(1)
{
}
}
void com_isr(void) interrupt 4 using 1
{
Byte r;
//接收資料,以 r 為接收資料的變數
if (RI)
{
r=SBUF;
RI=0;
return;
}
if (TI!=0) TI=0;
}
x
0
[4 樓]
From:臺灣中華HiNet |
Posted:
2009-06-11 14:16 |
y6109971
級別:
路人甲
x0
x1
分享:
▲
那如果我想要從PC裡抓衛星訊號在遊PC 藍芽傳入PDA內的衛星導航要怎麼寫那程式
x
0
[5 樓]
From:臺灣中華電信 |
Posted:
2009-06-13 09:37 |
MyChat 數位男女
»
程式設計
Powered by
PHPWind
v1.3.6
Copyright © 2003-04
PHPWind
Processed in 0.073268 second(s),query:16 Gzip disabled
本站由
瀛睿律師事務所
擔任常年法律顧問 |
免責聲明
|
本網站已依台灣網站內容分級規定處理
|
連絡我們
|
訪客留言