传感器与RFID实验报告PC 机的串口调试助手显示Hello World.docx
- 文档编号:10447966
- 上传时间:2023-02-11
- 格式:DOCX
- 页数:16
- 大小:285.99KB
传感器与RFID实验报告PC 机的串口调试助手显示Hello World.docx
《传感器与RFID实验报告PC 机的串口调试助手显示Hello World.docx》由会员分享,可在线阅读,更多相关《传感器与RFID实验报告PC 机的串口调试助手显示Hello World.docx(16页珍藏版)》请在冰豆网上搜索。
传感器与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); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 传感器与RFID实验报告PC 机的串口调试助手显示Hello World 传感器 RFID 实验 报告 PC 串口 调试 助手 显示 Hello