历史上的今天
返回首页

历史上的今天

今天是:2025年01月26日(星期日)

2019年01月26日 | STC89C52单片机——串口发送程序1

2019-01-26 来源:eefocus


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

  名称:串口通信

  编写: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'); //要有结束判断,否则串口发送 字符串 不知道什么时候停止

}

推荐阅读

史海拾趣

Altonics公司的发展小趣事

在技术创新的基础上,Altonics公司积极拓展市场。公司不仅在国内建立了完善的销售网络,还积极开拓国际市场,产品远销海外。同时,公司注重品牌建设,通过提供优质的产品和服务,树立了良好的品牌形象。公司的广告宣传和展会参展活动也提升了品牌知名度,为公司的长远发展奠定了坚实的基础。

eLED.com Corp公司的发展小趣事

作为一家有影响力的企业,eLED.com Corp始终关注社会责任的履行。公司积极参与各类公益活动,关注教育、环保和扶贫等领域。通过捐款捐物、志愿服务等方式,eLED.com Corp为社会做出了积极的贡献。此外,公司还注重员工培训和福利待遇的提升,努力为员工创造一个良好的工作环境和发展空间。通过这些举措的实施,eLED.com Corp不仅赢得了社会的广泛赞誉和支持,还为企业的发展注入了新的动力。

上海国芯(Gcore)公司的发展小趣事
选择合适的速度传感器,确保能够准确测量被测物体的速度,并将其转换为电信号供555定时器处理。
ENOCEAN公司的发展小趣事

自推出第一代产品以来,EnOcean凭借其卓越的性能和独特的优势,在欧洲市场上取得了良好的销售业绩。随后,随着公司不断推出新产品和技术,其产品的应用领域也逐渐扩大至全球范围。如今,EnOcean的无线模块已被全球100多家制造商选中,用于实现他们的建筑和工业系统理念。无线组件已经在超过20万栋建筑中使用,为节能建筑和创新产业提供了重要支持。

DELTA公司的发展小趣事

随着人们生活水平的提高和环保意识的增强,Delta公司提出了“智能绿生活”战略,致力于为个人、家庭和企业带来更环保健康的生活型态。在这一战略指导下,Delta推出了一系列视讯显像系统、网络通信系统、LED照明、智能语音系统及云计算等产品。这些产品不仅具有高效、节能的特点,还为用户提供了更加便捷、智能的生活体验。

Compensated Devices Inc公司的发展小趣事

在电子行业竞争激烈的年代,CDI始终坚持品质至上的原则。公司建立了严格的质量控制体系,从原材料采购到生产流程,再到成品检验,每一个环节都严格把关。正是这种对品质的执着追求,使得CDI的产品在客户中赢得了良好的口碑。随着口碑的积累,CDI逐渐发展成为电子元件领域的知名品牌。

问答坊 | AI 解惑

外商面试新要点

面试在求职活动过程中,对于求职者而言,可说是压力最大的一个阶段,因为能否成功求职,全靠这临门一脚。因此,想要在面试中成为胜利者的话,唯有做好万全准备,才能收到事半功倍的机会。    1、面试前应准备事项   总公司概况:总公司所在地、 ...…

查看全部问答>

msp430各模块学习6

msp430各模块学习 1- 复位模块 2- 时钟模块 3- IO端口模块 4-WDT看门狗模块 5- TimerA定时器模块 6- 比较器A模块 7-ADC12数模转换模块 8-USART串行异步通讯模块 9-CPU模块及全局资料 10-MSP430其他应用介绍…

查看全部问答>

新手请教MC3000问题

在MC3000中我用的是VS2003开发C# 怎么才能屏蔽掉设备自带的扫描音? 然后根据程序判断后来发出我想要的声音( 这步已经实现)…

查看全部问答>

☆☆☆☆美国讯升科技急急急急急急急急急急聘Linux/Uinux 下C++工程师☆☆☆☆☆

☆☆☆☆美国讯升科技急急急急急急急急急急聘Linux/Uinux 下C++工程师☆☆☆☆☆ 请严格符合以下条件者请投简历到:bzhang@comrise.com,并注明应聘职位及招聘信息来源于天涯论坛。 一:手机应用软件开发工程师 Qualifications A: 手机应用软件 ...…

查看全部问答>

更新IV:FirmwareLib在EK_STM32F上的学习体会(I2C/IWDG)

继续,上一贴是:更新III:Firmware Lib在EK_STM32F上的学习体会(FLASH/GPIO)再早的几个帖子链接可以在上一贴内找,就不一个一个列出来了,等全系列结束了来个总集。-----------------------I2C分隔线-----------------------------------Exem ...…

查看全部问答>

奇怪的串口接收,请教。。。

我是刚刚接触stm8 自己焊了块板 今天调试串口就是不行,可以接收到但是是乱码 我用的是它官方的固件库 下面是例程 /*********************/ #include "stm8s.h" #include "stdio.h" main() {       &nb ...…

查看全部问答>

关于两路PWM波形不同时启动的问题

产品为DEC2407开发板(LF2407A) 请问能否让PWM3/PWM4这对波形在PWM1/PWM2启动之后经过指定的时间 t 才启动? 总的目标是想在定时器T1,T2和PWM1 - PWM6的范围内实现两对同频率带死区的PWM波形_不同时_启动,并且能控制它们的启动间隔 多谢…

查看全部问答>

MSP430F449的时钟问题

msp430F449的时钟最高可以40MHZ,请问下这个40MHZ是外接40MHZ晶振实现,还是编程实现?单片机频率40MHZ除了功耗大,还有什么负面影响吗? 还有 我软件变成只能将XT2上的8M时钟作为MCLK,请问怎样编程实现40MHZ的F449的MCLK频率??…

查看全部问答>

低功率纳米技术及其它敏感器件的交流与直流测量方法的比较--测量技术及误差源- I

保证精确低功率测量的关键是尽可能的降低噪声。在许多低功率测量中,一种通用的技术是使用锁定放大器为测试对象提供小的交流电流,然后测量其上的电压降。另一种替代方法是使用直流反转技术。这两种方式都需要考虑并控制多种误差源。  &nbs ...…

查看全部问答>

用ECU转接器测试数据失真是什么原因

用ECU转接器测试数据失真是什么原因…

查看全部问答>