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

发布者:DreamBig123最新更新时间:2019-05-21 来源: eefocus关键字:STC89C52  单片机  串口发送程序 手机看文章 扫描二维码
随时随地手机看文章

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


/*-----------------------------------------------

  名称:串口通信 修复程序1中无法连续调用字符串发送的BUG

  编写:LZM  kaly.liu@163.com

  日期:2015.05.24

  修改:无

  内容:连接好串口波特率设置为9600,无奇偶校验

        晶振11.0592MHz

接上串口,可以接收到自己发送的字符

------------------------------------------------*/

 

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

 

/*******************************************************************

请提前计算一下所选晶振能达到的最高速度,波特率不能超过最高速度

(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 来自单片机!rn";  

code const char str2[] = "Author: Louis rn";

code const char str3[] = "多多指教~~rn";

 

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

//code 存储区间为 程序存储区

 

/***************函数声明*******************/

void InitUART(void);

void SendOneByte(uint8);

void SendrStr(const uint8 *ptr);

 

/****************主函数********************/

void main(void)

{

    uint8 i=0;

    InitUART();

 

    while(str2[i]!='')

    {

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!='';ptr++)

{

   SendOneByte(*ptr);

}

}



关键字:STC89C52  单片机  串口发送程序 引用地址:STC89C52单片机——串口发送程序2

上一篇:IIC读写AT24C02代码1——通过串口命令控制R/W
下一篇:STC89C52单片机——串口发送程序1

推荐阅读最新更新时间:2024-11-17 10:03

单片机 键盘矩阵行列扫描
protel软件电路仿真: 无显示: 有显示: 汇编程序
[单片机]
采用8051单片机的变化空调机智能控制的设计与实现
  本文阐述了用8051单片机根据环境温度的变化实现空调机智能控制的设计方法。   空调机广泛应用于日常生活中。本文充分挖掘了单片机系统稳定、成本低、适宜于工业控制的特点,实现了用8051单片机根据室温变化,智能控制空气压缩机,以达到调节室温的目的。本系统具有精度高、易于控制、成本低等优点。   系统原理与硬件电路   空调机的控制系统由开关键、温度下调键、温度上调键组成。按下开关键后,系统检测环境温度并显示。温度上调键和温度下调键用于设定温度,根据实际需要,温度可调范围为10~35℃,当第一次按下任意设定键时都显示最高温度35℃,按下相应的键可以依次增加或减少1℃,并可以循环显示:如当上调到35℃时,再按一次上调温度键,则返回到
[单片机]
采用8051<font color='red'>单片机</font>的变化空调机智能控制的设计与实现
单片机与PLC之间的区别联系
单片机和PLC之比较 要搞清楚单片机与PLC的异同,首先得明确什幺是单片机,什幺是PLC。对此,我们简要回顾一下计算机的发展历程也许有帮助,按计算机专家的原始定义,计算机系统由五大部分--即控制单元(CU)、算术运算单元(ALU)、存储器(Memory)、输入设备(Input)、输出设备(Output)组成。早期计算机(晶体管的或集成电路的,不包括电子管的)的CU或ALU由一块甚至多块电路板组成,CU和ALU是分离的,随着集成度的提高,CU和ALU合在一块就组成了中央处理单元(CPU),接着将CPU集成到单块集成电路中就产生MPU或MCU,出现了如Intel4004、8008、8080,8085、8086、8088、Z80等MP
[单片机]
51单片机通过串口控制LED
通过串口助手控制led,还有加了蜂鸣器,也有响声,不过不是太大,一点学习,希望大家多指教。 #include reg52.h //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; sbit beep=P1^5; void delay(u16 i) { while(i--); } /******************************************************************************* * 函数名 :UsartIni
[单片机]
51<font color='red'>单片机</font>通过<font color='red'>串口</font>控制LED
基于ATmega16L单片机的温度控制系统设计
1 引言 随着科学技术的进步,检测行业发展快速,除了检测项目和内容不断扩大,更重要的是检测愈来愈科学化、职能化,主要表现在检测过程及检测结果由计算机监控和显示。多点温度的采集控制近年来在检测行业应用较为广泛,其中以微机为核心的监控技术价格低廉,使用方便,应用也最普遍。 本文主要介绍基于ATmega16L单片机的温度控制系统的设计,具体包括炉温的采集和控制、LCD显示以及PC机绘制温度变化的曲线图等。硬件和软件设计采用模块化的思想,系统集成度较高。 2 系统的硬件设计 图1为系统硬件的总体结构图。系统由主控制器、温度传感器、运算放大电路、液晶显示电路、键盘电路、串口通信电路等构成。由结构图1可看出,系统模块较多,所以应合
[单片机]
基于ATmega16L<font color='red'>单片机</font>的温度控制系统设计
杭州晶华微电子:深耕ADC和MCU“中国芯”
晶华微成立于2005年,致力于高性能、高品质混合信号集成电路设计及销售,以高集成度、高可靠性的创新设计能力及先进的品质保证体系,为用户提供一站式专业集成电路及产品化应用方案设计。 15年来,晶华微坚持正向设计、自主研发,已拥有低功耗和低噪声放大电路、不同结构的模/数及数/模转换器、电压基准源、8位和32位MCU、混合信号SoC等多项核心技术,并申请获得多项专利/软著。其自主研发的工控HART通讯控制器芯片及4~20mA电流DAC更是打破工控行业国外垄断,实现国内突破。目前公司通用模拟集成电路及系列专用SoC产品已广泛应用于红外测温领域、智能可穿戴设备、各种消费类电子产品及工业控制、测试测量仪器仪表、传感器信号处理及物联网等众多领域
[手机便携]
杭州晶华微电子:深耕ADC和<font color='red'>MCU</font>“中国芯”
利用VB 6.0实现网络远程PC与单片机通信
在各种单片机应用系统的设计中,常常遇到单片机与PC的通信问题,在速度要求不高、传送距离不远的场合一般采用RS 232标准串行接口实现,在传送距离较远的场合,也有学者研究通过网络实现PC间的通信。但是,要同时满足高速度和远距离PC与单片机通信这是一个迫切需要解决的问题。随着信息技术的发展,计算机和网络越来越普及,对单片机的远程控制与测量的要求也越来越多。本文在结合现有研究的基础上,对相关的设计进行一定的改进和创新,设计一个远程通信系统,他由3部分构成:远端PC、本地端PC和单片机系统。通过VB可视化编程,远端PC利用局域网向本地端PC发出命令,本地端PC接到命令后,自动与单片机通过打印机接口以EPP1.9协议进行通信(串行接口作
[单片机]
利用VB 6.0实现网络远程PC与<font color='red'>单片机</font>通信
FreescaleS08微控制器MC9S08QB8/4
飞思卡尔半导体(Freescale Semiconductor)新推出 MC9S08QB8/4 (QB8)系列8位S08微控制器(MCU),大幅改善了能源效率,适合多种低功耗嵌入式应用,如烟雾探测器、电池驱动的玩具与游戏机、车库自动门及其他远程遥控等电池供电应用等。 QB8 MCU提供一系列节能特性,如两组超低功率停止模式、低功率执行与低功率待机模式、6微秒的唤醒时间以及超低功率的外部震荡器与时脉控制暂存登录器,可关闭闲置外围模块的时脉。QB8组件的运作仅需1.8V电源,但时脉仍可达20MHz。 QB8 MCU具备多达8KBytes的闪存、分辨率可达12位的8信道模拟数字转换器(ADC)、一组8位的模拟数字定时器、一组16位的定
[汽车电子]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved