串行口方式0扩展8位并行输入口

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 //定义8051寄存器头文件

#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、填写项目实施记录单。

相关文档
最新文档