1 将串行接口作为并行输入口使用
串行接口在方式0下,通过外接一个“并入串出”的8位移位寄存器(74LS165或CD4014),可以作为并行输入接口使用。例如,通过外接CD4014将8路开关状态从串行接口读入单片机的电路如图7-16所示。
CD4014是一个8位串入/并入串出移位寄存器,CP为同步移位脉冲输入端,P1~P8为并行输入端,Q8为串行输出端,P/¯S为控制端。若P/¯S=0,则CD4014为串行输入;若P/¯S=1,则CD4014为并行输入。开关KC用于提供控制信号,当KC闭合时,表示要求单片机读入开关量。只要在程序中对P1.1引脚进行查询,发现P1.1=0(即开关KC闭合),便通过P1.0使CD4014的P/¯S=1,然后再启动单片机串行接口方式0接收过程,即可将CD4014并行输入的开关状态通过串行接口输入到单片机中。
图7-16 单片机与CD4014连接电路
具体程序如下:
ORG 0500H
CLR ES;关串行接口中断,使用查询方式控制
START:JB P1.1,$;若KC未闭合,则等待
SETB P1.0;若KC未闭合,令CD4014并行输入开关量
NOP;适当延时
NOP
CLR P1.0;令CD4014停止并行输入,准备串行输出
MOV SCON,#10H;设置串行接口为方式0、RI=0、REN=1、启动接收
JNB RI,$;若未接收完,则等待
CLR RI;接收完,清RI
MOV A,SBUF;将开关量读入单片机的A中,进行开关量处理
SJMP START;准备下一次读入开关量
END
2 将串行接口作为并行输出口使用
串行接口在方式0下,通过外接一个“串入并出”的8位移位寄存器74LS164(或CD4094),可以作为并行输出口使用。将应用项目中单片机通过8155与LED数码管连接的接口电路改为使用串行接口与LED数码管连接,如图7-17所示。
在图7-17中,单片机串行接口工作于方式0,作为移位寄存器,RXD用于输出字形码(段码),TXD用于输出移位脉冲。
图7-17 串行接口与LED的连接电路
例7-3:单片机工作于方式0,利用外接了一个串入并出移位寄存器74LS164扩展并行输出口,将串行数据扩展成并行数据,并实现8个LED由上向下循环点亮,产生流水灯效果。电路如图7-18所示,74LS164寄存器芯片如图7-19所示。
图7-18 74LS164扩展并行输出口循环点亮LED
图7-19 74LS164寄存器芯片
解:(1)工作原理
1)清零端若为低电平,输出端都为0。
2)清零端若为高电平,且时钟端CP出现上升沿脉冲,则输出端Q锁存输入端D的电平。
3)串行数据输入端(A,B)可控制数据。当A、B任意一个为低电平,则禁止新数据的输入,在时钟端脉冲CP上升沿作用下Q0为低电平。当A、B有一个高电平,则另一个就允许输入数据,并在上升沿作用下确定串行数据输入口的状态。
4)前级Q端与后级D端相连——移位作用,最先接收到的数将进入最高位。
(2)程序分析
1)串行接口初始化:SCON=0。方式0(SM0/SM1=00);中断请求标志位清0(RI=0,TI=0);禁止接收数据(REN=0)。
2)串行数据输出时,一组数据发送完成,TI会被置1。可以采用中断法或查询方式进行判别,满足条件,发送下一组数据,否则循环等待直到TI置1。
3)方式0发送串行输出低位在先,高位在后。而74LS164是先串入的数进入最高位。若需要实现指定效果(仅D1点亮为例),则74LS164应输出11111110B,发送端数据应为LED=01111111B;欲使LED由上向下点亮,发送端数据应右移且最高位置1。
程序设计如下:(www.xing528.com)
ORG 0000H
AJMP START
ORG 0030H
START:MOV SP,#5FH
MOV SCON,#00H;设置串行接口工作方式0
MOV A,#0FEH;首次发送的字节数据
LOOP:MOV SBUF,A
JNB TI,$;为发送完数据原地等待
CLR TI;清除发送标志
LCALL DELAY
RL A;准备下一次发送的数据
AJMP LOOP;循环发送
DELAY:MOV R5,#8
D1:MOV R6,#250
D2:MOV R7,#250
D3:DJNZ R7,D3
DJNZ R6,D2
DJNZ R5,D1
RET
END
例7-4:利用串行接口外接两片8位并行输入串行输出的寄存器74LS165扩展两个8位并行输入口。要求从16位扩展口读入10组共20B数据,并将其转存到内部RAM的30H开始的单元。S/L=0,并行接收数据;S/L=1,允许串行移位。其电路如图7-20所示。
图7-20 外接两片8位并行输入串行输出的寄存器
解:程序段如下:
MOV R7,#10;设置读入数据组数
MOV R0,#30H;设置内部RAM数据区首地址
START:CLR P1.0;并行置入数据
SETB P1.0;允许串行移位
MOV R2,#02H;每组为2B
RXDATA:MOV SCON,#10H;串行接口工作在方式0,允许接收
WAIT:JNB RI,WAIT;未接收完一帧,则等待
CLR RI;RI标志清0,准备下次接收
MOV A,SBUF;读入数据
MOV @R0,A;送至片内RAM缓冲区
INC R0;指向下一个地址
DJNZ R2,RXDATA;未读完一组数据,则继续
DJNZ R7,START;10组数据未读完重新并行置数
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。