您的位置:首页 > 理论基础 > 计算机网络

STC89C52单片机串口调试(http://blog.sina.com.cn/s/blog_7cae472801015idp.html)

2016-03-26 13:25 399 查看
/////////////////////////////////////////////////////////////////////////

实现功能:从电脑上的串口调试助手向实验板发送字符串,实验板接收到字符串后

会按发送过来的字符串返回到串口调试助手上,注意在调试串口是应该

把USB旁边的跳线帽从USB一边插到DB9上

实验板型号:KBL-XYD-C52

实验名称: 串口接收、发送实验

编写人: 谢应东

编写日期: 2012-4-24

/////////////////////////////////////////////////////////////////////////

#include <reg52.h>

#define uchar unsigned char

#define uint unsigned int

uchar cReceive_Data[35],cNumber=0,cFlag=0; //串口接收数据存放

/////////////////////////////////////////////////////////////////////////

函数名称:毫秒延时函数

函数功能:实现毫秒级的延时

参数介绍:Delay_MS: 定义需要延时的毫秒的数值

iNumber: 记录Delay_MS的数值,以for语句实现所要求的延时

iValue: 要延时毫秒所要进行的循环数值,本数值为实际测得

返回值: 无

注意事项:本实验是在所用晶振为12M的前提下实现的毫秒延时,本函数是通过循环的形

式完成,所以如果改变了晶振的频率,请做相应的改变

/////////////////////////////////////////////////////////////////////////

void DelayMs(unsigned int Delay_MS)

{

uint iNumber,iValue;

for(iNumber=0;iNumber<Delay_MS;iNumber++)

{

iValue=107;

while(iValue--);

}

}

//////////////////////////////////////////////////////////////////////////

函数名称:Init_UART

函数功能:完成对串口初始化

参数介绍:无

返回值: 无

注意事项:实验板上所用的晶振为11.0592M的,配置的波特率为9600

/////////////////////////////////////////////////////////////////////////

void Init_UART()

{

SCON=0x50; //SCON:串行口工作方式1, 8-bit UART,允许串行接收位(REN=1)

TMOD=0x20; //TMOD:定时器1,方式2,8位自动重装方式

PCON=0x80; //SMOD=1;(将串口传送的波特率加倍)

TH1=0xfa; //Baud:9600 fosc=11.0592MHz

TL1=0xfa;

TR1=1; //启动定时器/计数器1运行

ES=1; //开串口中断

EA=1; //开总中断

}

/////////////////////////////////////////////////////////////////////////

函数名称:Send_char

函数功能:向串口发送一个字符

参数介绍:cCharacter:要发送到电脑上的字符

返回值: 无

注意事项:SBUF是单片机中的串口寄存器

/////////////////////////////////////////////////////////////////////////

void Send_char(unsigned char cCharacter)

{

SBUF=cCharacter; //发送数据给“串口调试助手”接收窗口

while(TI==0); //等待发送完,TI置1

TI=0; //清零 TI为发送中断标志

}

/////////////////////////////////////////////////////////////////////////

函数名称:Send_string

函数功能:向串口发送一个字符串

参数介绍:*string:要发送到电脑上的字符串

返回值: 无

注意事项:无

/////////////////////////////////////////////////////////////////////////

void Send_string(unsigned char *string)

{

while(*string) //不停地判断循环

{

Send_char(*string++); //发送一个字符到电脑上

}

}

/////////////////////////////////////////////////////////////////////////

函数名称:main

函数功能:把从电脑串口调试助手上发送到实验板上的字符串,原样发送到串口调试助

手上

参数介绍:无

返回值: 无

注意事项:无

/////////////////////////////////////////////////////////////////////////

void main()

{

uchar cValue;

DelayMs(50); //稳定系统

Init_UART(); //初始化串口

while(1)

{

if(cFlag==1)

{

Send_string("\r\n您发送的字符串是:"); //发送字符串

Send_string(cReceive_Data); //发送接收到的字符串

for(cValue=0;cValue<cNumber;cNumber++)//清空全局数组

{

cReceive_Data[cValue]='\0';

}

cFlag=0; //清收到新数据标志位

}

}

}

/////////////////////////////////////////////////////////////////////////

函数名称:UART_Routine

函数功能:串口接收中断函数,把数据放入全局变量cReceive_Data里,并让相应的标志位

置1

参数介绍:无

返回值: 无

注意事项:无

/////////////////////////////////////////////////////////////////////////

void UART_Routine() interrupt 4

{

if(RI==1)//RI为接受中断标志,可能是发送产生的中断

{

ES=0; //关串口中断

cReceive_Data[cNumber++]=SBUF;//将接受数据放入预置数组

cFlag=1;

RI=0;//接受中断标志软件清零

ES=1; //开串口中断

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: