前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >51单片机学习 并行口实验、流水灯、双闪灯

51单片机学习 并行口实验、流水灯、双闪灯

作者头像
叶庭云
发布2021-12-01 15:22:10
1.2K0
发布2021-12-01 15:22:10
举报
文章被收录于专栏:Python进阶之路

文章目录

一、实验目的

掌握 51 汇编语言设计和调试方法 掌握 protues 软件平台及实验箱的操作步骤

二、实验内容及步骤

在单片机外部扩展 8KB RAM 芯片 6264,其地址范围为 0000H~1FFFH。将片内程序存储空间中从 500H 开始的存放的 15 个数据转存到外部 RAM 100H 开始的单元。请编写程序实现,并查看并给出相关地址空间的内容。

1、图 1-1 电路分析: (1) P0 口分时复用为数据线和地址线;74LS373 地址锁存器,其使能端 LE 由 ALE(地址 锁存控制信号)控制;74LS373 的 Q 端接外部 RAM6264 的地址端。当访问外部存储单元时,ALE 信号有效,将地址值锁存于 74LS373。 (2) 访问外部存储单元 MOVX 指令,是双机器周期指令。第 1 个机器周期将外部存储单元的地址从 P0 与 P2 口输出,并使 ALE 信号有效,将地址锁存;第 2 个机器周期,取消ALE 信号,使 P0 口专用于传送数据,同时发读/写信号。

2、编程提示: (1) 程序中定义的数据存放在内部程序存储空间 ROM 中。 ORG 500H TAB:DB 11h,22h,33h、、、、0AAH、0BBH、、、0FFh (2) 读取程序存储空间 ROM 指令: MOVC A,@A+DPTR (3) 读取外部存储空间 RAM 指令: MOVX A,@R0 ; P2 存放地址的高 8 位(要给 P2 赋值),R0 存放地址的低 8 位 MOVX A,@DPTR ; 16位地址存于 DPTR 中 读取内部存储空间 RAM 指令: MOV R1,60H MOV @R1,A

代码语言:javascript
复制
      ORG   0000H
      JMP   Start
      ORG   0100H
Start:	
      MOV DPTR,#TAB		;数据指针指向定义字节的首地址
      MOV P2,#01H		;P2.0为高电平
      MOV R0,#0			;R0中   传输数据个数
      
L0:
      MOV A,#0			;累加器A中给初值0
      MOVC A,@A+DPTR	;读取内部程序存储空间ROM 指令
      MOVX @R0,A		;累加器A中内容给外部RAM
      INC DPTR		;数据指针加1
      INC R0		;统计数据个数加1
      CJNE R0,#10H,L0		;不相等则转移   不等于16转到L0  继续将数据存到外部RAM
      
      ORG 500h		;内部ROM从500H开始的
      
TAB:  DB 11H,22H,33H,44H,55H,66H,77H,88H,99H,0AAH,0BBH,0CCH,0DDH,0EEH,0FFH	;定义字节

      END

仿真结果如下:

用 P1 口控制 LED 灯,按以下流水灯的形式显示: 1、LED 灯从左到右(或从右到左)单方向流水显示(只有一个灯亮),重复往返。

代码语言:javascript
复制
      ORG  0000H
      JMP  Start
      ORG  0100H
START:	
      MOV R0,#08H   ;设置循环8次
      MOV A,#0FEH   ;正向流水灯a=1111 1110
LOOP1:  
      MOV P1,A        ;点亮第一个灯p1=a=1111 1110(共阳极,低电平亮)
      LCALL DELAY     ;延时
      RL A            ;A中内容左环移一位 1111 1101
      DJNZ R0,LOOP1   ;减1不为0,则跳转循环
      LJMP START      ;依次点亮8只灯后 长跳转指令LJMP->到START  又开始循环点亮  
DELAY:		      ;延时子程序
      MOV R7,#0FFH
D1:   MOV R6,#0AEH
D2:   
      NOP
      NOP
      DJNZ R6,D2
      DJNZ R7,D1
      RET

      END

仿真效果如下:

2、LED 灯从左到右然后从右到左双方向流水显示(只有一个灯亮),重复往返。

代码语言:javascript
复制
	 ORG   0000H
	 JMP   Start
	 ORG   0100H
Start:	
	 MOV R0,#08H
	 MOV A,#0FEH   ;正向流水灯    
LOOP1:  
	 MOV P1,A      ;点亮P1口低电平的灯
	 LCALL DELAY   ;延时
	 RL A          ;A左环移1位
	 DJNZ R0,LOOP1
	 MOV R0,#08H
	 MOV A,#07FH   ;反向流水灯
LOOP2:  
	 MOV P1,A       ;点亮P1口低电平的灯
	 LCALL DELAY
	 RR A           ;A右环移1位
	 DJNZ R0,LOOP2
	 LJMP START    
	 
DELAY:	 MOV R7,#0FFH   ;延时子程序
D1:  	 MOV R6,#088H
D2:  	
        NOP
	    NOP
	    DJNZ R6,D2
	    DJNZ R7,D1
	    RET
        END

仿真效果如下:

实现双闪灯

代码语言:javascript
复制
      ORG 0000H
      LJMP MAIN
      ORG 0030H

MAIN:
      CLR P1.0
      LCALL DELAY
      SETB P1.0
      LCALL DELAY
      CLR P1.7
      LCALL DELAY
      SETB P1.7
      LCALL DELAY
      LJMP MAIN
DELAY:		      ;延时子程序
      MOV R7,#0FFH
D1:   MOV R6,#0A8H
D2:   
      NOP
      NOP
      DJNZ R6,D2
      DJNZ R7,D1
      RET
      END

仿真效果如下:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/01/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、实验目的
  • 二、实验内容及步骤
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档