arm9串口通讯程序使用.docx

上传人:b****0 文档编号:17449340 上传时间:2023-07-25 格式:DOCX 页数:13 大小:62.04KB
下载 相关 举报
arm9串口通讯程序使用.docx_第1页
第1页 / 共13页
arm9串口通讯程序使用.docx_第2页
第2页 / 共13页
arm9串口通讯程序使用.docx_第3页
第3页 / 共13页
arm9串口通讯程序使用.docx_第4页
第4页 / 共13页
arm9串口通讯程序使用.docx_第5页
第5页 / 共13页
arm9串口通讯程序使用.docx_第6页
第6页 / 共13页
arm9串口通讯程序使用.docx_第7页
第7页 / 共13页
arm9串口通讯程序使用.docx_第8页
第8页 / 共13页
arm9串口通讯程序使用.docx_第9页
第9页 / 共13页
arm9串口通讯程序使用.docx_第10页
第10页 / 共13页
arm9串口通讯程序使用.docx_第11页
第11页 / 共13页
arm9串口通讯程序使用.docx_第12页
第12页 / 共13页
arm9串口通讯程序使用.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

arm9串口通讯程序使用.docx

《arm9串口通讯程序使用.docx》由会员分享,可在线阅读,更多相关《arm9串口通讯程序使用.docx(13页珍藏版)》请在冰点文库上搜索。

arm9串口通讯程序使用.docx

arm9串口通讯程序使用

实验__三__

姓 名

杨世才

学 号

12310220122

年级

嵌入式12

成 绩

实验日期 

11月12

实验地点

A7303

专业

嵌入式

任课教师

王源源

实验教师

班级

【实验名称】

串口通信

【目的与要求】

1、串口程序的设计与实现

2、串口发送的数据对开发板上资源的控制

【实验内容】

利用PC机通过串口助手循环发送一个数(0~9),开发板读到这个数后点亮相应的一个LED(比如输入0,点亮DL0;输入1,点亮DL1;……输入9,点亮DL9)。

然后开发板将点亮相应LED灯的信息返回,发送到串口助手(比如,在界面上显示:

第?

个灯已点亮)

【操作步骤及提示】

1、工作原理

串口通信主要是波特率控制、收发存储、数据存储转移三部分,

通过MAX3232EEAE芯片的RX与TX进行收发

 

2、操作步骤

3、实验心得与总结

多写代码.

【扩展功能】

【附录】

#include"S3C2440.h"

#include"2440lib.h"

#include"option.h"

#include

#include

#include

#include

#include

#include

#include"uart0.h"

#defineWrUTXH0(ch)(*(volatileunsignedchar*)0x50000020)=(unsignedchar)(ch)

#defineRdURXH0()(*(volatileunsignedchar*)0x50000024)

 

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

功能描述:

串口测试程序

输入参数:

返回结果:

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

voidUartTest(void)

{

inti;

uart0_init();

Uart_Printf("\n=========UartTestinterrupt===========");

Uart_Printf("\n\r========Press\'Enter\'toexit==========\n\r");

while(i>=0)

{

Uart_Printf("\nInputapositiveint:

");

i=Uart_GetIntNum();

Uart_Printf("\tOutputThat:

%d",i);

}

}

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

*@brief:

关闭所有的灯

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

voidhalClearAll(void)

{

GPFDAT|=0xB0;//LED6:

:

LED7:

LED4

GPGDAT|=0x6A1;//LED2:

LED1:

:

LED3:

:

LED4:

:

:

:

:

LED5

}

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

功能描述:

初始化LED所需要的所有I/O口的状态为输出状态

输入参数:

返回结果:

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

voidhalInitLed(void)

{

//设置各种I/O端口为输出状态

GPFCON&=~0xCF00;//LED6:

:

LED7:

LED4-->

GPFCON|=0x4500;//PGF7:

:

PGF5:

PGF4//把GPF4,5,7都置成输出

GPGCON&=~0x3CCC03;//:

LED2:

LED1:

:

LED3:

:

LED4:

:

:

:

:

LED5

GPGCON|=0x144401;//:

GPG10:

GPG9:

:

GPG7:

:

GPG5:

:

:

:

:

GPG0

halClearAll();//熄灭所有灯

}

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

功能描述:

初始化配置

输入参数:

返回结果:

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

voiduart0_init(void){

GPHCON|=0xaa;//GPH0,GPH1,GPH2,GPH3分别nCTS0,nRTS0,TXD0,RXD0

GPHUP=0x7ff;//内部上拉被禁止

UFCON0=0x00;//不使用FIFO

UMCON0=0x00;//不使用流控

ULCON0=0x03;//8N1(8个数据位,无校验,1个停止位)

UCON0=0x245;////PCLK为时钟源,接收和发送数据为查询或中断方式

//查询方式,UART时钟源为PCLK,中断请求方式为Tx-电平,Rx-脉冲

UBRDIV0=((int)(PCLK/16./115200+0.5)-1);

}

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

功能描述:

向串口打印的字节码

输入参数:

要打印的字节data

返回结果:

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

voidUart_SendByte(chardata)

{

if(data=='\n')

{

while(!

(UTRSTAT0&0x2));

WrUTXH0('\r');//将数据写入到UART0发送缓冲器中

}

while(!

(UTRSTAT0&0x2));//WaituntilTHRisempty.

//delayMilliseconds(10);

WrUTXH0(data);

}

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

功能描述:

从串口读入字符没有输入时候一直等待返回char型

输入参数:

返回结果:

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

charUart_Getch(void)

{

while(!

(UTRSTAT0&0x1));//接收缓冲器接收到有效数据

returnRdURXH0();//从UART0接收缓冲器(URXH0)接收数据

}

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

功能描述:

读入输入字符串

输入参数:

string输入字符串的保存位置

返回结果:

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

voidUart_GetString(char*string)

{

char*string2=string;

charc;

while((c=Uart_Getch())!

='\r')

{

if(c=='\b')

{

if((int)string2<(int)string)

{

Uart_Printf("\b\b");

string--;

}

}

else

{

*string++=c;

Uart_SendByte(c);

}

}

*string='\0';

Uart_SendByte('\n');

}

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

功能描述:

字符串转换成数字

输入参数:

string输入字符lastIndex字符长

返回结果:

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

intchange(char*string,intlastIndex)

{

intj,i=pow(10,lastIndex);

intsum=0;

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

{

sum=sum+(*string-0x30)*i;

i=i/10;

string++;

}

returnsum;

}

 

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

功能描述:

从串口打印字符串

输入参数:

要打印的字符串

返回结果:

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

voidUart_Printf(char*fmt,...)

{

va_listap;

charstring[256];

va_start(ap,fmt);

vsprintf(string,fmt,ap);

Uart_SendString(string);

va_end(ap);

}

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

功能描述:

从串口读入数字

输入参数:

返回结果:

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

intUart_GetIntNum(void)

{

charstr[30];

char*string=str;

intbase=10;

intminus=0;

intresult=0;

intlastIndex;

inti;

Uart_GetString(string);

if(string[0]=='-')

{

minus=1;

string++;

}

if(string[0]=='0'&&(string[1]=='x'||string[1]=='X'))

{

base=16;

string+=2;

}

lastIndex=strlen(string)-1;

if(lastIndex<0)

return-1;

if(string[lastIndex]=='h'||string[lastIndex]=='H')

{

base=16;

string[lastIndex]=0;

lastIndex--;

}

if(base==10)

{

//result=atoi(string);

result=change(string,lastIndex);

result=minus?

(-1*result):

result;

}

else

{

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

{

if(isalpha(string[i]))

{

if(isupper(string[i]))

result=(result<<4)+string[i]-'A'+10;

else

result=(result<<4)+string[i]-'a'+10;

}

else

result=(result<<4)+string[i]-'0';

}

result=minus?

(-1*result):

result;

}

returnresult;

}

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

*@brief:

点亮灯led

*@param:

led->想要开启的LED灯的ID号,可以直接输入0-7,也可输入LED0-LED7

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

voidhalSetLed(intled)

{

switch(led)

{

case0:

GPFDAT&=~(0x1<<4);break;//LED0-->GPF4

case1:

GPGDAT&=~(0x1<<9);break;//LED1-->GPG9

case2:

GPGDAT&=~(0x1<<10);break;//LED2-->GPG10

case3:

GPGDAT&=~(0x1<<7);break;//LED3-->GPG7

case4:

GPGDAT&=~(0x1<<5);break;//LED4-->GPG5

case5:

GPGDAT&=~(0x1<<0);break;//LED5-->GPG0

case6:

GPFDAT&=~(0x1<<7);break;//LED6-->GPF7

case7:

GPFDAT&=~(0x1<<5);break;//LED7-->GPF5

}

}

intmain(void)

{

inti,j=0;

halInitLed();

uart0_init();

while

(1)

{

Uart_Printf("\n=========pleaseinput0~7tocontroltheLED===========");

i=Uart_GetIntNum();

if(j!

=i)

{

halClearAll();//如果输入下一个数,则前面的灯熄灭

j=i;

}

halSetLed(i);//点亮LED灯

}

}

提交截止时间:

2014.11.1223:

00

 

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2