您尚未
登入
注册
忘记密码
搜寻
赞助
赞助本站
数位公仔
纪念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资料
手机版
订阅
地图
繁体
您是第
20227
个阅读者
可列印版
加为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.064570 second(s),query:16 Gzip disabled
本站由
瀛睿律师事务所
担任常年法律顾问 |
免责声明
|
本网站已依台湾网站内容分级规定处理
|
连络我们
|
访客留言