嵌入式实验四.docx
- 文档编号:4258313
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:18
- 大小:297.38KB
嵌入式实验四.docx
《嵌入式实验四.docx》由会员分享,可在线阅读,更多相关《嵌入式实验四.docx(18页珍藏版)》请在冰豆网上搜索。
嵌入式实验四
1.实验四:
串口传输实验
1.1实验名称
串口传输实验
1.2实验目的
(1)学习、理解、掌握利用串口实现上位机和下位机之间的通讯(数据上传和控制)。
1.3实验过程与分析
(遇到的问题及如何解决)
1)拓展项目一完全不了解,没有思路
未解决
2)Send和Receive不会用,原理不清楚
同学之间互相探讨解决
3)拓展三--将实验二实验三的功能加入,总不能实现
定义charrxchar[10];
添加switch(rxchar[0])
{
case'a':
Draw_Char_H(80);
}
实现按上位机a,显示内容
实验问题:
(在实验报告中回答)
(1)本实验引入了Send和Receive两个变量表示上传或下传数据,用状态机怎么实现?
将其放到case里,并加以限定
if(Event_key)
{
Event_key=0;
switch(oledkey[0])
{
case'E':
Receive=0;
Send=1;
break;
case'F':
Send=0;
Receive=1;
break;
default:
break;
}
(2)了解串口通讯原理。
串口通信是指外设和计算机间,通过数据信号线、地线、控制线等,按位进行传输数据的一种通讯方式。
这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。
它很简单并且能够实现远距离通信。
(3)了解在上位机(PC端),C程序中如何调用串口?
单片机串行口发送/接收程序,每接收到字节即发送出去
和微机相接后键入的字符回显示在屏幕上
可用此程序测试
//
#include
#defineXTAL11059200//CUP晶振频率
#definebaudrate9600//通信波特率
voidmain(void)
{
unsignedcharc;
TMOD=0x20;//定时器1工作于8位自动重载模式,用于产生波特率
TH1=(unsignedchar)(256-(XTAL/(32L*12L*baudrate)));
TL1=(unsignedchar)(256-(XTAL/(32L*12L*baudrate)));//定时器0赋初值
SCON=0x50;
PCON=0x00;
TR1=1;
IE=0x00;//禁止任何中断
while
(1)
{
while(RI==0);
RI=0;
c=SBUF;//从缓冲区中把接收的字符放入c中
SBUF=c;//要发送的字符放入缓冲区
while(TI==0);
TI=0;
}
}
(4)了解在上位机(PC端),JAVA程序中如何调用串口?
Java实现串口通信的编程方式通常采用SUN发布的串口通信API,它是以独立jar包形式提供的一个标准扩展。
其中包含3个文件:
comm.jar提供了通信用的javaAPI;win32com.dll提供了串口通信的本地驱动接口;m.properties是这个驱动的类配置文件。
Java读写串口过程主要是调用m包中的API函数。
在m包中,串口的读写操作是数据流形式,串口初始化后,通过CommPort类的getInputStream()和getOutputStream()方法即可分别取得端口的输入流和输出流。
1.4实验结果总结
实验结果(附照片)
总结(自己的收获)
1.5心得体会
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include"rit128x96x4.h"
#defineMAX_SIZE40//缓冲区最大限制长度
#defineUARTCharGetNBUARTCharGetNonBlocking
unsignedcharxin[]=
{
0x00,0xff,0xf0,0x00,0x00,0xff,0xf0,0x00,
0x0f,0x00,0x0f,0x00,0x0f,0x00,0x0f,0x00,
0xf0,0x00,0x00,0xf0,0xf0,0x00,0x00,0xf0,
0xf0,0x00,0x00,0x0f,0x00,0x00,0x00,0xf0,
0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,
0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,
0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,
0x0f,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,
0x0f,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,
0x00,0xf0,0x00,0x00,0x00,0x00,0xf0,0x00,
0x00,0x0f,0x00,0x00,0x00,0x0f,0x00,0x00,
0x00,0x00,0xf0,0x00,0x00,0xf0,0x00,0x00,
0x00,0x00,0x0f,0xf0,0xff,0x00,0x00,0x00,
0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x00,
};
unsignedcharbuf1[]=
{
0x00,0x00,
0xff,0xff,
0xff,0xff,
0xff,0xff,
0x00,0x00,
};
unsignedcharbuf2[]=
{
0xff,0xff,
0x00,0x00,
0x00,0x00,
0x00,0x00,
0xff,0xff
};
unsignedcharbuf3[]=
{
0xff,0xff,
0x00,0x00,
0x00,0x00,
0x00,0x00,
0xff,0xff
};
unsignedcharbuf4[]=
{
0xff,0xff,
0xff,0xff,
0xff,0xff,
0xff,0xff,
0xff,0xff,
};
unsignedcharbuf5[]=
{
0xff,0xff,
0x00,0x00,
0x00,0x00,
0x00,0x00,
0xff,0xff
};
unsignedcharbuf6[]=
{
0xff,0xff,
0x00,0x00,
0x00,0x00,
0x00,0x00,
0xff,0xff
};
unsignedcharbuf7[]=
{
0xff,0xff,
0x00,0x00,
0x00,0x00,
0x00,0x00,
0xff,0xff
};
charRxBuf[1+MAX_SIZE];//接收缓冲区
intBufP=0;//缓冲区位置变量
tBooleanRxEndFlag=false;//接收结束标志
unsignedintEvent=0,Event_key=0,Send=0,Receive=0;
inttype=0;
intki=0;
charoledkey[2];
unsignedcharucValue=0x00;
longtime=0;
intSpeed,count=0;
unsignedcharrxchar[10];
voidtimerset(void);
voidUARTSend(constunsignedchar*pucBuffer,unsignedlongulCount);
voidDraw_Char_H(intx)
{
SysTickIntDisable();
SysTickDisable();
RIT128x96x4Clear();
RIT128x96x4StringDraw(rxchar,65,85,15);
Event=0;
RIT128x96x4StringDraw("",50,55,15);
RIT128x96x4StringDraw("",50,65,15);
//RIT128x96x4StringDraw("NowShowChar!
",50,75,15);
RIT128x96x4ImageDraw(buf1,x,5,20,1);
RIT128x96x4ImageDraw(buf2,x,7,20,1);
RIT128x96x4ImageDraw(buf3,x,9,20,1);
RIT128x96x4ImageDraw(buf4,x,11,20,1);
RIT128x96x4ImageDraw(buf5,x,13,20,1);
RIT128x96x4ImageDraw(buf6,x,15,20,1);
RIT128x96x4ImageDraw(buf7,x,17,20,1);
}
intmain(){
//声明部分
rxchar[0]=0x30;
rxchar[1]='\0';
//初始化
/*SettheclockingtorunfromPLLat50MHz*/
SysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_USE_OSC|SYSCTL_OSC_MAIN|SYSCTL_XTAL_8MHZ);
RIT128x96x4Init(1000000);
RIT128x96x4Clear();
//设置时钟中断1
SysTickPeriodSet(SysCtlClockGet()/100);
SysTickEnable();
SysTickIntEnable();
//******************************
//设置键盘中断
/*使能外设GPIO*/
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
/*设置GPIO为输入*/
GPIOPinTypeGPIOInput(GPIO_PORTD_BASE,GPIO_PIN_7);
GPIOPinTypeGPIOInput(GPIO_PORTC_BASE,GPIO_PIN_4);
/*使能中断*/
IntEnable(INT_GPIOD);
IntMasterEnable();
GPIOPinIntEnable(GPIO_PORTD_BASE,GPIO_PIN_7);
GPIOIntTypeSet(GPIO_PORTD_BASE,GPIO_PIN_7,GPIO_RISING_EDGE);
//*************************************
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE,GPIO_PIN_0);
GPIOPinTypeUART(GPIO_PORTA_BASE,GPIO_PIN_0|GPIO_PIN_1);
//ConfiguretheUARTfor115,200,8‐N‐1operation.
UARTConfigSetExpClk(UART0_BASE,SysCtlClockGet(),115200,
(UART_CONFIG_WLEN_8|UART_CONFIG_STOP_ONE|
UART_CONFIG_PAR_NONE));
UARTFIFOLevelSet(UART0_BASE,//设置发送和接收FIFO深度
UART_FIFO_TX4_8,
UART_FIFO_RX6_8);
IntEnable(INT_UART0);
UARTIntEnable(UART0_BASE,UART_INT_RX|UART_INT_RT);
timerset();//计时器初始化
RIT128x96x4StringDraw("chuankouhao:
COM1",5,6,15);
RIT128x96x4StringDraw("botelv:
115200",5,15,15);
RIT128x96x4StringDraw("shujuwei:
8",5,24,15);
RIT128x96x4StringDraw("jiaoyanwei:
wu",5,33,15);
RIT128x96x4StringDraw("tingzhiwei:
1",5,42,15);
RIT128x96x4StringDraw("Esend",5,51,15);
RIT128x96x4StringDraw("Freceive",5,60,15);
while
(1)
{
if(Event)
{
Event=0;
}
if(Event_key)
{
Event_key=0;
switch(oledkey[0])
{
case'E':
Receive=0;
Send=1;
break;
case'F':
Send=0;
Receive=1;
break;
default:
break;
}
}
if(Send)
{
RIT128x96x4Clear();
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0,GPIO_PIN_0);
SysCtlDelay(200000);
UARTSend((unsignedchar*)&rxchar,1);
RIT128x96x4StringDraw(rxchar,64,45,15);
SysCtlDelay(200000);
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0,0);
if((rxchar[0]>=0x39)||(rxchar[0]<0x30))
rxchar[0]=0x30;
else
rxchar[0]++;
}
if(Receive)
{
if(UARTCharsAvail(UART0_BASE))
{
rxchar[0]=UARTCharGet(UART0_BASE);//等待接收字符
rxchar[1]='\0';
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0,GPIO_PIN_0);
RIT128x96x4StringDraw("Receive:
",40,45,15);
RIT128x96x4StringDraw(rxchar,88,45,15);
RIT128x96x4StringDraw("",100,45,15);
SysCtlDelay(100000);
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_0,0);
}
Event_key=0;
Event=0;
switch(rxchar[0])
{
case'a':
Draw_Char_H(0);
Draw_Char_H(40);
Draw_Char_H(80);
Draw_Char_H(120);
}
}
}
//return0;
}
//中断处理
voidSysTick_Handler(void){
Event=1;
}
/*中断服务函数ISR*/
voidGPIO_PORT_D_ISR(void)
{
unsignedcharucKey;
unsignedlongulStatus;
ulStatus=GPIOPinIntStatus(GPIO_PORTD_BASE,true);
GPIOPinIntClear(GPIO_PORTD_BASE,ulStatus);
if(ulStatus&GPIO_PIN_7)
{
ucKey=GPIOPinRead(GPIO_PORTC_BASE,GPIO_PIN_4);
ucKey=ucKey>>1;
ucValue=ucValue+ucKey;
ucValue=ucValue<<1;
ki++;
if(ki==4)
{
ki=0;
oledkey[1]='\0';
if((ucValue>>4)<10)
oledkey[0]=(ucValue>>4)+48;
else
oledkey[0]=(ucValue>>4)-10+'A';
Event_key=1;
}
}
}
voidtimerset()
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
TimerConfigure(TIMER0_BASE,TIMER_CFG_32_BIT_PER);
TimerLoadSet(TIMER0_BASE,TIMER_A,SysCtlClockGet()/100);//不除以100则1秒中断一次
IntEnable(INT_TIMER0A);
TimerIntEnable(TIMER0_BASE,TIMER_TIMA_TIMEOUT);
}
voidTimer0IntHandler(void)
{
unsignedlongulStatus;
ulStatus=TimerIntStatus(TIMER0_BASE,true);//获取当前中断状态
TimerIntClear(TIMER0_BASE,TIMER_TIMA_TIMEOUT);//清除全部中断状态
if(ulStatus&TIMER_TIMA_TIMEOUT)//如果是超时中断
{
//补充该部分代码
time++;
//每次计时中断,相应计数值进行变化
}
}
voidUARTIntHandler(void)
{
unsignedlonguStatus;
//
//Gettheinterrruptstatus.
uStatus=UARTIntStatus(UART0_BASE,true);
//
//Cleartheassertedinterrupts.
UARTIntClear(UART0_BASE,uStatus);
//
//LoopwhiletherearecharactersinthereceiveFIFO.
while(UARTCharsAvail(UART0_BASE))
{
//ReadthenextcharacterfromtheUARTandwriteitbacktotheUART.
UARTCharPutNonBlocking(UART0_BASE,UARTCharGetNonBlocking(UART0_BASE));
}
}
voidUARTSend(constunsignedchar*pucBuffer,unsignedlongulCount)
{
//
//Loopwhiletherearemorecharacterstosend.
//
while(ulCount--)
{
//
//WritethenextcharactertotheUART.
//
UARTCharPutNonBlocking(UART0_BASE,*pucBuffer++);
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)