码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 山东大学单片机原理与应用实验 3.2 拓展并行I/O口实验


    目录

    一、实验题目

    二、实验要求

    三、实验过程及结果记录

    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的输出

    五、实验源程序

    1. ORG 0000H ; 在内存的0地址处就强制转到主程序上去,绕过中断程序
    2. AJMP MAIN ; 无条件的转移到主程序
    3. ORG 0030H
    4. MAIN: ;定义主程序
    5. MOV SP,#60H ;设置栈指针
    6. CLR P3.6 ; 使用CLR位操作指令将P3.6口清零
    7. MOV P0,#0FFH ;设置P0口,使两个输出口均位高电平,此时所有的LED灯灭
    8. STATUS1: ; 状态1
    9. MOV DPTR,#0FE00H ;数据指针指向U4
    10. MOV A,#0F3H ;使U4输出0F3H
    11. MOVX @DPTR,A ; 让A寄存器访问内存,让东西红灯亮
    12. MOV DPTR,#0FD00H ;数据指针指向U5
    13. MOV A,#0CH ;使U5输出0CH
    14. MOVX @DPTR,A ; 让A寄存器访问内存,让南北绿灯亮
    15. ACALL DELAY10 ; 调用延时10S子程序
    16. STATUS2: ; 状态2
    17. MOV DPTR,#0FE00H ;数据指针指向U4
    18. MOV A,#0C3H ;使U4输出03CH
    19. MOVX @DPTR,A ; 使用A寄存器访问内存,使东西红灯,南北黄灯
    20. MOV DPTR,#0FD00H ;数据指针指向U5
    21. MOV A,#0FH ; 使U5输出0FH
    22. MOVX @DPTR,A ;置1,使绿灯全灭
    23. ACALL DELAY2 ; 调用延时2S子程序
    24. STATUS3: ; 状态3
    25. MOV DPTR,#0FE00H ;数据指针指向U4
    26. MOV A,#0FCH ; U4输出0FCH
    27. MOVX @DPTR,A ; 借A寄存器间接访问内存,使南北红灯亮
    28. MOV DPTR,#0FD00H ;数据指针指向U5
    29. MOV A,#03H ; U5输出0FD00H
    30. MOVX @DPTR,A ;东西绿灯亮
    31. ACALL DELAY10 ; 调用延时10S子程序
    32. STATUS4: ; 状态4
    33. MOV DPTR,#0FE00H ;DPTR指向U4
    34. MOV A,#3CH ; U4输出3CH
    35. MOVX @DPTR,A ; 寄存器A访问内存,南北红灯,东西黄灯
    36. MOV DPTR,#0FD00H 从 ;使FPTR指向U5
    37. MOV A,#0FH ; 使U5输出0FH
    38. MOVX @DPTR,A ;置1,使绿灯全灭
    39. ACALL DELAY2 ; 调用延时2S子程序
    40. ACALL DELAY1 ; 调用延时1S子程序
    41. AJMP STATUS1 ; 跳转到状态1,形成循环
    42. DELAY1: ;定义延时1S子程序
    43. MOV R7,#10 ;定义最外层循环,循环10次
    44. DL2:MOV R6,#200 ; 定义中间层循环200次
    45. DL1:MOV R5,#250 ; 定义内层循环250次
    46. DJNZ R5,$ ;等待,且该指令占两个时钟周期
    47. DJNZ R6,DL1 ;占两个时钟周期
    48. DJNZ R7,DL2 ;计算总延时为((1μs*2*250+2+1)*200+1+2)*10+1=1s
    49. RET ; 子程序返回
    50. DELAY2: ;定义延时2S子程序
    51. MOV R7,#20
    52. DL4:MOV R6,#200
    53. DL3:MOV R5,#250
    54. DJNZ R5,$
    55. DJNZ R6,DL3
    56. DJNZ R7,DL4
    57. RET ; 子程序返回
    58. DELAY10: ;延时10S子程序
    59. MOV R7,#100 ; 延时10S比延时1S的程序最外层循环多10倍
    60. DL6:MOV R6,#200
    61. DL5:MOV R5,#250
    62. DJNZ R5,$
    63. DJNZ R6,DL5
    64. DJNZ R7,DL6
    65. RET ; 子程序返回
    66. END ;程序结束

    初学单片机,可能存在错误之处,还请各位不吝赐教。

    受于文本原因,本文相关实验工程无法展示出来,现已将资源上传,可自行下载。

    山东大学单片机原理与应用实验工程文件3.2拓展并行I/O口实验-单片机文档类资源-CSDN下载山东大学单片机原理与应用实验工程文件3.2拓展并行I/O口实验详解博客地址:https://b更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/m0_52316372/85915965

  • 相关阅读:
    肖sir__面试接口测试
    GDB使用详解
    Typescript的基本使用
    Vue.js核心技术解析与uni-app跨平台实战开发学习笔记 第1章 Vue.js基础入门 1.8 v-for指令
    【Qt开发流程之】布局管理
    【RHCE】作业:firewall-cmd操作&ansible自动化运维入门
    Vue3+ElementPlus el-date-picker时间选择器,设置最多选择60天区间内,必须选择大于今天
    Oracle Primavera Unifier进度管理器(Schedule Manager)
    必备的API接口大全,让你的开发更高效
    一篇概全,接口测试知识盲扫,真正的接口测试是如何做的...
  • 原文地址:https://blog.csdn.net/m0_52316372/article/details/125630180
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号