STC89C52单片机串口调试

2016-04-15来源: eefocus关键字:STC89C52  单片机  串口调试
/////////////////////////////////////////////////////////////////////////

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

#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: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    {
     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;      //开串口中断
 
}

关键字:STC89C52  单片机  串口调试 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/article_2016041525753.html

上一篇:STC89C52单片机步进电机调试
下一篇:STC89C52单片机12864液晶显示

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STC89C52RC单片机的NRF24L01无线通信程序,收发一体
本设计由两块STC89C52RC单片机组成,通过NRF24L01实现最廉价的无线通信。每块单片机都是集收发于一体,先初始化会在OLED上显示是否初始化成功,然后通过按键可选择收发模式,并在OLED屏幕上显示出来最后选择串口调试助手,打开串口给单片机发送信息,单片机接收到后再通过NRF24L01向另一块单片机发送接收成功后会将接收到的信息显示在OLED上。OLED显示屏较1602液晶显示屏清楚,可现实的内容丰富,可以建立自己的字库并且占用的引脚较少单片机源程序如下:#include "reg52.h"#include "oled.h"#include "bmp.h"
发表于 2020-11-09
STC89c52+DS1302时钟,数码管显示时间日期,可调节
最近在做数字电子时钟,也总结出来一些资料,在这分享给大家,DS1302时钟芯片。电脑仿真所需要的芯片有AT89C52,74HC138 排阻(因为C52单片机P0的IO口没有上拉电阻),74HC245 ,如果需要做实物,还得根据数码管的型号选择合适的电阻,DS1302芯片,按钮1,工作原理我们先了解我们所用的东西,STC89C52是8051单片机,这里就不多介绍了,然后就是DS1302时钟芯片,这个是DS1302时钟芯片这个是工作原理,我们经常用的DS1302与单片机的连接使用2.实验思路理解DS1302时钟芯片与单片机之间的数据传送,用的单总线的方式,所以会有时序图,还有读写图表三是地址,如果读取某个分钟或者小时,我们读数
发表于 2020-09-18
<font color='red'>STC89c52</font>+DS1302时钟,数码管显示时间日期,可调节
分享一个STC89C52的头文件
.--------------------------------------------------------------------------*/#ifndef __STC89C52_H__#define __STC89C52_H__typedef unsigned char u8;typedef unsigned int u16;/*  BYTE Registers  */sfr P0    = 0x80;sfr P1    = 0x90;sfr P2    = 0xA0;sfr P3    = 0xB0;sfr PSW   = 0xD0;sfr ACC
发表于 2020-09-09
单片机数码管时钟电路图
用STC89c52单片机,12M晶振。计时用T2定时器,16位自动重装模式  基本功能如下: 可以显示年份、月、日、时间,有闹钟功能,有倒计时功能。 上电默认显示时间,可通过按键切换显示年份、日期、闹钟、倒计时,显示一定时间后自动返回到时间显示。 在相应的显示状态下按设置键进行相应的设置。如在时间显示时按设置键可调整时间。其余类推倒计时最多可以倒数99小时59分59秒,设置完倒计时时间后进入倒数状态,闪烁显示倒数时间,中途可按键退出,倒数结束后铃响1分钟返回时间显示。 闹钟可选择开或关,闹铃响1分钟停止。电路原理图如下:制作出来的实物图如下:单片机源程序如下:#include <reg52.h>
发表于 2020-08-26
单片机数码管时钟电路图
电阻、电容和电感测试仪设计
实物图总电路图:电源模块:测量模块:显示模块:摘要近几年来,电子行业的发展速度相当快,电子行业的公司企业数目也不断增多。这个现象带来的直接结果是电子行业方面的人才需求不断增多。所以,现在大多数高校都开设与电子类相关的专业及课程,为社会培养大量的电子行业的人才。做过电路设计的工作人员或者学生大多数使用万用表来测量一些元件参数或者电路中的电压电流。然而万用表有一定的局限性,它只能测量有限种类的元器件的参数,对于电容和电感等一些电抗元件就无能为力了。所以制作一种简便的电容电感测量仪显得尤为重要,方便电路设计人员或者高校电子类专业的学生测量电路中需要用到的电容及电感的具体值。本次设计的思想是基于以上原因提出来的。该系统以STC89C52
发表于 2020-08-24
电阻、电容和电感测试仪设计
NRF24l01无线模块的stc89c52单片机程序
程序24l01无线模块  stc89c52单片机源程序如下:/*******************************************************************************************************************************************************************/#include "reg52.h"        /*包含STC单片机头文件*/#include "QX51/qx51.h" /*包含qx51
发表于 2020-08-03
NRF24l01无线模块的<font color='red'>stc89c52</font>单片机程序
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved