使用单片机实现串口通信的资料详细说明

串口通讯对单片机而言意义重大,不但可以实现将单片机的数据传输到电脑端,而且也能实现电脑对单片机的控制,比如你可以把写入单片机的数据码显示在电脑上,如可以使用一个按键,当按下它时使某一个字母如:aa,通过单片机的串口将它发送到电脑上显示,起到仿真器的某些功效,站长在开发数据采集设备时就是通过串口来检查数据正确与否的。
mcs-51内部含有一个可编程全双工串行通信接口,具有uart的全部功能。该接口电路不仅能同时进行数据的发送和接收,也可作为一个同步移位寄存器使用。
在进行异步通信时,数据的发送和接收分别在各自的时钟(tclk和rclk)控制下进行的,但都必须与字符位数的波特率保持一致。mcs-51串行口的发送和接收时钟可由两种方式产生,一种是由主机频率fosc经分频后产生,另一种方式是由内部定时器t1或t2的溢出率经16分频后提供。
51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如电脑的串口是rs232电平的,而单片机的串口是ttl电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片max232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。我们采用了三线制连接串口,也就是说和电脑的9针串口只连接其中的3根线:第5脚的gnd、第2脚的rxd、第3脚的txd。这是最简单的连接方法,但是对我们来说已经足够使用了,电路如下图所示,max232的第10脚和单片机的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接。本网站的提供的实验板上已经装配好了全部硬件。
串口通讯的硬件电路如上图所示
为了能够在电脑端看到单片机发出的数据,我们必须借助一个windows软件进行观察单片机串口通信,这里我们利用一个免费的电脑串口调试软件。
点击这里可以下载并运行这个串口调试软件这是一个绿色的软件,无需安装,可以直接在当前位置运行这个软件。软件界面如上图,我们先要设置一下串口通讯的参数,将波特率调整为4800,勾选十六进制显示。串口选择为com1,当然将网站提供的51单片机实验板的串口也要和电脑的com1连接,将烧写有以下程序的单片机插入单片机实验板的万能插座中,并接通51单片机实验板的电源,这时只要按下k1一次,在串口调试助手软件的接收区界面中就会增加一个“af”字符,表示单片机向电脑发送“af”字符成功。串口实验的源程序如下所示:
;这是一个at89c51单片机实验开发板向pc机的串口单向发送数据af的演示程序
;采用max232专用芯片作rs232/ttl电平转换。
;通讯波特率为4800kbps,只要按下一次k1(就是p3.6引脚变成低电平)
;就发送一个16进制的af字符
org 0000h
mov scon,#50h;设置成串口1方式
mov tmod,#20h;波特率发生器t1工作在模式2上
mov pcon,#80h;波特率翻倍为2400x2=4800bps
mov th1,#0f3h;预置初值(按照波特率2400bps预置初值)
mov tl1,#0f3h;预置初值(按照波特率2400bps预置初值)
setb tr1;启动定时器t1
;以上完成通讯初始化设置
writ:jb p3.6,$;判断k1是否按下,如果没有按下就等待
acall delay10;延时10毫秒消触点抖动
jb p3.6,writ;去除干扰信号
jnb p3.6,$;等待按键松开
mov a,#0afh;将16进制的字符af发送到串口去
mov sbuf,a;将af通过串口发送出去
ajmp writ
;10毫秒延时子程序
delay10:mov r4,#20
d2:mov r5,#248
djnz r5,$
djnz r4,d2
ret
end
===============单片机串口通信=========================
一、发送和接收的过程如下:
串行口的发送过程由指令mov sbuf,a启动,即cpu由一条写发送缓冲器的指令把数据(字符)写入串行口的发送缓冲器sbuf(发)中,再由硬件电路自动在字符的始、末加上起始位(低电平)、停止位(高电平)及其它控制位(如奇偶位等),然后在移位脉冲shift的控制下,低位在前,高位在后,从txd端(方式0除外)一位位地向外发送。
串行口的接收与否受制于允许接收位ren的状态,当ren被软件置“1”后,允许接收器接收。接收端rxd一位位地接收数据,直到收到一个完整的字符数据后,控制电路进行最后一次移位,自动去掉启始位,使接收中断标志ri置“1”,并向cpu申请中断。cpu响应中断,用一条指令(mov a,sbuf)把接收缓冲器sbuf(收)的内容读入累加器。
ti和ri是由硬件置位的,但需要用软件复位。
二、相关的寄存器
1、sbuf是两个在物理上独立的接收、发送缓冲器,可同时发送、接收数据。两个缓冲器只用一个字节地址99h,可通过指令对sbuf的读写来区别是对接收缓冲器的操作还是对发送缓冲器的操作。串行口对外有两条独立的收发信号线rxd(p3.0)、txd(p3.1),因此可以同时发送、接收数据,实现全双工。
2、scon寄存器用来控制串行口的工作方式和状态,可按位寻址,其字节地址为98h。
3、pcon中的smod用来控制波特率加倍。
4、tmod设置定时器1的工作方式,用来产生波特率
5、如果用到中断,则还需要用到中断相关的寄存器ie,ip等
三、四种工作方式:
方式0:
同步移位寄存器方式,其波特率是固定为振荡频率fosc的1/12。在这种工作方式下,发送和接收串行数据都通过rxd(p3.0)进行,从txd(p3.1)输出移位脉冲,控制外部的移位寄存器移位。1帧信息为8位,没有起始位,停止位。
方式1:
8位uart,1帧信息为10位,其中一位起始位“0”、八位数据位(先低位后高位)和一个停止位“1”,波特率可变,根据定时器1的溢出率计算。
方式2:
9位uart,1帧信息为11位,其中一位起始位“0”、八位数据位(先低位后高位),一位控制位(第九位)和一个停止位“1”。波特率为振荡频率的1/64或1/32
方式3:
9位uart,帧信息为11位,其中一位起始位“0”、八位数据位(先低位后高位),一位控制位(第九位)和一个停止位“1”。波特率可变,根据定时器1的溢出率计算。
附加的第9位数据为scon中的tb8的值,它由软件置位或清零,可作为多机通信中地址/数据信息的标志位,也可作为数据的奇偶校验位。
四、连接
由于串口用的是ttl电平,和rs232电平不同,因此,单片机和pc通信时需要进行电平转换,常用的ic是max232,连接图如图所示,其中max232供电脚为+5v,中间连接的电解电容取50v 1uf。
max232内部框图
单片机和pc通信连接图
即所谓的三线连接法。
===================================================
用vc来做个上位机软件,用单片机来做下位机显示,数据从pc机发送过来,经过单片机处理显示。
首先你想把它学好,就一定要下苦功夫,因为这个不是一下子就能学好的,要经过不断的实践努力。
学习也有一段时间了,用的书是(《visual c /turbo c串口通信编程实践》 龚建伟)但是发现自己可能毅力不够,经常被一些困难所吓倒。碰到问题时不能够想方设法去解决。可能是可以学习例子太少了,网上的资源也不是很多。。。。。。
发现假如用mscomm控件来编的话,就是那个变量variant,这个不好弄懂。学vc首先要有一定的c语言基础,和c 基础,可能是c 还没学完,基础不扎实,导致继续下去有点困难。
先实现一个简单的功能吧,用vc做个界面,当按下相应的键时,发送相应的数据到单片机中,然后将数据送到p0口来显示。
呵呵,一定要把那个变量给弄懂了,这样一切都好办了
在后面的学习中,我将把学习的心得写出来,与大家交流交流
有在学vc的朋友可以和我交流交流 ,大家一起进步

车载地面站星地激光高速图像传输试验成功,全国首次
NeurIPS 2023 | 大模型时代自监督预训练的隐性长尾偏见
你愿意把你的钱交给人工智能来管理吗
如何测量电源的纹波 纹波测量点和示波器要求
机器人智能管家上线,为客户提供智能化的服务
使用单片机实现串口通信的资料详细说明
工业机器人产量年内增长13.9%
DS33Z11—以太网LAN到非成帧T1/E1 WAN桥
三星电子今年有望首次向其半导体业务投资超过300亿美元
上海浦东智能照明联合会第二届第三次会员代表大会顺利召开
魅族18系列5G双旗舰发布会举办 Flyme 9系统正式发布
GE加快军事和工业系统软件认证 空客部署 Beluga A300-600 ST 机队
iPhone12百亿补贴来了,现在还值得入手吗?
国产屏幕的一大步,京东方成为苹果第2大供应商?
华为Watch GT2上线门禁卡功能 未来在健康研究方面或许还有升级
底特律在自动驾驶方面的布局情况分析
LF Energy推出数字变电站自动化系统,加速推进全球实现碳中和目标
Loop Interchange如何帮助编译器生成更高效的可执行代码
2020:新时代元年,有哪些技术值得期待?
激光打标机:快速、精确、耐用的标记解决方案