`

STC89C52单片机——串口发送程序2

 
阅读更多

修改了 1 中不能连续调用 字符串发送的BUG!!

 
/*-----------------------------------------------
  名称:串口通信 修复程序1中无法连续调用字符串发送的BUG
  编写:LZM  kaly.liu@163.com
</a>  日期:2015.05.24
  修改:无
  内容:连接好串口波特率设置为9600,无奇偶校验
        晶振11.0592MHz
		接上串口,可以接收到自己发送的字符
------------------------------------------------*/

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义                        

/*******************************************************************
请提前计算一下所选晶振能达到的最高速度,波特率不能超过最高速度
(1) 波特率加倍(SMOD=1):  Max_Baud = FOSC/12/16
(2) 波特率不加倍(SMOD=0):Max_Baud = FOSC/12/32
例如:22.1184MHz晶振,波特率加倍时,最大波特率=22118400/12/16=115200
*******************************************************************/
#define FOSC	11059200		//振荡频率
#define BAUD	9600			//波特率
#define SMOD	1			//是否波特率加倍
#if SMOD
	#define TC_VAL	(256-FOSC/16/12/BAUD)
#else
	#define TC_VAL	(256-FOSC/32/12/BAUD)
#endif

typedef unsigned char uint8;
typedef unsigned int uint16;

code const char str1[] = "The string is 来自单片机!\r\n";	 
code const char str2[] = "Author: Louis \r\n";
code const char str3[] = "多多指教~~\r\n";

//const  限定一个变量不允许被改变。在一定程度上提高程序安全性和可靠性
//code 存储区间为 程序存储区

/***************函数声明*******************/
void InitUART(void);
void SendOneByte(uint8);
void SendrStr(const uint8 *ptr);

/****************主函数********************/
void main(void)
{
    uint8 i=0;
    InitUART();

    while(str2[i]!='\0')
    {
	SendOneByte(str2[i++]);	
    }

	SendrStr(&str1[0]);
	SendrStr(&str1[0]);
    while(1);
}

/****************中断服务函数***************/
void UART_ISR(void) interrupt 4
{
    uint8 RX_Data;
    //只响应"接收"中断,"发送"中断来了就直接抹掉
    if(RI)
   {
     RI = 0;	//串口中断标志不能自己清除,需要手动清除
     RX_Data=SBUF;
     SendOneByte(RX_Data);
   }
   else
     TI = 0;		//串口发中断是发送完缓冲区数据之后产生
}

/****************串口初始化函数*************/
void InitUART(void)
{
    TMOD = 0x20;    //定时器1,模式2工作模式	   
    SCON = 0x50;    //串口工作模式1,允许REN   /* SCON: 模式 1,  8-bit UART, 使能接收         */
    TH1 = TC_VAL;
    TL1 = TH1;
    PCON = 0x80; 	//发送速率加倍
    ES = 1;
    EA = 1;
    TR1 = 1;
}
/**************串口发送字符函数*************/
void SendOneByte(uint8 c)
{
    ES = 0;			//禁止中断,让串口安心工作啊
    SBUF = c;
    while(!TI);		//等待发送完毕
    TI = 0;			//清TI中断
    ES = 1;			//打开中断
}
/**************串口发送字符串函数*************/
void SendrStr(const uint8 *ptr)
{
    
	for(;*ptr!='\0';ptr++)
	{
	   SendOneByte(*ptr);
	}
}

 

 

 

分享到:
评论

相关推荐

    STC89C52系列单片机中文手册

    超低功耗——STC89C52系列单片机 STC89C52系列单片机在空闲模式下具有极低的功耗特性,这使其非常适合于电池供电的场合。 #### 12. 每个单片机拥有全球唯一身份号码(ID号) 这一特性为追踪和管理单片机提供了便利...

    51单片机联网小案例:stc89c52+esp8266-01

    3. **编程STC89C52**:编写C语言程序,用以控制单片机读取传感器数据,发送AT指令给ESP8266,以及解析从ESP8266返回的网络响应。程序设计需要考虑错误处理和通信协议的实现。 4. **网络通信**:STC89C52通过串行...

    STC89C52单片机串行口使用研究

    STC89C52单片机内部集成了一个全双工的串行通信接口(UART),可以实现异步串行数据的发送和接收。该串行口支持四种工作方式,分别适用于不同的应用场景。 **2.2 串行口管脚定义** - RXD (P3.0):串行数据接收端; ...

    0.96寸OLED显示屏_STC89C52系列_IIC_例程

    0.96寸OLED显示屏在嵌入式系统中的应用是一个常见的硬件接口技术,尤其当与STC89C52系列微控制器结合时,能够实现丰富的图形与文本显示功能。STC89C52是一款基于8051内核的微控制器,拥有丰富的I/O口和内存资源,常...

    基于单片机——STC89C52RC单片机学习例程书籍代码资料.zip

    2. **深入接口篇**:这部分可能涵盖了STC89C52RC的外部接口使用,如GPIO(通用输入/输出)、串行通信(UART)、SPI、I2C等,以及如何通过这些接口与外部设备进行通信。 3. **实战认知(实木笑脸符号)**:这可能是...

    51单片机STC89C52RC开发板例程之串口发送一串字符.rar

    在这个"51单片机STC89C52RC开发板例程之串口发送一串字符"的项目中,我们主要关注的是如何利用单片机的串行通信接口(UART)来实现数据的发送。串口通信是单片机与外部设备之间进行数据交换的一种常用方式,其工作...

    51单片机STC89C52RC开发板实验:通过串口发送字符显示爱心形状图形程序源代码

    在本文中,我们将深入探讨51单片机STC89C52RC的开发板实验,特别是如何通过串口发送字符来显示爱心形状的图形程序。STC89C52RC是一款广泛应用的8位微控制器,因其性价比高、功能强大而受到众多电子爱好者的青睐。在...

    基于STC89C52单片机的智能交通灯控系统设计

    ### 基于STC89C52单片机的智能交通灯控系统设计 #### 概述 本文档详细介绍了一个基于STC89C52单片机的智能交通灯控系统的设计思路和技术要点。该系统旨在解决城市交通管理中的一个重要问题——交通信号灯的智能...

    1、源码_STC89C52_

    标题 "1、源码_STC89C52_" 暗示了这是一个关于STC89C52单片机的源代码项目,而描述 "基于单片机心率检测STC89C52 单片机电子设计" 提供了具体的应用场景——心率检测。结合标签 "STC89C52" 和压缩包中的文件名 "1、...

    stc89c52单片机双机通讯

    /*模 块 名:串口通讯——发送 驱动芯片型号:PL2303 */ /*创 建 人:追忆逝水的年华 日期:2013-09-12 */ /*修 改 人: 日期:2013-09-12 */ /*功能描述: */ /*其他说明: */ /*版 本: /*占用资源: 1)端口...

    单片机毕业设计——毕业设计——STC89C52RC单片机学习例程书籍代码资料.zip

    单片机毕业设计是许多计算机科学与电子工程专业学生在学术生涯最后阶段的重要任务,而STC89C52RC单片机是这类设计中常见的核心元件。这个压缩包文件包含了丰富的学习资源,旨在帮助学生更好地理解和掌握单片机的使用...

    stc89c52rc使用手册

    ### STC89C52RC使用手册关键知识点解析 #### 一、STC89C51RC/RD+系列单片机总体介绍 **1.1 STC89C51RC/RD+系列单片机简介** STC89C51RC/RD+系列单片机是一款基于8051架构的高度集成化的微控制器,由宏晶科技(STC...

    Stc89C52_CC1101 无线通讯收发程序(嵌入式开发).zip

    《Stc89C52_CC1101 无线通讯收发程序——嵌入式开发详解》 在嵌入式系统的世界里,无线通信扮演着至关重要的角色,它使得设备能够无需物理连接就能进行数据交换。本项目聚焦于Stc89C52微控制器与CC1101无线通信芯片...

    食堂刷卡系统_基于STC89C52的MFRC522_刷卡_食堂刷卡消费充值_

    首先,我们要了解核心组件——STC89C52。这是一款8位单片机,由Microchip Technology(原名STC)生产。它拥有8K字节的Flash ROM,256字节的RAM,32个I/O口线,内置4KB EEPROM,以及多个定时器和串行通信接口。这种...

    单片机89c52与MLX90614红外的测温程序

    这篇文章将详细讲解如何使用STC89C52单片机配合MLX90614红外测温传感器实现温度测量,并将结果显示在LCD屏幕上。首先,我们要了解这两个关键组件。 STC89C52是一款低功耗、高性能的8位微控制器,拥有8KB的Flash存储...

    单片机串口通信实例代码

    在这个实例中,我们关注的是STC89C52单片机,这是一种广泛应用的8位微控制器,以其丰富的I/O端口、内置Flash存储和低功耗特性而闻名。STC89C52的串口通信功能使其能够与个人计算机(PC)或其他具有串行接口的设备...

    《智能仪器》课程设计- 基于STC89C52的温度测量系统设计(数码管显示).doc

    根据提供的文档信息,本次课程设计的主要内容是基于STC89C52单片机的温度测量系统设计,并采用数码管进行数据显示。接下来,我们将详细分析该设计中的关键知识点。 ### 1. 引言 #### 1.1 本设计意义 在现代工业...

    基于单片机温度控制系统——硬件部分.doc

    STC89C52 单片机是一种8位微控制器,具有丰富的外设接口,包括串口、计数器、计时器、PWM 输出等,可以满足各种应用场景的需求。 知识点2:LCD1602 液晶显示屏 LCD1602 液晶显示屏是本系统的显示模块,能够显示...

    单片机温度控制系统的设计毕业论文设计.doc

    本设计的关键词——STC89C52单片机、DS18B20温度传感器和显示电路,揭示了系统的关键组成部分和技术焦点。通过对这些关键技术的掌握和应用,设计者能够构建一个可靠且实用的温度控制系统,满足不同领域的温度监测和...

Global site tag (gtag.js) - Google Analytics