串行口方式0扩展8位并行输入口
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【技能训练5-2】串行口方式0扩展8位并行输入口
目的:串行口方式0
内容:利用串行口工作方式0扩展8位并行输入口,指拨开关状态经并转串芯片74LS165输入到单片机,再将其状态由P0口输出到发光二极管显示,如图5-7所示。
模仿型项目,参考文件:51-165.DSN。
图5-7串行口扩展8位输入口
汇编语言参考源程序:
;165.ASM;串行口方式0,扩展165输入一个字节
PL BIT P2.7
ORG 0000H
LJMP START
ORG 0100H
START: MOV SCON,#10H ;方式0,允许串行口接收数据
START1: CLR PL ;PL=0,165读入并行数据
SETB PL ;PL=1,可以移位输出
WAIT: JNB RI,WAIT
CLR RI ;清除接收中断标志
MOV A,SBUF ;读取数据
MOV P1,A ;接收到的数据送P1口显示
ACALL DELAY
SJMP START1
DELAY: MOV R4,#00FH
AA1: MOV R5,#0FFH
AA: DJNZ R5,AA
DJNZ R4,AA1
RET
END
C语言程序:
/*利用串行口工作方式0扩展出8位并行输入口,指拨开关状态经并转串芯片74LS165输入到单片机,其状态并由P0口输出到发光二极管显示。查询*/
//===================声明区=================================
#include
#include
unsigned char i=0;
sbit PL=P1^0;
//===================主程序==================================
main() // 主程序开始
{
while(1)
{
PL=0;
_nop_();
_nop_();
_nop_();
PL=1;
SCON=0x10; // 串行口方式0,允许串行口接收数据
while(!RI);
P0=SBUF;
RI=0;
_nop_();
_nop_();
}
} // 主程序结束
思考:如何用串行口扩展16位的输入口?
操作步骤:
1、利用proteus软件绘制原理图(如图5-7所示)
2、添加驱动程序,编译通过。
3、执行仿真,点击指拨开关,改变输入内容,观察P0口输出情况。
4、注意:74165的移位是从D0->D1->......->D7,就是高位在前,51单片机是低位在前
5、填写项目实施记录单。