《课程设计(论文)-利用8255A芯片实现流水灯闪烁设计.doc》由会员分享,可在线阅读,更多相关《课程设计(论文)-利用8255A芯片实现流水灯闪烁设计.doc(23页珍藏版)》请在三一文库上搜索。
1、利用8255A芯片实现流水灯闪烁设计目录摘要2第1章 利用8255A芯片实现流水灯闪烁设计的概述2第2章 三种方案的论述与最终方案的确定22.1 第一种方案的论述22.2 第二种方案的论述52.3 第三种方案(最终方案)的论证10第3章 测试结果及体会心得13第4章 致谢14第5章 参考文献14附录1 方案一 Proteus仿真电路效果图15附录2 方案一 源程序代码16附录3 方案二 Proteus仿真电路效果图18附录4 方案二 源程序代码19附录5 方案三(最终方案) Proteus仿真电路效果图20附录6 方案三(最终方案) 源程序代码21摘要:8255A是一种通用的可编程并行I/O接
2、口芯片(Programmable Peripherial Interface),它是为Inter系列微处理器设计的配套电路,也可用于其它微处理器系统中。通过对它进行编程,芯片可工作于不同的工作方式。此次课程设计的目的就是利用端口和8255协同工作来实现LED显示功能,对8255A芯片进行编程使流水灯左移或右移,通过延时程序使流水灯进行顺序点亮。通过这次课程设计掌握8255A的功能特点、工作原理以及显示器接口的基本原理与方法技术。关键词:8086芯片 AT89C51单片机 8255A芯片 LED流水灯第1章 利用8255A芯片实现流水灯闪烁设计的概述流水灯在日常的生活中有着广泛的应用,例如,许多
3、楼面上的彩灯广告就是应用了流水灯设计。此次的课程设计的题目是利用了端口和8255A协同工作来实现LED显示功能,编写程序,使用8255的A口和B口均为输出,接8个或16个发光二极管,实现流水灯的显示效果。在实验中8255A的A和B两个端口不能同时赋值,从而我们可以用通用寄存器BX对所需要赋值的数据进行存储,因为BX可以分从高8位寄存器BH和低8位寄存器BL两部分进行独立的操作,我们用寄存器BH对A口进行赋值,用寄存器BL对B口进行赋值,通过延时一段时间再对BH和BL进行移位和输出,实现了流水灯的效果。第2章 三种方案的论述与最终方案的确定2.1 第一种方案的论述第一种方案,我们使用了8086C
4、PU芯片与8255A芯片一起实现了流水灯闪烁的设计,同时还使用了地址锁存器74LS373芯片。74ls373是常用的地址锁存器芯片,它是一个是带三态缓冲输出的8D触发器,在单片机系统中为了扩展外部存储器,通常需要一块74ls373芯片。在方案一中,当8086CPU的引脚ALE(地址锁存允许信号,输出,高电平有效,用作地址锁存器74LS373的锁存控制信号)处于下降沿时将8086CPU输出的地址信息进行锁存,以定义8255A的工作方式。下面先对74LS373芯片进行简介:1.地址锁存器74LS373的内部电路与工作原理引脚功能图注:管脚引出端功能符号:D0D7 数据输入端 OE 三态允许控制端(
5、低电平有效)Q0Q7 输出端 LE 锁存允许端74373 三态缓冲输出的8D锁存器(3S,锁存允许输入有回环特性),其输出端 Q0Q7 可直接与总线相连,74LS373的LE端直接与8086CPU的ALE信号连接。1脚是三态允许控制端(OE),是低电平有效。当1脚是高电平时,不管输入3(D0)、4(D1)、7(D2)、8(D3)、13(D4)、14(D5)、17(D6)、18(D7)如何,也不管11脚(LE 锁存允许端)如何,输出2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)全部呈现高阻状态(或者叫浮空状态)。当1脚是低电平时,只要11脚
6、(LE 锁存允许端)上出现一个下降沿,输出2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)立即呈现输入脚3(D0)、4(D1)、7(D2)、8(D3)、13(D4)、14(D5)、17(D6)、18(D7)的状态。 11脚是锁存允许端(LE),当LE由高变低时,输出端8 位信息被锁存,直到LE 端再次有效。 当三态允许控制端OE为低电平时,三态门导通,允许Q0Q7输出,OE为高电平时,输出悬空。当74LS373用作地址锁存器时,应使OE为低电平,此时锁存使能端C为高电平时,输出Q0Q7 状态与输入端D1D7状态相同;当LE发生负的跳变时,输
7、入端D0D7 数据锁入Q0Q7。2.方案一的工作流程简述电路图硬件连接:硬件连线图注:8086CPU芯片与74LS373芯片在方案一中视为PC总线接口模块 8255A的引脚WR(写选通信号)、RD(读选通信号)分别连到PC总线接口模块的WR端口、RD端口。 8255A的数据端(AD0AD7)、地址线(A0A1)分别连到PC总线接口模块的数据线(D0D7)、地址线(A1A2)。 8255模块选通线CS连到PC总线接口模块的IOY1(CS 片选信号,低电平有效,由地址总线经I/O端口译码电路产生)。 8255的PA0PA7连到发光二极管的L1L8;8255的PB0PB7连到发光二极管的L9L16。
8、程序流程简述:8255A的片选信号CS与地相连,处于低电平有效状态,8086CPU与8255A之间始终保持通信,8086CPU对8255A进行读/写等操作。当8086CPU的地址锁存信号ALE处于高电平有效时,在T1状态,8086CPU通过地址/数据总线上传送地址信息,在ALE的下降沿将地址信息锁存到地址锁存器74LS373中,定义了8255A的工作方式,使其A口和B口为输出口,定义了8255A各端口地址。8086CPU先后写A、B口的起始数据,并调用延时子程序点亮A口灯、B口灯。然后分别调用左移、右移指令将A口起始数据左移再写入A口、B口起始数据右移再写入B口,点亮下一站盏灯,以此循环实现流
9、水灯效果。程序框图结论:第一种方案虽然实现了流水灯闪烁效果,但由于8086CPU芯片所需的程序无法通过KC51实现编程,不能达到本次课程设计的培训目的,即对单片机的程序编程进行训练掌握,要求较高,方案实现的难度较大,所以我们没有把方案一作为最终方案。2.2 第二种方案的论述第二种方案,我们使用了AT89C51单片机实现了流水灯闪烁设计。AT89C51单片机是美国ATMEL公司生产的低电压、高性能CMOS 8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.255.50V的电压工作范围和024MH
10、z工作频率,使用AT89C51单片机时无须外扩存储器。因此,方案二中设计的流水灯实际上是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。下面先对AT89C51单片机进行简介:1. AT89C51单片机的简介AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含4K bytes的可反复擦写的只读程序存储器(PEROM)和128 bytes的随机存取存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS51指令系统,片内置通用8位中央处理器(CPU)和Flash存储单元,功能
11、强大AT89C51单片机可以提供许多高性价比的应用场合,可灵活应用于各种控制领域。AT89C51管脚分布注:管脚引出端功能符号:VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1
12、口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信
13、号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口。P3口同时为闪烁编程和编程校验接收一些控制信号。P3口管脚备选功能: P3.0 RXD(串行输入口) P3.1 TXD(串行输出口)P3.2 / INT0(外部中断0) P3.3 / INT1(外部中断1)P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入)P3.6 / WR(外部数据存储器写选通) P3.7
14、/ RD(外部数据存储器读选通)RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位
15、无效。PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次PSEN有效。但在访问外部数据存储器时,这两次有效的PSEN信号将不出现。EA / VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000HFFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。AT89C51提供标准功能有:4K字节Falsh闪存存储器,128字节内部R
16、AM,32个I/O口线,两个16位定时、计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0HZ的静态逻辑操作,并支持两种软件可选的节电模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其他所有部件工作直到下一个硬件复位。2.方案二的工作流程简述单片机的应用系统由硬件和软件组成,当我们完成了上述硬件原理图搭建之后,我们还不能看到流水灯循环点亮的现象,我们还需要告诉单片机怎么来进行工作,即编写程序控制单片机管脚电平的高低变化,来实现发光二极管的一亮一灭。软
17、件编程是单片机应用系统中的一个重要的组成部分,也是我们这次课程设计学习的重点和难点。从电路原理图中可以看出,如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1P1.7口的其他7个LED的点亮和熄灭的方法同LED1。因此,要实现流水灯功能,我们只要将发光二极管LED1LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。在此我们还应注意一点,由于人眼的视觉暂留效应以及单片机执行每条指令的时间很短,我们在控制二极管亮灭的时候应该延时一段时间,否则我们就看不到“流
18、水”效果了。在电路原理图中,我们还应注意的便是和AT89C51单片机接在一起的晶振电路,在电路图中为AT89C51单片机提供了频率参考作用。晶振是晶体振荡器的简称,在电气上它可以等效成一个电容和一个电阻并联再串联一个电容的二端网络。AT89C51单片机内部有一个用于构成振荡器的高增益反相放大器。引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。外接晶体谐振器以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中。晶振有一个重要的参数,那就是负载电容值,选择与负载电容值相等的并联电容,就可以得到晶振标称的谐振频率。硬件原
19、理图结论:第二种方案也实现了流水灯闪烁效果,相对于第一种方案而言,更简单些,这也正是单片机能广泛应用于各种电路的原因。但由于该方案中,没有应用到8255A芯片实现接口扩展,而我们这次的课程设计中一个主要设计目的与要求便是:通过利用端口和8255协同工作来实现LED显示功能,对8255A芯片进行编程使流水灯左移或右移,实现流水灯闪烁效果。以此来掌握8255A的功能特点、工作原理以及显示器接口的基本原理与方法技术。所以我们没有把方案二作为最终方案。2.3 第三种方案(最终方案)的论证第三种方案,我们使用了AT89C51单片机与8255A芯片一起实现了流水灯闪烁的设计。从前两种方案中,我们分别熟悉与
20、掌握了地址锁存器74LS373芯片和AT89C51单片机。我们了解到74ls373是常用的地址锁存器芯片,它是一个是带三态缓冲输出的8D触发器,在单片机系统中为了扩展外部存储器,通常需要一块74ls373芯片。而AT89C51单片机是美国ATMEL公司生产的低电压、高性能CMOS 8位单片机,具有丰富的内部资源:4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.255.50V的电压工作范围和024MHz工作频率,使用AT89C51单片机时无须外扩存储器。在第三个方案中,我们将详细地介绍8255A的内部电路、功能特点、工作原理
21、以及在电路中的功能扩展与应用,这也是我们这次课程设计中一个需要重点掌握的芯片。1.可编程外围接口芯片8255A的简介8255A是Intel公司生产的一种通用的可编程并行I/O接口芯片,它是为Inter系列微处理器设计的配套电路,也可用于其它微处理器系统中。通过对它进行编程,芯片可工作于不同的工作方式。8255A有3个8位并行I/O口,具有3个通道3种工作方式,其各口功能可由软件选择,使用灵活,通用性强。8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口;同时必须具有与外设连接的接口A、B、C口。由于8255可编程,所以必须具有逻辑控制部分,因而82
22、55内部结构分为3个部分:与CPU连接部分、与外设连接部分、控制部分。 8255的外部引脚和内部结构注:管脚引出端功能符号:RESET:复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。 CS:芯片选择信号线,当这个输入引脚为低电平时,即/CS=0时,表示芯片被选中,允许8255与CPU进行通讯;/CS=1时,8255无法与CPU做数据传输. RD:读信号线,当这个输入引脚为低电平时,即/RD=0且/CS=0时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。 WR:写入信号,当这个输入引脚为低电平
23、时,即/WR=0且/CS=0时,允许CPU将数据或控制字写入8255。 D0D7:三态双向数据总线,8255与CPU数据传送的通道,当CPU 执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。 PA0PA7:端口A输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入锁存器。 PB0PB7:端口B输入输出线,一个8位的I/O锁存器, 一个8位的输入输出缓冲器。 PC0PC7:端口C输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入缓冲器。端口C可以通过工作方式设定而分成2个4位的端口, 每个4位的端口包含一个4位的锁存器,分别与
24、端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。 A0,A1:地址选择线,用来选择8255的PA口,PB口,PC口和控制寄存器. 当A0=0,A1=0时,PA口被选择; 当A0=0,A1=1时,PB口被选择; 当A0=1,A1=0时,PC口被选择; 当A0=1.A1=1时,控制寄存器被选择.8255A的工作方式:方式0:基本输入输出方式 适用于无条件传送和查询方式的接口电路方式1:选通输入输出方式 适用于查询和中断方式的接口电路方式2:双向选通传送方式 适用于与双向传送数据的外设和查询和中断方式的接口电路 工作方式控制字 C口按位置位/复位控制字8255A初始化编程:8255A的
25、A,B,C三个端口的工作方式是在初始化编程时,通过向8255A的控制端口写入控制字来设定的。8255A由编程写入的控制字有两个:方式控制字和置位/复位控制字。方式控制字用于设置端口A, B, C的工作方式和数据传送方向;置位/复位控制字用于设置C口的PC7PC0中某一条口线PCi(i07)的电平。两个控制字公用一个端口地址,由控制字的最高位作为区分这两个控制字的标志位。 2.方案三的工作流程简述方案三中AT89C51单片机的工作流程与方案一中的8086CPU的工作流程大致相同,但是相对于第一个方案而言,省略了地址锁存器74LS373芯片,直接通过P2.0、P2.1与8255A的A0、A1端相连
26、,传送地址信号,定义8255A的工作方式,使其A口和B口为输出口,定义了8255A各端口地址。 8255A的片选信号CS与地相连,处于低电平有效状态,AT89C51与8255A之间始终保持通信,AT89C51对8255A进行读/写等操作。AT89C51单片机先后写A、B口的起始数据,并调用延时子程序点亮A口灯、B口灯。然后分别调用左移、右移指令将A口起始数据左移再写入A口、B口起始数据右移再写入B口,点亮下一站盏灯,以此循环实现流水灯效果。与第二个方案相比较,结合了第二个方案的优点。在电路图中和AT89C51单片机接在一起的晶振电路,AT89C51单片机内部有一个用于构成振荡器的高增益反相放大
27、器。引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。外接晶体谐振器以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中,在电路图中晶振电路为AT89C51单片机提供了频率参考作用。开始设置8255A工作方式写入PA、PB口,并分别对其数值位移延时写入PA、PB口,并分别对其数值位移延时全部闪烁一次程序流程图第3章 测试结果及体会心得我们把方案三确定为最终方案后,便开始在Proteus软件上绘制出了仿真效果图,并通过Keil软件编写出了相应的源程序汇编文件,导入到了仿真图中的AT89C51单片机上,并最终仿真成功,实
28、现了流水灯闪烁的效果。但整个实验过程并不是一帆风顺的,更不是一蹴而就的。我们通过网上查找相关资料,在图书馆里查询与流水灯相关的书籍,搜集整理出了前面三种方案,并通过实际的仿真与比较,最终确定了方案三作为我们的最终方案。三个方案在仿真的过程中都出现了问题,不是源程序有误就是网上搜集到的相关资料是错误的,把我们带进了误区,但我们最终通过自己讨论研究和请教老师,解决了这些问题。把三个方案都通过Proteus软件仿真出来了。在这次课程设计中,我们分别熟悉掌握了地址锁存器74LS373芯片、AT89C51单片机、可编程外围接口芯片8255A的内部电路、功能特点、工作原理以及在电路中的功能扩展与应用等,使
29、我们对这些芯片的认识更加深刻,并通过仿真电路图等实践操作更进一步掌握了这些芯片的实际应用效果与它们的优缺点、在提高我们理论知识水平与范围的同时,也提高了我们实践能力。“理论与实践相结合”永远使我们学习上一条不可绕过的道路,用理论指导实践,通过实践提高对理论知识的认知水平,这就是我们这次课程设计的一个较为深刻的体会。第4章 致谢在此,我们郑重感谢系里给我们提供的这次珍贵的锻炼机会以及张斌老师的热情指导与帮助。在我们遇到困难而无法解决的时候,张斌老师给我们提供了很多有用的方案建议,并为我们提供了对我们极为有用的资料;当我们有些问题不懂疑惑时,张斌老师也耐心给了我们做了清楚的解释,在此我们表示真挚的
30、感谢。通过课程设计,我们学到了很多东西。我们队友之间的精密合作与默契对我们也是一个重要帮助,没有我们的合作,不可能会有所成功。感谢所有帮过我们的老师和同学们,他们都很热情帮助我们,为我们提供了他们力所能及的帮助,在此我们对他们表示真挚的感谢。第5章 参考文献1 孙俊逸,盛秋林,张铮等 单片机原理及应用M。北京:清华大学出版社,2001。2 蔡美琴,MCS-51系列单片机系统及其应用M。北京:高等教育出版社,2000。3 孙育才,孙华芳,王荣兴 单片机原理及应用M。北京:电子工业出版社,2003。4 李鸿,单片机原理及应用M。湖南:湖南大学出版社,2004。5 丁元杰,单片微机原理及应用第二版M
31、。北京:机械工业出版社,2001。6 潘新民,王燕芳 编著.微型计算机控制技术。北京:高等教育出版社,2004。7 马忠梅 单片机的C语言应用程序设计M。北京:北京北航出版社,2003。8 范立南 单片微机接口与控制技术M。沈阳:辽宁大学出版社,1996。9 张友德 单片微型机原理、应用与实践M。上海:复旦大学出版社,1992。10 李华 MCS-51系列单片机实用接口技术M。北京:北京航空航天大学出版社,1993。11 何希庆,高伟 MCS-51单片机原理、实验、实例M.。山东:山东大学出版社,1989。12 张毅刚,彭喜元,姜守达 新编MCS-51单片机应用设计M。哈尔滨:哈尔滨工业大学出
32、版社,2003。附录1 方案一 Proteus仿真电路效果图附录2 方案一 源程序代码MY8255_A EQU IOY0+00H*2 ;8255的A口地址MY8255_B EQU IOY0+01H*2 ;8255的B口地址MY8255_C EQU IOY0+02H*2 ;8255的C口地址MY8255_MODE EQU IOY0+03H*2 ;8255的控制寄存器地址DATA SEGMENTLA DB 1 DUPLB DB 1 DUPAXX DW 1 BUPCXX DW 1 BUPDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,D
33、ATAMOV DS,AXMOV DX,MY8255_MODE ;定义8255工作方式MOV AL,80H ;工作方式0,A口和B口为输出OUT DX,ALBEGIN:MOV DX,MY8255_A ;写A口发出的起始数据MOV AL,01HOUT DX,ALMOV LA,ALMOV DX,MY8255_B ;写B口发出的起始数据MOV AL,80HOUT DX,ALMOV LB,ALMOV CX,7LOOP1:CALL DALLYMOV AL,LA ;将A口起始数据左移再写入A口ROL AL,1MOV LA,ALMOV DX,MY8255_AOUT DX,ALMOV AL,LB ;将B口起始数
34、据右移再写入B口ROR AL,1MOV LB,ALMOV DX,MY8255_BOUT DX,ALLOOP LOOP1MOV CX,7LOOP2: CALL DALLYMOV AL,LA ;将A口起始数据右移再写入A口ROR AL,1MOV LA,ALMOV DX,MY8255_AOUT DX,ALMOV AL,LB ;将B口起始数据左移再写入B口ROL AL,1MOV LB,ALMOV DX,MY8255_BOUT DX,ALLOOP LOOP2JMP BEGIN ;流水灯重新开始DALLY PROC ;软件延时子程序MOV CXX,CXMOV AXX,AX ;这里本应该用堆栈,我用CXX,
35、AXX变量代替了MOV CX,0FHD1:MOV AX,0FFFHD2:DEC AXJNZ D2LOOP D1MOV AX,AXXMOV CX,CXXRETDALLY ENDPCODE ENDSEND START附录3 方案二 Proteus仿真电路效果图附录4 方案二 源程序代码ORG 0000H ;单片机上电后从0000H地址执行AJMP START ;跳转到主程序存放地址处ORG 0030H ;设置主程序开始地址START:MOV SP,#60H ;设置堆栈起始地址为60HCLR P1.0 ;P1.0输出低电平,使LED1点亮ACALL DELAY ;调用延时子程序SETBP1.0 ;P
36、1.0输出高电平,使LED1熄灭CLR P1.1 ;P1.1输出低电平,使LED2点亮ACALLDELAY ;调用延时子程序SETBP1.1 ;P1.1输出高电平,使LED2熄灭CLR P1.2 ;P1.2输出低电平,使LED3点亮ACALLDELAY ;调用延时子程序SETBP1.2 ;P1.2输出高电平,使LED3熄灭CLR P1.3 ;P1.3输出低电平,使LED4点亮ACALLDELAY ;调用延时子程序SETBP1.3 ;P1.3输出高电平,使LED4熄灭CLR P1.4 ;P1.4输出低电平,使LED5点亮ACALLDELAY ;调用延时子程序SETBP1.4 ;P1.4输出高电平
37、,使LED5熄灭CLR P1.5 ;P1.5输出低电平,使LED6点亮ACALLDELAY ;调用延时子程序SETBP1.5 ;P1.5输出高电平,使LED6熄灭CLR P1.6 ;P1.6输出低电平,使LED7点亮ACALLDELAY ;调用延时子程序SETBP1.6 ;P1.6输出高电平,使LED7熄灭CLR P1.7 ;P1.7输出低电平,使LED8点亮ACALLDELAY ;调用延时子程序SETBP1.7 ;P1.7输出高电平,使LED8熄灭ACALLDELAY ;调用延时子程序AJMP START ;8个LED流了一遍后返回到标号START处再循环DELAY ;延时子程序MOV R0
38、,#255;延时一段时间D1:MOV R1,#255DJNZ R1,$DJNZ R0,D1RET ;子程序返回END ;程序结束附录5 方案三(最终方案) Proteus仿真电路效果图附录6 方案三(最终方案) 源程序代码ORG 0000H LJMP MAIN ORG 0030H MAIN:CLR P2.2 ;8255复位 SETB P2.2 CLR P2.2 SETB P2.0 ;A0=1,A1=1,8255A控制寄存器地址 SETB P2.1 MOV A,#80H ;PA,PB和PC都作为输出口 MOVX R0,ASTART:MOV R1,#0FEH ;赋循环初值 MOV R2,#7FH
39、MOV R3,#08 LOOP:CLR P2.0 CLR P2.1 MOV A,R1 MOVX R0,A ;写入数据 RL A ;左移1位 MOV R1,A SETB P2.0 ;PB口 CLR P2.1 MOV A,R2 MOVX R0,A RR A MOV R2,A CALL DELAY DJNZ R3,LOOP ;从P0循环到P7 MOV R1,#7FH MOV R2,#0FEH MOV R3,#08LOOP1:CLR P2.0 ;PA口 CLR P2.1 MOV A,R1 MOVX R0,A ;写入数据 RR A ;右移1位 MOV R1,A SETB P2.0 ;PB口 CLR P2.1 MOV A,R2 MOVX R0,A RL A MOV R2,A CALL DELAY DJNZ R3,LOOP1 ;从P0循环到P7 CLR P2.0 CLR P2.1 MOV A,#0 MOVX R0,A SETB P2.0 MOVX R0,A CALL DELAY MOV A,#0FFH CLR P2.0 MOVX R0,A SETB P2.0 MOVX R0,A CALL DELAY JMP STARTDELAY:MOV R6,#0FFHD1:MOV R7,#0FFH DJNZ R7,$ DJNZ R6,D1 RET END- 23 -
链接地址:https://www.31doc.com/p-3292539.html