基本的 51 单片机有四个并行口,其中还包含了一个串行口。
当接口不够用的时候,大家就会想到,使用什么外接芯片来扩充。
但是,各种教材、参考书、网络文章,介绍扩充并行口的花样不少,扩充串行口的方法,几乎无人问津。
偶尔见到一个,也是使用 8250、8251 等“巨型”芯片来扩充的
使用这些芯片,就要占用单片机很多的更为紧缺的并行口,基本上就是得不偿失。更别说还要设置复杂的控制字了。
使用简单的三态门,即可为单片机扩充串行口,仅仅占用单片机的一、二个引脚作为控制引线而已。
实际上是很简单的,就像使用 74ls373、74ls244 扩充并行口一样,为串行口,配上合适三态门就行了。
选用 74ls125(低电平开门)、74ls126(高电平开门) 都行。
使用其它的具有三态输出的芯片也可以,如:74ls244、74ls373 等等。
只是这些芯片的控制线,是成组的控制,不是单独的一个门、一个门的进行控制,就有些不够方便。
下面就是设计的扩充两个串口通道的电路图:
为了控制简单,以及介绍全面一些,在图中使用了两种三态门。用同一种,也是可以的。
两组三态门,均以 p3.4 作为控制信号。
当 p3.4 输出高电平时,74ls126 开门,通道1导通,单片机即可对 74ls164 进行串行输出,驱动数码管;
当 p3.4 输出低电平时,74ls125 开门,通道2导通,单片机即可与其它串口设备进行全双工的通信。
如果需要,还可以在 125 的右边再接上 ttl-rs232 电平转换芯片(或 rs485 总线芯片),进行远距离通信。
图中是接上了一个 proteus 软件的虚拟终端,用来代表另一个串口通信设备。
做而论道用汇编语言写了一小段程序,可以控制这个串口扩展电路进行工作。
;=================================================
org 0000h
sjmp start
org 0023h
ajmp s_int
start:
mov tmod, #20h
mov th1, #0fdh ;设置波特率9600@11.0592mhz
mov tl1, #0fdh
setb tr1
mov ie, #90h ;开串口中断
clr p3.4 ;选通74ls125(通道2)
mov scon, #50h ;串口方式1, 可接收
sjmp $
;-----------------------------------
s_int: ;串口中断程序
jnb ri, s_end
clr ri
mov a, sbuf ;取出收到的数据
;---------------------
setb p3.4 ;选通74ls126(通道1)
mov scon, #0 ;串口通信方式0
mov b, #16
div ab
xch a, b
add a, #(tab - $ - 3)
movc a, @a + pc ;取七段码
mov sbuf, a ;串口输出
jnb ti, $ ;等待发送完毕
clr ti
mov a, b
add a, #(tab - $ - 3)
movc a, @a + pc
mov sbuf, a
jnb ti, $
clr ti
;---------------------
clr p3.4 ;选通74ls125(通道2)
mov scon, #50h ;串口方式1, 可接收
mov sbuf, #'o'
jnb ti, $
clr ti
mov sbuf, #'k'
jnb ti, $
clr ti
mov sbuf, #13 ;
jnb ti, $
clr ti
mov sbuf, #10 ;
jnb ti, $
clr ti
;---------------------
s_end:
reti
tab: ;共阳段码表
db 0c0h, 0f9h, 0a4h, 0b0h, 099h, 092h, 082h, 0f8h;0~7
db 080h, 090h, 088h, 083h, 0c6h, 0a1h, 086h, 08eh;8~f
end
;=================================================
程序执行后,屏幕截图如下:
在程序控制下,51 单片机随时监听通道2,一旦虚拟终端发来了一个字节的串行数据,单片机都要向虚拟终端回送 'ok'。
这时,就是单片机和上位机之间的双工串行通信。
然后,单片机转向串口通道1,以方式0 输出两组七段码,令外接的 74ls164 显示刚刚收到的数据的高、低四位。
这时,就是简单的 spi 通信方式。
在图中可以看到,数码管显示的是 41,这是在虚拟终端窗口中键入'a'时的现象,41 即字符 a 的 ascii 码。
虚拟终端,它并不显示键入的内容,它仅仅显示单片机发出的信息,在图中可以看到显示出来的 ok、回车、换行
74ls125 和 74ls126 都是 14 引脚的集成芯片,和 8250、16550a 等 40 引脚的专用串口芯片相比,要小巧的多。
每片(125 或 126)都含有四个独立工作的三态门。实际上,使用一片 125 或 126,也就可以实现上述的两个通道串口通信了。
注意:如果使用了一片芯片,那么通道控制的电平信号是相同的,这就需要使用单片机的两个引脚来分别控制两个通道。
多用几片三态门,为单片机多扩充几个串行口,也是可行的。
做而论道设计的这种串口扩充方案,硬件电路和软件,都已经在实际电路中做过实验,可以正常通信。
高铁中的CAN总线网络转换-CPCI接口CAN卡
神经科学的深度学习框架
自动驾驶中间件之OME/IP通信机制介绍
西昌森林火灾致两座110千伏变电站失压以及三条110千伏线路故障跳闸
基于Linux操作系统实现40MHz数字存储示波器的设计
51单片机扩充串行口的方法
区块链用于忠诚计划是向消费者引入代币化的最佳方式
放大器自激了怎么办?
国际运营商为何选择TD-LTE
5G手机国内出货量增12.9%,占手机市场82.5%份额
无线传感器网络无处不在 浅谈环保监测中的无线传感器网络技术
英特尔芯片一个远程劫持漏洞,你怎么看?
怎么看待汽车电子车载48V技术方案
消防应急照明强启接线
黄章透露魅族16X将于下个月发布,简直猝不及防
苹果新iPhone或将采用下一代版本的FaceID 速度将更快更可靠
将html文件转换成pdf示例
盘点手机处理器都有哪些
线绕型铑铁温度传感器的主要技术参数
NVIDIA Jetson Orin Nano 助力森云智能打造事件相机开发套件