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

发布者:科技飞翔最新更新时间:2019-01-26 来源: eefocus关键字:STC89C52  单片机  串口发送 手机看文章 扫描二维码
随时随地手机看文章


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

  名称:串口通信

  编写:LZM

  日期:2015.05

  修改:无

  内容:连接好串口波特率设置为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 来自单片机!\r\n";

code const char str2[] = "Author: louis \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);

 

    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)

{

    do

    {

SendOneByte(*ptr); //其实发送字符串也是在调用发送字符的函数~~

    }while(*ptr++!='\0'); //要有结束判断,否则串口发送 字符串 不知道什么时候停止

}

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

上一篇:STC51烧录程序时序分析
下一篇:C51进行I²C通信

推荐阅读最新更新时间:2024-03-16 16:23

基于STC89C52单片机的七彩迷你音乐盒
基于STC89C52单片机的七彩迷你音乐盒。在单片机最小系统的基础上,对其他两个I/O口连接硬件电路。P1.0接一个七彩快闪LED灯。P1.5口接一个NPN型三极管的放大电路,再连接一个无源蜂鸣器(用来播放乐曲)。 这样一个迷你音乐盒就完成了。硬件电路非常简单,其中单片机任意一个I/O口都可以作为乐曲的输出,信号经过NPN三极管放大驱动蜂鸣器发出电子乐曲。 紧接着就是为单片机设计运行的程序了,这里我用汇编写了一段《生日快乐》的程序。大家可以仿照,我的思路修改乐曲。 DIY手记:用C52这么大块头的单片机,确实很浪费。因为一共有32个I/O引脚,设计音乐盒只用了其中的两个,非常的浪费。大家可以用其他的单片机代替
[单片机]
51单片机的工作流程及原理解析
1.ROM:只读存储器,单片机的只读存储区大多用于存储程序固又称程序存储器。 51单片机是EPROM,所谓的EPROM是可擦除的只读存储器。可以把原来的程序擦除了,再写一个新的进去。 断电后是可以保存的,数据存储器(RAM)是不能保存的。 RAM只能在程序执行的时候不断地重新存储定义的变量。如int x,int y 可以通过code这个指令来将定义的变量放在ROM,而不是RAM中,节省RAM资源 2.RAM:随机存取存储器,用于存储定义的变量等,速度快 51单片机的RAM存储容量远小于ROM,但是速度非常之快 内部详细图示 内部的结构看似十分复杂,但是大致上可以分为两个部分:运算器(红色框)和控制器(蓝色框
[单片机]
51<font color='red'>单片机</font>的工作流程及原理解析
按键控制51单片机上面硬件的功能
按键一二三对应51单片机上不同的功能 例如跑马灯,蜂鸣器,呼吸灯,中断之类的 #define FSCLK 11059200 //晶振频率为 11.0592MHz #include STC12C5A60S2.h #include key_scan.h #include intrins.h #define LED_PORT P0 sbit BEEP=P1^4; unsigned int n = 0; unsigned int t = 0; unsigned char xx = 127; unsigned char p; unsigned char m; #define uchar unsig
[单片机]
51单片机与PC通信要注意的地方
做了两天终于把232通信做通了,写下总结。 第一、波特率要设置相同。 第二、要在PC机上的设备管理器里把USB转232串口设置为COM2,并且波特率要设置的和软件里写的一样。 如下是写的测试程序,精简了通信部分。 51单片机上的通信程序 #include reg52.h #define uchar unsigned char #define uint unsigned int uchar code cgf1 = { CHINA }; uchar code cgf2 = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; main() { uchar i,j; TMOD
[单片机]
一种扩散硅压力式密度静态测量系统
在制糖等轻化工程中,为了全面实现工艺过程及质量的自动控制,需要对溶液的密度、浓度等万分进行测量,而密度的在线测量与湿度、流量、压力及液位等非电量测量相比,较为落后。谐振式和奥我力式密度计工作原理复杂,价格昂贵,未能在工业过程中普及;压差式密度测量一般采用具有可动部件和测量精度不高的机械式压力传感器(或压力变送器) ,测量精度和响应速度不能满足工业过程测量需要。在1980年末到1990年初,扩散硅压力传感器技术有了新的突破,不仅无可动部件,并且具有动态响应快和测量精度高等优点,它为扩散硅压力传感器的二次开发提供了一个很好的机遇。基于扩散硅压力传感器的密度测量方法和其它测量方法相比,具有结构简单、性能价格比高及易于工程实现等优点。密度
[单片机]
一种扩散硅压力式密度静态测量系统
51单片机矩阵键盘C程序
主程序1: void main() { uchar i,j,k i=0; j=0; while(1) { i=key();//键盘循环扫描,其值赋给变量数组table if(i!=0)//键盘子程序返回值非0,即有按键按下 { table =i;//将值存在变量数组中 j++; } if(j==6) { j=0; for(k=0;k 6;k++)//当数组存满6位时核对 { P3=table ;//P3接有一排指示灯 delay (1000);
[单片机]
8051单片机的中断响应过程解析
8051的CPU在每个机器周期期间,顺序采样每个中断源,CPU在下一个机器周期按优先级顺序查询中断标志,如查询到某个中断标志为1,将在下一个机器周期期间按优先级来进行中断处理。在下列任一种情况存在时,中断申请将被封锁。 1、CPU正在执一个同级或高级的中断服务程序2、当前机器周期不是当前指令周期的最后一个机器周期,即要保证把当前指令执行完。 CPU响应中断, 由硬件自动将相应的中断矢量地址装入程序程序计数器PC,转入该中断服务程序进行处理。 对于有些中断源,CPU在响应中断后会自动清除中断标志,如定时器溢出标志TF0,TF1,以及部中断标志IE0,IE1。 而有些中断标志,不会自动清除,只能由用户用户软件清除,如串
[单片机]
固定翼飞机竖直飞行控制系统的设计
   引言   固定翼飞机水平飞行是最常见的飞行状态,让其做大仰角飞行则动作不能一直保持,如让其垂直于地面飞行能保持的时间则更短。本项目要实现的是一个可以让飞机垂直于地面飞行并可以稳定在固定高度的控制系统。利用在机身加入的三轴向加速度传感器来检测垂直于地面飞行的飞机的姿态。当检测到飞机前后摇摆时,控制水平尾翼使飞机保持前后方向的稳定性;当检测到飞机左右摇摆时,控制垂直尾翼使飞机保持左右方向的稳定性;当检测到飞机上下窜动时,控制油门的大小(即螺旋桨的转速)来保持飞机飞行高度的稳定性。当这些控制都很精准到位时,固定翼飞机也可以像直升机一样稳稳地悬停在空中了。利用本文设计的控制系统可以让飞机在做垂直飞行减速的同时顺时针或逆时针转90°
[安防电子]
固定翼飞机竖直飞行控制系统的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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