//
设计题目
:
基于51单片机的串口通信
//
功能
:
//
说明
:
晶振用12m,
///////////////////////////////////////////////////////////
#include
//
12m
晶振
#define
uchar
unsigned
char
#define
uint
unsigned
int
///////////////////////////////////////////////////////////
//
name
:
串口发送函数
//
in
:
//
out
:
//
function
:
//
explain
:
///////////////////////////////////////////////////////////
void
send(uchar
x)
{
sbuf=x
//
将数据放到缓冲区,发送
while(!ti)
//
等待发送完成
ti=0
//
清标志位
}
///////////////////////////////////////////////////////////
//
name
:
初始化函数
//
in
:
//
out
:
//
function
:
//
explain
:
///////////////////////////////////////////////////////////
void
init(void)
{
tmod=0x20
//
t1工作在方式2,自动重载
th1=0xe6
tl1=0xe6
//
设置波特率为1200
sm0=0
sm1=1
//
串口方式1
tr1=1
//
打开定时器1
}
///////////////////////////////////////////////////////////
//
name
:
主函数
//
in
:
//
out
:
//
function
:
//
explain
:
///////////////////////////////////////////////////////////
void
main(void)
{
uchar
i
init()
//
初始化
while(1)
{
for(i=0
i<10
i++)
{
send(i)
}
}
}
用SerialPort类的时候,在接收数据的serialPort1_DataReceived事件里要用委托。示例:
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string tmpstr = ""
for (int i = 0i <serialPort1.BytesToReadi++)
{
tmpstr += Convert.ToString(serialPort1.ReadByte(), 16)+ " "
}
tmpstr= tmpstr.ToUpper()
safeAddtrText(tmpstr)
}
//由于本人比较懒,委托就从网上直接Copy了。
public delegate void _SafeAddtrTextCall(string text)
private void safeAddtrText(string text)
{
if (this.InvokeRequired)
{
_SafeAddtrTextCall call =
delegate(string s)
{
txtBoxRecive.Text += s
}
this.Invoke(call, text)
}
else
{
txtBoxRecive.Text += text
}
}
如果你的GPS模块输出的是TTL的串口电平,那么使用232电平转换再连到PC机的COM口就可以了,然后找个串口调试助手将GPS的数据读出来就可以了,对读出的数据分析是否是标准的nmea0183数据格式。不明白你说的“无法识别外接设备”是真么回事。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)