arm9串口通讯程序使用.docx
- 文档编号:29639830
- 上传时间:2023-07-25
- 格式:DOCX
- 页数:13
- 大小:62.04KB
arm9串口通讯程序使用.docx
《arm9串口通讯程序使用.docx》由会员分享,可在线阅读,更多相关《arm9串口通讯程序使用.docx(13页珍藏版)》请在冰豆网上搜索。
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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- arm9 串口 通讯 程序 使用
![提示](https://static.bdocx.com/images/bang_tan.gif)