51单片机串口收发设计的思考

时间:2023-03-05作者:佚名
最近项目里面要用到51单片机做一些控制,主要功能是通过串口接收上位机的指令并进行分析解码,等待一个外部触发信号到来后执行之前接收的指令动作。正好手边有一片STC89C52,赶紧搭了个最小系统。STC89C52单片机可以通过串口下载程序,可是试了好几次都没有下载成功,仔细检查发现原来是9针串口线忘了接GND(地线)。顺便总结下STC单片机下载不成功的主要原因:
  1、最小系统出问题(晶振对不对、复位电路对不对、引脚连线对不对);
  2、电平匹配问题(一般是要加MAX232电平转换芯片的);
  3、串口线(串口线质量也是很重要的)连得对不对(至少连3根线TXD、RXD、GND),包括发送接收的方向对不对;
  4、下载操作步骤对不对(单片机下电--->点下载--->单片机上电)。

51单片机串口收发设计的思考

51单片机串口收发设计的思考
  排除了下载失败的故障后,就可以写代码下程序了。先写个串口调试功能的代码,使用串口接收中断方式,在主程序中将接受的字节回送到上位机中。
  串口收发设计(阻塞式设计)
  1/****************************************************2--Filename:rs232.c3--Abstract:串口收发设计(阻塞式设计)4--Author:hi2world5--Date:2012-10-26*****************************************************/7#include89//定义新类型10typedefunsignedcharuchar;1112//接收一个字节完成标志位13bitrx_flag=0;1415//全局变量,用于存放接收到的字节16ucharrx_byte;1718intmain()19{20/*设置波特率*/21SCON=0x50;//串口工作在方式1,允许串行接收;22PCON=0x00;//SMOD设置为023TMOD=0x20;//定时器1工作在方式2:8位自动重装载24TH1=0xfd;//设置波特率960025TL1=0xfd;26TR1=1;//启动定时器2728/*开中断*/29ES=1;//允许串行接收中断30EA=1;//开总中断3132while(1)33{34if(rx_flag)//接收完成标志为1时,开始发送数据到上位机35{36rx_flag=0;//清除接收完成标志位37SBUF=rx_byte;//发送38while(TI==0);//等待发送结束,可以加入超时等待处理39}4041TI=0;//软件清除发送中断标志位42}43return0;44}454647/*串口中断服务子程序*/48voidserial_intserve()interrupt4using149{50if(RI)//判断是接收中断标志51{52rx_flag=1;//设置接收1字节完成标志53rx_byte=SBUF;//取数据54RI=0;//手动清除接收中断标志55}56}
  对上述代码进行测试发现:
  1、上位机每隔0.5s发送1个字节,代码可以很好的工作,没有丢失数据;
  2、上位机发送987个字节大小的文件,上位机接收到单片机回送数据986个,丢失1个;
  3、上位机发送12307个字节大小的文件,上位机接收到单片机回送数据12286个,丢失21个;
  4、上位机发送61541个字节大小的文件,上位机接收到单片机回送数据61453个,丢失88个。
  一般情况,为了使串口收发更稳健,会使用缓冲区机制,也就是设计接收FIFO,将接收到数据先存放到FIFO中,这样可以防止在大数据收发过程中的覆盖问题。FIFO一般设计成环形的,有一个读指针和一个写指针,对FIFO操作时会先检查这两个指针来确定FIFO的状态。为了区分FIFO的满状态和空状态,往往会牺牲掉FIFO一个存储单元,使得形成这样的条件:
  1、写之前,检查发现如果wr_ptr 1 = rd_ptr,则表示FIFO已满(实际FIFO还有1个空位,但被我们牺牲掉了);
  2、读之前,检查发现如果rd_ptr = wr_ptr,则表示FIFO为空(这时FIFO是真心空的)。
  串口收发设计(非阻塞式设计)

相关阅读

230 VAC输入提供5000VDC输出的高压电源电路图

该高压电源可以从 230 Vac 线路电压产生 5000 伏直流电压。其主要目的是产生负离子。 警告! 这里给出的解释是针对已经有一定电子知识的人的,应该是相当明显的。但是,如果您有任何...
2023-08-25
230 VAC输入提供5000VDC输出的高压电源电路图

伺服电机的调试步骤

1、初始化参数 在接线之前,先初始化参数。 在控制卡上:选好控制方式;将PID参数清零;让控制卡上电时默认使能信号关闭;将此状态保存,确保控制卡再次上电时即为此状态。 在伺...
2023-03-21

配电房停送电操作顺序,电工一定要牢记!

配电房是一个电力设施的重要部分,负责接受高压电源,并将电力传输到各个区域和建筑物。在一些情况下,需要对配电房进行停送电的操作,以保障电力设施的安全和维护。下面是停送电的...
2024-08-26
配电房停送电操作顺序,电工一定要牢记!

干货!建筑电气工程量计算方法大全!

安装造价里,最难的莫过于建筑电气,为何?从电缆电线的区分到分别计算,从电气桥架到爬墙走线,从防雷接地到弱电智能化,每个环节都是比较复杂且难以弄懂的,今天,小编就带...
2023-06-11

对于配电网的合环换电技术,你了解吗?

我国城市10kV配电网普遍采用环网设计,开环运行的模式,当配电网检修时,可通过合环换电的方式实现不对用户停电的负荷转供。由于合环操作可能导致合环潮流或冲击电流过大,从而...
2023-07-05
对于配电网的合环换电技术,你了解吗?

热销商品

连发瓦斯枪通用瓦斯射钉钢钉枪瓦斯气体高强度瓦斯射钉枪165气罐

连发瓦斯枪是一款专为高强度瓦斯射钉设计的工具,其特点在于能够连续发射瓦斯气体,适用于多种需要快速穿透和固定材料的场景。这款瓦斯枪配备了165气罐,容量足够满足...
4.5

黄铜镀镍金属电缆防水接头EWM密封格兰头HSM电线固定填料函M20M16

黄铜镀镍金属电缆防水接头EWM密封格兰头(HSM型)是一款高性能电线固定与密封装置,适用于M16和M20螺纹规格。采用优质黄铜材质并表面镀镍处理,具备优异的防腐蚀性、机械...
1.14

消防配件二氧化碳灭火器2 3 5 7KG弯头喷管24Kg干冰CO2外喷头喷嘴

二氧化碳灭火器配件中的2357KG弯头喷管与24Kg干冰CO₂外喷头喷嘴,是专业消防设备的重要组成部分。该弯头喷管采用高强度耐腐蚀材料制造,连接灵活,适用于高压CO₂灭火...
4.5

雷士照明led筒灯孔灯客厅吊顶天花灯嵌入式过道筒灯射灯桶灯家用

雷士照明LED筒灯是一款专为现代家居设计的嵌入式照明产品,适用于客厅、吊顶、过道、卧室等空间。采用高品质LED光源,光线柔和均匀,显色指数高,有效还原真实色彩,营造舒...
5.78

雷士照明嵌入式防眩筒灯射灯窄边过道灯深杯客厅无主灯天花灯米雪

雷士照明嵌入式防眩筒灯射灯——“米雪”系列,专为现代无主灯设计打造。采用窄边深杯结构,有效控制杂散光,实现精准防眩,营造舒适柔和的光环境。适用于客厅、过道、天...
25.67

网站栏目