单片机开发之拓展并行I/O口

举报
timerring 发表于 2022/07/29 23:20:57 2022/07/29
1.6k+ 0 0
【摘要】 ​ 目录一、题目二、要求三、过程及结果记录1. 在Proteus环境下建立原理图,如图1所示,并保存为expandIO.DSN文件。2. 将实验代码写入文本文档,并保存为expandIO .asm文件。3. 输入源程序,将源程序加入系统中并编译源程序。4. 双击芯片,将编译得到的hex文件下载到芯片5. 执行仿真过程观察各个方向的交通信号灯指示,查看程序功能是否正确。四、思路6. 对于状态1...

 目录

一、题目

二、要求

三、过程及结果记录

1. 在Proteus环境下建立原理图,如图1所示,并保存为expandIO.DSN文件。

2. 将实验代码写入文本文档,并保存为expandIO .asm文件。

3. 输入源程序,将源程序加入系统中并编译源程序。

4. 双击芯片,将编译得到的hex文件下载到芯片

5. 执行仿真过程观察各个方向的交通信号灯指示,查看程序功能是否正确。

四、思路

6. 对于状态1:东西红灯,南北绿灯

7. 对于状态2:东西红灯,南北黄灯

8. 对于状态3:东西绿灯,南北红灯

9. 对于状态4:东西黄灯,南北红灯

五、源程序


一、题目

3.2 拓展并行I/O口实验

二、要求

1、画出实验的流程图

2、编写源程序并进行注释

3、记录实验过程

4、记录程序运行结果截图

三、过程及结果记录

按照思路搭建电路图1如下:

编辑

图1:实验电路图

实现功能:控制交通信号灯

仿真实现交通信号灯控制功能。

控制顺序为:

① 南北绿灯亮,同时东西红灯亮 10s;

② 南北黄灯亮,同时东西红灯亮 2s;

③ 南北红灯亮,同时东西绿灯亮 10s;

④ 东西黄灯亮,同时南北红灯亮 2s;

⑤ 重复①~④。

实验过程:

1. 在Proteus环境下建立原理图,如图1所示,并保存为expandIO.DSN文件。

2. 将实验代码写入文本文档,并保存为expandIO .asm文件。

3. 输入源程序,将源程序加入系统中并编译源程序。

4. 双击芯片,将编译得到的hex文件下载到芯片

5. 执行仿真过程观察各个方向的交通信号灯指示,查看程序功能是否正确。

实验的结果如下图2~5所示:

编辑

图2:南北绿灯亮,同时东西红灯亮10s

编辑

图3:南北黄灯亮,同时东西红灯亮2s

编辑

图4:南北红灯亮,同时东西绿灯亮 10s

编辑

图5:东西黄灯亮,同时南北红灯亮 2s

四、思路

实验流程图如下:

编辑

图6:实验流程

1. 进行初始化工作,包括设置堆栈指针SP,将两个373 的输出口所有位均设置为1,使所有发光二极管全部熄灭。

2. 定义两个锁存器的地址: U4的地址是0FE00H, U5的地址是0FD00H

3. 分析4 个状态下两个373 的输出数据值:假定“南北绿灯亮,同时东西红灯亮”为状态1,即:Stat1;“南北黄灯亮,同时东西红灯亮”为状态2,即:Stat2;“南北红灯亮,同时东西绿灯亮”为状态3,即:Stat3;“东西黄灯亮,同时南北红灯亮”为状态4,即:Stat4。可以分析其每个状态下的输出。

6. 对于状态1:东西红灯,南北绿灯

    ① 那么对于U4,只有两个红灯亮,红灯对应的地址置0即可。对应的控制信号是11110011即0F3H

② 对于U5,绿灯亮,只需要将对应的绿灯置0 即可,对于高四位不使用的端口,也一起置0.控制信号为00001100即0CH

编辑

图7:状态1下U4和U5的输出

7. 对于状态2:东西红灯,南北黄灯

    ① 对于U4:南北的黄灯、东西红灯对应的端口置0.所以控制信号为11000011即0C3H

② 对于U5:没有绿灯亮,有用位(低四位)置1,用不到的位还是置0.所以控制信号为00001111即0FH

编辑图8:状态2下U4和U5的输出

8. 对于状态3:东西绿灯,南北红灯

    ① 对于U4:将南北红灯对应的端口置0,其余位为0.所以控制信号为11111100即0FCH

② 对于U5: 将东西绿灯对应端口置0,其余位为1.注意未用到的位也置零。所以控制信号为00000011即03H

编辑图9:状态3下U4和U5的输出

9. 对于状态4:东西黄灯,南北红灯

    ① 对于U4:将东西黄灯、南北红灯对应的端口置0,其余位置1,。所以控制信号为00111100即3CH

    ② 对于U5:没有涉及到绿灯,所以将有用位置1即可。所以控制信号为00001111即0FH

编辑

编辑

图10:状态4下U4和U5的输出

五、源程序

ORG 0000H     ; 在内存的0地址处就强制转到主程序上去,绕过中断程序
AJMP MAIN     ; 无条件的转移到主程序
ORG 0030H    
MAIN:				;定义主程序
  MOV SP,#60H			;设置栈指针
  CLR P3.6				; 使用CLR位操作指令将P3.6口清零
  MOV P0,#0FFH			;设置P0口,使两个输出口均位高电平,此时所有的LED灯灭
STATUS1:				; 状态1 
  MOV DPTR,#0FE00H	    ;数据指针指向U4
  MOV A,#0F3H		    ;使U4输出0F3H
  MOVX @DPTR,A     ;A寄存器访问内存,让东西红灯亮
  MOV DPTR,#0FD00H	    ;数据指针指向U5
  MOV A,#0CH			;使U5输出0CH
  MOVX @DPTR,A   ;A寄存器访问内存,让南北绿灯亮
  ACALL DELAY10	 ; 调用延时10S子程序
STATUS2:			; 状态2 
  MOV DPTR,#0FE00H		;数据指针指向U4
  MOV A,#0C3H		   ;使U4输出03CH
  MOVX @DPTR,A    ; 使用A寄存器访问内存,使东西红灯,南北黄灯
  MOV DPTR,#0FD00H		;数据指针指向U5
  MOV A,#0FH			; 使U5输出0FH
  MOVX @DPTR,A    ;1,使绿灯全灭
  ACALL DELAY2			; 调用延时2S子程序
STATUS3:			;  状态3
  MOV DPTR,#0FE00H	    ;数据指针指向U4
  MOV A,#0FCH		; U4输出0FCH
  MOVX @DPTR,A    ;A寄存器间接访问内存,使南北红灯亮
  MOV DPTR,#0FD00H	    ;数据指针指向U5
  MOV A,#03H	  ; U5输出0FD00H
  MOVX @DPTR,A     ;东西绿灯亮
  ACALL DELAY10		; 调用延时10S子程序
STATUS4:			; 状态4
  MOV DPTR,#0FE00H	   ;DPTR指向U4
  MOV A,#3CH	   ; U4输出3CH
  MOVX @DPTR,A  ; 寄存器A访问内存,南北红灯,东西黄灯
  MOV DPTR,#0FD00H	从   ;使FPTR指向U5
  MOV A,#0FH		;  使U5输出0FH
  MOVX @DPTR,A    ;1,使绿灯全灭
  ACALL DELAY2		; 调用延时2S子程序
ACALL DELAY1	   ; 调用延时1S子程序
AJMP STATUS1	  ; 跳转到状态1,形成循环

DELAY1:				  ;定义延时1S子程序
MOV R7,#10     ;定义最外层循环,循环10DL2:MOV R6,#200    ; 定义中间层循环200DL1:MOV R5,#250    ; 定义内层循环250DJNZ R5,$      ;等待,且该指令占两个时钟周期
	DJNZ R6,DL1    ;占两个时钟周期
	DJNZ R7,DL2    ;计算总延时为((1μs*2*250+2+1*200+1+2*10+1=1s
RET     ; 子程序返回
DELAY2:					;定义延时2S子程序
MOV R7,#20           
DL4:MOV R6,#200
DL3:MOV R5,#250
    DJNZ R5,$
	DJNZ R6,DL3
	DJNZ R7,DL4
RET       ; 子程序返回

DELAY10:				;延时10S子程序
MOV R7,#100         ; 延时10S比延时1S的程序最外层循环多10DL6:MOV R6,#200    
DL5:MOV R5,#250
    DJNZ R5,$
	DJNZ R6,DL5
	DJNZ R7,DL6
RET           ; 子程序返回
END						;程序结束

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。