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

/
 实现功能:从电脑上的串口调试助手向实验板发送字符串,实验板接收到字符串后
      会按发送过来的字符串返回到串口调试助手上,注意在调试串口是应该
     把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;      //开串口中断
 
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值