传感器与RFID实验报告PC 机的串口调试助手显示Hello World.docx

上传人:b****8 文档编号:10447966 上传时间:2023-02-11 格式:DOCX 页数:16 大小:285.99KB
下载 相关 举报
传感器与RFID实验报告PC 机的串口调试助手显示Hello World.docx_第1页
第1页 / 共16页
传感器与RFID实验报告PC 机的串口调试助手显示Hello World.docx_第2页
第2页 / 共16页
传感器与RFID实验报告PC 机的串口调试助手显示Hello World.docx_第3页
第3页 / 共16页
传感器与RFID实验报告PC 机的串口调试助手显示Hello World.docx_第4页
第4页 / 共16页
传感器与RFID实验报告PC 机的串口调试助手显示Hello World.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

传感器与RFID实验报告PC 机的串口调试助手显示Hello World.docx

《传感器与RFID实验报告PC 机的串口调试助手显示Hello World.docx》由会员分享,可在线阅读,更多相关《传感器与RFID实验报告PC 机的串口调试助手显示Hello World.docx(16页珍藏版)》请在冰豆网上搜索。

传感器与RFID实验报告PC 机的串口调试助手显示Hello World.docx

传感器与RFID实验报告PC机的串口调试助手显示HelloWorld

传感器与RFID实验报告

1、实验目的:

1.理解串口通信原理;

2.掌握CC2530单片机与PC机串口通信的方法。

二、实验设备:

1.unSPUSBProbe在线调试器一个;

2.物联网多网技术综合教学开发设计平台一套。

三、实验要求:

1.编程要求:

编写一段C语言程序;

2.实验现象:

PC机的串口调试助手显示“HelloWorld!

”;

3.实现功能:

单片机向PC机发送字符串,PC机接收并显示字符串内容。

四、实验步骤:

1.使用MiniUSB延长线将协调器的MiniUSB接口连接至PC机的USB接口;

2.使用方口USB延长线将烧写器连接至PC机上;

3.连接烧写器和协调器,确认连接无误;

4.使用“物联网综合应用试验箱”文件夹的对应驱动程序,安装至PC机上(具体安装方法见前几次实验报告);

5.在控制面板——设备管理器中,观看是否成功安装驱动,并查看串口的连接方式(本实验为COM3);

6.打开IAR,编写程序,烧写进单片机中(具体操作方法同前几次实验),实现“helloworld!

”字符的发送;

7.打开串口调试助手,可以发现,程序已经完成定时发送“helloworld”字符串;

8.修改程序,使程序实验可通过串口调试助手发送任何自定义数据;

9.打开串口调试助手,选择连接方式“COM3”,打开终端,在窗口输入数据,点击“发送”,可以发现,完成了自定义数据的发送。

图为使用程序发送HelloWorld!

字节的实现结果。

图为完成程序修改,使用自定义字符发送的实现结果。

附:

完成实验步骤8的关键为:

修改UART.c文件中的函数__interruptvoidUART0_ISR(void),去掉使其失效的注释符,使该函数完成自己的作用,完成自定义数据的发送。

如图所示:

五、实验总结:

1.了解了串口通讯的使用,UARTUSB转串口通信数据线的使用;

2.学会了如何使用程序发送程序中自带的字符;

3.学会了如何使用UART文件中包含的项目,实现自定义的字符发送;

4.最后程序的修改是在老师的指导下完成,说明自己对程序的理解还不够;

5.完成通信的函数大部分为系统自带,自己能独立编程的能力有限,希望能庚随老师继续学习。

六、实验中使用的程序的理解和注释:

Basic.c文件

#include"Basic.h"

/***********************************************************

**函数名称:

delay**实现功能:

微秒级短暂延时函数

**入口参数:

n:

延时值;**返回结果:

None

voiddelay(uintn)

{

uinti;

for(i=0;i

for(i=0;i

for(i=0;i

for(i=0;i

for(i=0;i

}

/***********************************************************

**函数名称:

Delay**实现功能:

约10_ms延时函数

**入口参数:

n:

需要延时的10ms数;**返回结果:

None

voidDelay(uintn)

{

uinti,j,k;

for(i=0;i

for(j=0;j<100;j++)

for(k=0;k<100;k++);

}

/***********************************************************

**函数名称:

LEDPortInit**实现功能:

初始化LED_D8_D9(P2_0.P1_1)

**入口参数:

None**返回结果:

None

voidLEDPortInit(void)

{

P1SEL&=~0X02;//P1接口置为00000010

P2SEL&=~0X01;//P2接口置为00000001

P1DIR|=0X02;

P2DIR|=0X01;

CLR_LED_D8;

CLR_LED_D9;

}

/***********************************************************

**函数名称:

GetCh08bitADC**实现功能:

获取ADC通道0的8位ADC输入值

**入口参数:

None**返回结果:

1ByteADC值

uint8GetCh08bitADC(void)

{

uint8v=0;

ADCCFG=0x01;//ADCCFG被置为00000001

ADCCON1=0x33;//ADCCON1被置为00110011

ADCCON2=0xB0;//ADCCON2被置为11000000

ADCCON1|=0x40;//ADCCON1被置为01000000

while(!

(ADCCON1&0x80));

v=ADCL;//把ADCL赋值给v

v=ADCH;//把ADCH赋值给v

return(v);

}

/***********************************************************

**函数名称:

SetIOInput**实现功能:

设置端口为三态输入(不启用内部上下拉电阻)

**入口参数:

group:

Port**bit:

BitinPort**返回结果:

None

//pull:

0-disable,1-pulldown,2-pullup

voidSetIOInput(uint8group,uint8bit)

{

switch(group)

{

/*当group=0,bit左移一位,取反和PODIR与运算赋值给PODIR;bit左移一位,取反和POSEL与运算赋值给POSEL;bit左移一位,取非和POINP与运算赋值给POINP;*/

case0:

P0DIR&=~(1<

/*当group=1,bit左移一位,取反和P1DIR与运算赋值给P1DIR;bit左移一位,取反和P1SEL与运算赋值给P1SEL;bit左移一位,取非和P1INP与运算赋值给P1INP;*/

case1:

P1DIR&=~(1<

/*当group=2,bit左移一位,取反和P2DIR与运算赋值给P2DIR;bit左移一位,取反和P2SEL与运算赋值给P2SEL;bit左移一位,取非和P2INP与运算赋值给P2INP;*/

case2:

P2DIR&=~(1<

}

}

/***********************************************************

**函数名称:

SetIOOutput**实现功能:

设置端口为通用输出IO口

**入口参数:

group:

Port**bit:

BitinPort**返回结果:

None

voidSetIOOutput(uint8group,uint8bit)

{

switch(group)

{

/*当group=0,bit左移一位,取反和P0DIR与运算赋值给P0DIR;bit左移一位,取反和P0SEL与运算赋值给P0SEL;

case0:

P0DIR|=(1<

case1:

P1DIR|=(1<

/*当group=2;bit左移一位,取反和P2DIR与运算赋值给P2DIR;bit左移一位,取反和P2SEL与运算赋值给P2SEL;

case2:

P2DIR|=(1<

}

}

/***********************************************************

**函数名称:

GetIOLevel**实现功能:

获取对应端口上的输入电平

**入口参数:

group:

Port**bit:

BitinPort

**返回结果:

1Byte(1:

输入为高电平;0:

输入为低电平;)

uint8GetIOLevel(uint8group,uint8bit)

{

switch(group)

{

case0:

return!

!

(P0&(1<

case1:

return!

!

(P1&(1<

case2:

return!

!

(P2&(1<

}

return0;

}

/***********************************************************

**函数名称:

SetIOLevel**实现功能:

设置IO口输出电平

**入口参数:

group:

Port**bit:

BitinPort

**value:

(1:

输出高电平;0:

输出低电平;)**返回结果:

None

voidSetIOLevel(uint8group,uint8bit,uint8value)

{

switch(group)

{

case0:

if(value)

P0|=(1<

else

P0&=~(1<

break;

case1:

if(value)

P1|=(1<

else

P1&=~(1<

break;

case2:

if(value)

P2|=(1<

else

P2&=~(1<

break;

}

}

Basic.h文件

#ifndef__BASIC_H__

#define__BASIC_H__

#include

//数据类型重命名

typedefunsignedintuint;

typedefunsignedcharuchar;

typedefunsignedintuint16;

typedefunsignedcharuint8;

//LED_D8_D9操作

#defineSET_LED_D8(P2&=0XFE)//点亮LED_D8

#defineSET_LED_D9(P1&=0XFD)//点亮LED_D9

#defineCLR_LED_D8(P2|=0X01)//熄灭LED_D8

#defineCLR_LED_D9(P1|=0X02)//熄灭LED_D9

#defineLED_D8_TURN(P2^=0X01)//改变LED_D8状态(亮变灭,灭变亮)

#defineLED_D9_TURN(P1^=0X02)//改变LED_D9状态(亮变灭,灭变亮)

voiddelay(uint);//微秒级短暂延时函数

voidDelay(uintn);//约10ms延时函数

voidLEDPortInit(void);//LED_D8_D9端口初始化函数

uint8GetCh08bitADC(void);//ADC通道0以8采样位获取输入

voidSetIOInput(uint8group,uint8bit);//设置端口为三态输入

voidSetIOOutput(uint8group,uint8bit);//设置端口为通用输出IO口

uint8GetIOLevel(uint8group,uint8bit);//获取IO口输入电平状态

voidSetIOLevel(uint8group,uint8bit,uint8value);//设置IO端口输出电平状态

UART.h文件

#ifndef__UART_H__

#define__UART_H__

#include"Basic.h"

#include

//CC2530UART波特率可选值

typedefenum

{

BAUD_2400,//U0GCR|=6;U0BAUD|=59;

BAUD_4800,//U0GCR|=7;U0BAUD|=59;

BAUD_9600,//U0GCR|=8;U0BAUD|=59;

BAUD_14400,//U0GCR|=8;U0BAUD|=216;

BAUD_19200,//U0GCR|=9;U0BAUD|=59;

BAUD_28800,//U0GCR|=9;U0BAUD|=216;

BAUD_38400,//U0GCR|=10;U0BAUD|=59;

BAUD_57600,//U0GCR|=10;U0BAUD|=216;

BAUD_76800,//U0GCR|=11;U0BAUD|=59;

BAUD_115200,//U0GCR|=11;U0BAUD|=216;

BAUD_230400,//U0GCR|=12;U0BAUD|=216;

}BaudSel;

voidUART0_Init(BaudSelbaud);//UART0初始化设置

voidUART0_Send(char*Data,intlen);//UART0发送数据

voidUART0_Dis_uNum(uint16uValue);//UART0以十进制方式显示无符号数

voidUART0_Dis_fNum(floatfValue);//UART0以十进制方式显示浮点型数

UART.c文件

#include"UART.h"

/***********************************************************

**函数名称:

UART0_Init**实现功能:

初始化UART0

**入口参数:

baud:

波特率设置;**返回结果:

None

voidUART0_Init(BaudSelbaud)

{

CLKCONCMD&=~0X40;//晶振

while(!

(SLEEPSTA&0X40));//等待晶振稳定

CLKCONCMD&=~0X47;//TICHSPD128分频,CLKSPD不分频

SLEEPCMD|=0X04;//关闭不用的RC振荡器

PERCFG=0X00;//位置1P0口

P0SEL|=0X0C;//P0用作串口

U0CSR|=0X80;//UART方式

switch(baud)

{

caseBAUD_2400:

U0GCR|=6;U0BAUD|=59;break;

caseBAUD_4800:

U0GCR|=7;U0BAUD|=59;break;

caseBAUD_9600:

U0GCR|=8;U0BAUD|=59;break;

caseBAUD_14400:

U0GCR|=8;U0BAUD|=216;break;

caseBAUD_19200:

U0GCR|=9;U0BAUD|=59;break;

caseBAUD_28800:

U0GCR|=9;U0BAUD|=216;break;

caseBAUD_38400:

U0GCR|=10;U0BAUD|=59;break;

caseBAUD_57600:

U0GCR|=10;U0BAUD|=216;break;

caseBAUD_76800:

U0GCR|=11;U0BAUD|=59;break;

caseBAUD_115200:

U0GCR|=11;U0BAUD|=216;break;

caseBAUD_230400:

U0GCR|=12;U0BAUD|=216;break;

default:

U0GCR|=11;U0BAUD|=216;break;//BAUD_115200;

}

UTX0IF=0;

U0CSR|=0X40;//允许接收

IEN0|=0X84;//开总中断,接收中断

}

/***********************************************************

**函数名称:

UART0_Send**实现功能:

UART0发送数据**返回结果:

None

**入口参数:

Data:

待发送数据区首地址len:

待发送数据的字节数

voidUART0_Send(char*Data,intlen)

{

inti;

for(i=0;i

{

U0DBUF=*Data++;

while(UTX0IF==0)

;

UTX0IF=0;

}

}

/***********************************************************

**函数名称:

UART0_Dis_uNum**实现功能:

UART0以十进制方式显示uint16型数据

**入口参数:

uValue:

需要显示的无符号型数据**返回结果:

None

voidUART0_Dis_uNum(uint16uValue)

{

uint8i;

charcData[5]={'0','0','0','0','0'};

cData[0]=uValue%100000/10000+'0'//nValue对100000取余出10000赋值于cData第0个元素

cData[1]=uValue%10000/1000+'0';//nValue对10000取余出1000赋值于cData第01个元素

cData[2]=uValue%1000/100+'0';//nValue对1000取余出100赋值于cData第2个元素

cData[3]=uValue%100/10+'0';//nValue对100取余出10赋值于cData第3个元素

cData[4]=uValue%10/1+'0';//nValue对10取余出1赋值于cData第4个元素

if(0!

=uValue)

{

for(i=0;i<5;i++)

{

if('0'!

=cData[i])

break;

if('0'==cData[i])

cData[i]='';

}

}

elseif(0==uValue)

{

for(i=0;i<4;i++)

{

cData[i]='';

}

}

UART0_Send("",1);//数字和其他输出内容前后都有一个空格间距

UART0_Send(cData,5);

UART0_Send("",1);

}

/***********************************************************

**函数名称:

UART0_Dis_fNum**实现功能:

UART0以十进制方式显示float型数据

**入口参数:

fValue:

需要显示的浮点型数据**返回结果:

None

voidUART0_Dis_fNum(floatfValue)

{

uint16uValue=(uint16)(100*fValue);

charcData[5]={'0','0','.','0','0'};

cData[0]=uValue%10000/1000+'0';

cData[1]=uValue%1000/100+'0';

cData[2]='.';

cData[3]=uValue%100/10+'0';

cData[4]=uValue%10/1+'0';

//数字和其他输出内容前后都有一个空格间距

UART0_Send("",1);

UART0_Send(cData,5);

UART0_Send("",1);

}

/***********************************************************

**函数名称:

UART0_ISR**实现功能:

UART0接收中断处理函数

**入口参数:

None**返回结果:

None

#pragmavector=URX0_VECTOR

__interruptvoidUART0_ISR(void)

{

staticchartemp[1];//定义一个元素的temp数组

temp[0]=U0DBUF;//接收到的元素赋值给第0个元素

UART0_Send(temp,1);//调用发送函数将收到的数据发送出去

URX0IF=0;//清中断标志

}

Main.c文件

#include"UART.h"

#include"Basic.h"

voidmain(void)

{

#defineSENDSTRING"HelloWorld!

\r\n"

LEDPortInit();

UART0_Init(BAUD_115200);

for(;;)

{

UART0_Send(SENDSTRING,sizeof(SENDSTRING)-1);//发送SENDSTRING的数据

SET_LED_D8;//P1&=~0x02;//P2&=0xfe;//

Delay(5);//Delay(5);

CLR_LED_D8;//P2|=0x01;//

Delay(120);

}

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 唐诗宋词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1