`

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

 
阅读更多
 
/*-----------------------------------------------
  名称:串口通信
  编写:LZM
  日期:2015.05
  修改:无
  内容:连接好串口波特率设置为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";
//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单片机双机通讯

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

    STC单片机的初步学习

    51单片机主要发展历程:AT89C51(已停产)——AT89S51(已淘汰)——STC89C52(2004年,已落后)——STC12系列(2007年)——STC15F系列(2011年)——STC15W(2014年,最新主流)。 IAP15W4K58S4是STC15W系列中最典型的型号,...

    基于51单片机蓝牙模块传输数据毕业设计作品(1).doc

    1-2功能叙述 本作品通过HC- 05主从机一体蓝牙模块实现与带蓝牙的设备先通过OPP蓝牙协议来实现配对连接,实现连 接配对可通过电路板上的数字按键来实现输入,经STC89C52单片机处理后通过HC- 05蓝牙无线传送到另一方...

    帆板控制设计方案选择.doc

    张芝雨 张晓伟 来源:《无线互联科技》2013年第05期 摘 要:本系统采用1片宏晶科技公司的STC89C52单片机作为系统的控制器件,是一种带4K字 节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器——具有4K...

    基于51单片机蓝牙模块传输数据毕业设计作品.doc

    1-2功能叙述 本作品通过HC- 05主从机一体蓝牙模块实现与带蓝牙的设备先通过OPP蓝牙协议来实现配对连接,实现连 接配对可通过电路板上的数字按键来实现输入,经STC89C52单片机处理后通过HC- 05蓝牙无线传送到另一方...

    八通道模拟量数据采集

    本设计是基于STC89C52RC单片机的数据采集系统,采用AD芯片TLC2543负责模拟数据的采集和转换,可采集八通道的模拟量,由12864液晶显示出来。该系统可通过串口与上位机进行通信,开机后自动读取设置的电压值。当采集...

    电子专业毕业设计毕业论文资料电路设计51单片机设计软硬件设计221~300例资料合集.zip

    0231、STC89C52RC单片机学习例程书籍代码资料.rar 0232、例说STM32 ALIENTEK MINISTM32 实验27例光盘资料.rar 0233、UC3843控制多路输出开关电源设计与实现.rar 0234、1.8V 5.2 GHz 差分结构CMOS 低噪声放大器.rar ...

    电子电路单片机设计毕业设计论文资料软硬件设计78例资料合集资料.zip

    231、STC89C52RC单片机学习例程书籍代码资料.rar 0232、例说STM32 ALIENTEK MINISTM32 实验27例光盘资料.rar 0233、UC3843控制多路输出开关电源设计与实现.rar 0234、1.8V 5.2 GHz 差分结构CMOS 低噪声放大器.rar ...

    关于ds18b20程序

    * us延时程序 * ********************************************************/ void Delayus(uchar us) { while(us--); //12M,一次6us,加进入退出14us(8M晶振,一次9us) } /********************************...

    单片机数字时钟课程设计报告.doc

    芯片STC89C51RC与STC12C5A32S2 "芯片型号 "RAM "ROM "工作频率 "两者比较 " " "(字节) "(字节)"(Hz) " " "STC89C52RC "512 "8K "0—40M "相同点:都是 " " " " "最高可达48M "低电平驱动; " " " " " "不同点:...

    CEPARK MCP2515 CAN全套资料

    1)硬件环境 MCU:STC89C52 晶振:11.0592M CEPARK MCP2515 CAN 总线模块 使用手册 两个 CAN 模块的 IO 接口分别接一个单片机开发板,接线如下。  SCK——P2^3;  SI——P2^2;  SO——P2^1;  CS——P2^0; ...

    零基础DIY制作表白利器——8*8LED矩阵显示(仿真电路+程序)-电路方案

    ○ STC89C52RC单片机一片, 淘宝购得,单价3.7元; ○ 51最小系统板一个,淘宝购得,单价3.9(此为亏本赚信用价,现在卖家已经涨价到9.9元。另有5.8元价格的,小一些,没有串口和 232芯片,做工也差一个级别。不如买...

    开关通断计数控制器设计(原理图+源代码+设计说明等)-电路方案

    系统核心控制器采用STC89C52RC-DIP40,系统时钟11.0592MHz;显示器采用LCD1602液晶屏(蓝光白字); 按键使用6*6轻触按键;输出控制开关使用5V直流继电器,控制参数为220V/10A,自带开关状态指示灯,提供接线座; 2...

Global site tag (gtag.js) - Google Analytics