历史上的今天
返回首页

历史上的今天

今天是:2024年11月25日(星期一)

正在发生

2021年11月25日 | 单片机UART串口通信(代码亲自调试成功)

2021-11-25 来源:eefocus

1.实现代码

代码如下(示例):


#include

#include               //printf头文件

#define uc unsigned char 

#define uint unsigned int

 

uc flag,i,flag_t,s[50]="",j=0,flag_n=0;

uc code table[]="单片机接收了:";        

 

void init()

{

TMOD=0x20;   //定时器工作方式,选择了定时器1,工作方式2 八位初值自动重装的8位定时器。  

TH1=0xf3;   //定时器1初值 ,设置波特率为2400 晶振11.955Mhz

TL1=0xf3;     //若为11.0592Mhz,设置波特率为9600,TH1=0xfd;TL1=0xfd。若接收的乱码,大概率是波特率设置不准确。

TR1=1;   //开启定时器1

 

SM0=0;

SM1=1;   //10位异步接收,(8位数据)波特率可变

    REN=1;   //允许串行口接收位

EA=1;       //允许中断(总闸)

ES=1;   //允许串口中断

}

void main()

{

init();

while(1)

{

if(flag==1)//有接收到数据

{  

if(flag_n!=0)//使下一次显示换行

{

TI=1;

printf("nn");

while(!TI);

TI=0;

}

for(i=0;i<13;i++)//发送table[]内容

{

SBUF=table[i];

while(!TI);//等待TI=1

TI=0;

}

for(i=0;s[i]!=''&&i<50;i++)//发送接收到的数据

{

SBUF=s[i];

while(!TI);//等待TI=1

TI=0;

}

flag=0;//接收标志清零

            

TI=1; //printf之前必须将T1置为1才行。

printf ("nPC发送了:%sn通信成功!",s);//打印,

while(!TI);

TI=0;

}

  }

}

 

void ser() interrupt 4

{

if(RI)//接收数据,手动将RI清0

{     

RI=0;

if(flag==0)      //清空接收数组s[]

        {

flag_n++; //第n次接收

for(j=0;s[j]!=''&&j<50;j++)

{

s[j]='';  //清零

}

j=0;        //清零

}

s[j]=SBUF;      //接收一个字节

flag=1;         //有接收到数据标志

j++;            //接收字节数+1

}

if(TI) //发送中断,可以省略

{

}

}


2.实机操作

①连接单片机和电脑

一般PC和单片机之间用的是USB转UART通信技术,PC用的是USB通信协议,单片用的UART通信协议(TXD,RXD)。在单片机开发板上,用CH340G芯片进行转换,如下图所示:

USB转UART串口电路

②用STC-ISP软件烧录.HEX程序

STC-ISP软件可以在官方网站下载,版本V6.87即可,将下图红框内容设置好后,要先点击下载/编程,再给单片机上电,即可烧录,烧录成功会有提示。

用STC-ISP烧录程序

③设置好STC-ISP的串口助手进行发送和接收数据

发送和接收数据成功,如下图1(多发几个数据时,后面的会出现乱码,我也不知道为什么,有知道的可以告诉我)。


用串口助手时,最重要的要设置好波特率,一定要和单片机保持一致。在这方面我吃了大亏,我试了4,5个程序,结果接收的都是乱码,原因就是波特率设置的不对。


我的单片机晶振频率是12Mhz,波特率只能设置成2400,误差才小,用9600时误差达8%。至于波特率计算,可以用STC-ISP的波特率计算器来计算,如下图2。

图1 用串口助手发送和接收数据图2 波特率计算器

3.UART串口通信详细介绍

这部分内容较多,自认没能力讲的比别人好,想要系统全面了解,建议可以详细看下链接里的文章,受益匪浅。

https://blog.csdn.net/qq_33835307/article/details/113606608?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.control

推荐阅读

史海拾趣

ept Connectors公司的发展小趣事

进入上世纪80年代,EPT Connectors公司迎来了一次重要的技术突破。公司成功推出了DIN 41612连接器,这一产品凭借其高性能和可靠性迅速在市场上获得了认可。随后,EPT又相继推出了PC/104和PC/104-Plus、Hm2.0、AdvancedTCA和MicroTCA等产品组,进一步巩固了其在连接器领域的领先地位。这些产品的推出不仅提升了EPT的品牌影响力,也为公司带来了可观的收益。

Cal Test Electronics公司的发展小趣事

Cal Test Electronics公司成立于1995年,当时正值电子配件和测试产品市场的快速发展期。创始人凭借对电子行业的深刻理解和敏锐的市场洞察力,决定专注于这一领域。初创时期,公司面临着资金短缺、市场竞争激烈等诸多挑战,但创始人带领团队通过技术创新和成本控制,逐步在市场上站稳脚跟。他们不断研发出符合市场需求的高品质产品,赢得了客户的信任和支持。

Hi-Light Electronic Co Ltd公司的发展小趣事

随着客户需求的多样化,Cal Test Electronics开始关注小批量定制型测试电缆组件的市场。公司利用自身的技术优势和生产能力,为客户提供个性化的定制服务。这些定制产品不仅满足了客户的特殊需求,也提高了公司的市场竞争力。通过这一策略,Cal Test Electronics成功打开了一个全新的市场领域,为公司的发展注入了新的动力。

EIC [EIC discrete Semiconductors]公司的发展小趣事

在竞争激烈的电子行业中,EIC公司深知供应链管理和成本控制的重要性。公司建立了完善的供应链管理体系,与供应商建立了长期稳定的合作关系,确保了原材料的稳定供应和质量的可靠性。同时,EIC还通过优化生产流程、提高生产效率等措施,不断降低生产成本,提升产品的竞争力。

Green Power Solutions公司的发展小趣事
如电子管破裂、灯丝不亮或极间短路等,会影响稳压器的正常工作。
Alutronic Kuhlkorper Gmbh & Co Kg公司的发展小趣事
首先确保稳压器已断电,并拔掉电源插头,以防触电。

问答坊 | AI 解惑

历年电子大赛原件清单

本帖最后由 paulhyde 于 2014-9-15 09:12 编辑 历年电子大赛原件清单  …

查看全部问答>

用过新华龙C8051F020开发板的进

我用的适配器是EC2,接口是USB的,安装了CP120X的驱动,在SILICON lab ide 里选择连接COM3,然后下载程序(一个简单程序,点亮那个P1.6的LED灯),但是一点动静都没有,是什么问题?还有就是我第一次在线调试程序时连接时显示“The serial adapter mus ...…

查看全部问答>

为什么RegDeleteKey()删除不了注册表项了

我用RegCreateKeyEx()生成了一个新的注册表项,但是紧接着调用RegDeleteKey()却删除不了了,我是写的一个小程序试的,不知道是不是不能紧接着删. 另人诧异的是当关掉程序后,再启动,进入程序就可以直接删除了,不知道这是为什么,有碰到这种事儿的吗, ...…

查看全部问答>

protel DXP2004 如何批量修改标识符?

如图 我想把图片上面的 DS107 108 109 尺寸弄小  请问怎么批量把这些标识符修改啊…

查看全部问答>

请教香主,RTC电池供电时间不准

EK-STM32F开发板,JP7跳至VBAT端,电池供电。USB供电时RTC准确的,拔掉USB后板上电池供电工作,24小时之后插上USB,时间慢了大约8小时10分钟,拔掉USB后测电池电压,为3.2V,电量应该可以的,请问这是什么原因?…

查看全部问答>

求助

请高手指点下为什么程序单步运行可以但快速运行不行?…

查看全部问答>

无源干扰设备二线检测维修的测试诊断系统

 基于PXI总线和LabVIEW技术,构建了无源干扰设备测试诊断系统,可完成无源干扰设备各种功能、性能参数快速、准确地测试,并依据测试结果,进行故障诊断,给出维修策略。硬件平台基于高性价比的PXI,测试程序采用LabVIEW开发,故障诊断程序采用 ...…

查看全部问答>

80C51单片机片内RAM低128个存储单元划分为哪4个主要部分?各部分主要功能是什么?

80C51单片机片内RAM低128个存储单元划分为哪4个主要部分?各部分主要功能是什么?…

查看全部问答>

34063 5v升12v

就是这样的电路图,Proteus中可以到12v,为什么实际中只有4.3v?洞洞板上做了两遍了,都是4.3,参数也是那个网页版计算器得来的,小弟不才,请高手指点一二!…

查看全部问答>

DSP28335+AIC23能收发数据,但数据貌似不对,听起来全是噪声,请教是否硬件问题

我现在使用的硬件是研旭的开发板,软件是TI给的Interfacing the TMS320F2833x to the AIC23B Stereo Audio Codec.zip,改一下控制接口和数据接口。 通过控制接口改变采样率,经过示波器测试,控制接口正常;MCBSP的接收和发送中断都能进去,数据接 ...…

查看全部问答>