新闻中心

EEPW首页>嵌入式系统>设计应用> STC89C52单片机串口调试

STC89C52单片机串口调试

作者: 时间:2016-11-21 来源:网络 收藏
/////////////////////////////////////////////////////////////////////////

实现功能:从电脑上的串口调试助手向实验板发送字符串,实验板接收到字符串后
会按发送过来的字符串返回到串口调试助手上,注意在调试串口是应该
把USB旁边的跳线帽从USB一边插到DB9上
实验板型号:KBL-XYD-C52
实验名称:串口接收、发送实验
编写人:谢应东
编写日期:2012-4-24
/////////////////////////////////////////////////////////////////////////
#include

本文引用地址://m.amcfsurvey.com/article/201611/319222.htm

#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 {
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:9600fosc=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("rn您发送的字符串是:"); //发送字符串
Send_string(cReceive_Data);//发送接收到的字符串
for(cValue=0;cValue {
cReceive_Data[cValue]=;
}
cFlag=0;//清收到新数据标志位
}
}
}
/////////////////////////////////////////////////////////////////////////
函数名称:UART_Routine
函数功能:串口接收中断函数,把数据放入全局变量cReceive_Data里,并让相应的标志位
置1
参数介绍:无
返回值:
注意事项:无
/////////////////////////////////////////////////////////////////////////
void UART_Routine()interrupt4
{
if(RI==1)//RI为接受中断标志,可能是发送产生的中断
{
ES=0;//关串口中断
cReceive_Data[cNumber++]=SBUF;//将接受数据放入预置数组
cFlag=1;
RI=0;//接受中断标志软件清零
ES=1;//开串口中断
}
}



评论


技术专区

关闭