嵌入式实验四:串口传输实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告

课程名称嵌入式系统设计

实验仪器清华同方辰源嵌入式系统实验箱实验名称实验四:串口传输实验

系别计算机学院

专业计算机科学与技术

班级/学号

学生姓名

实验日期

成绩

指导教师

实验四:串口传输实验

一、实验问题回答

(1)本实验引入了Send和Receive两个变量表示上传或下传数据,用状态机怎么实现?

答:switch(oledkey[0])

{

case 'F':

state=1;

//Receive = 1;

//Send = 0;

break;

case 'E':

state=2;

//Send = 1;

//Receive = 0;

break;

switch(state)

{

case 0:

break;

case 1:

recive();

break;

case 2:

send();

break;

(2)了解串口通讯原理。

答:串口按位(bit)发送和接收字节,串口通信最重要的参数是波特率、数据位、停止位和奇偶校验。对于两个进行通信的端口,这些参数必须匹配。

1、51系列单片机的串口有4个模式,可分别用作串并转换、并串转换、异步串行通信(2种模式)。异步串行通信中,有1+8+1和1+8+1+1两种帧格式,多机通信是特殊的通信方式。

2、基本原理是两组移位寄存器。将并行通信转换成串行通信模式(发送部分),或反之(接收部分)。可全双工运行。

3、速度通过移位脉冲决定。具体一般通过定时器1的自动装载模式产生的溢出脉冲给出。

4、电平上采用的是CMOS逻辑。

5、以上是物理层和数据链路层的单片机串口模块的约定,其他层需要软件人员根据需要自行把握。另外,电平需要根据实际通信环境做变换,如232、485或红外等。

(3)了解在上位机(PC端)端,C程序中如何调用串口?

答:#include

#include

HANDLE hCom;

int main(void)

{

hCom=CreateFile(TEXT("COM3"),//COM1口

GENERIC_READ|GENERIC_WRITE,//允许读和写

0,//独占方式

NULL,

OPEN_EXISTING,//打开而不是创建

0,//同步方式

NULL);

if(hCom==(HANDLE)-1)

{

printf("打开COM失败!\n");

return FALSE;

}

else

{

printf("COM打开成功!\n");

}

SetupComm(hCom,1024,1024);//输入缓冲区和输出缓冲区的大小都是1024

COMMTIMEOUTS TimeOuts;

//设定读超时

TimeOuts.ReadIntervalTimeout=1000;

TimeOuts.ReadTotalTimeoutMultiplier=500;

TimeOuts.ReadTotalTimeoutConstant=5000;

//设定写超时

TimeOuts.WriteTotalTimeoutMultiplier=500;

TimeOuts.WriteTotalTimeoutConstant=2000;

SetCommTimeouts(hCom,&TimeOuts);//设置超时

DCB dcb;

GetCommState(hCom,&dcb);

dcb.BaudRate=9600;//波特率为9600

dcb.ByteSize=8;//每个字节有8位

dcb.Parity=NOPARITY;//无奇偶校验位

dcb.StopBits=ONE5STOPBITS;//两个停止位

SetCommState(hCom,&dcb);

DWORD wCount;//读取的字节数

BOOL bReadStat;

while(1)

{

PurgeComm(hCom,PURGE_TXCLEAR|PURGE_RXCLEAR);//清空缓冲区

char str[9]={0};

printf("%s\n",str);

bReadStat=ReadFile(hCom,str,9,&wCount,NULL);

if(!bReadStat)

{

printf("读串口失败!");

return FALSE;

}

else

{

str[8]='\0';

printf("%s\n",str);

}

Sleep(100);

}

}

(4)了解在上位机(PC端)端,JAVA程序中如何调用串口?

答:public static void process() {

try {

Enumeration portList = CommPortIdentifier.getPortIdentifiers();

while (portList.hasMoreElements())

{

CommPortIdentifier portId = (CommPortIdentifier) portList.nextElement();

if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL)//如果端口类型是串口则判断名称

{

if(portId.getName().equals("COM1")){//如果是COM1端口则退出循

相关文档
最新文档