欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    微机课程设计8086控制的循环彩灯报告.docx

    • 资源ID:4659830       资源大小:130.49KB        全文页数:15页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    微机课程设计8086控制的循环彩灯报告.docx

    1、微机课程设计8086控制的循环彩灯报告微机原理课程设计报告题 目: 循环彩灯控制系统学 年:10/11学年 学期:第1学期 班级: 学 号: 姓名: 循环彩灯控制系统课程设计报告设计目的: 1.巩固和加深课堂所学知识;熟悉各种指令的应用及条件;2.学习掌握一般的软硬件的设计方法和查阅、运用资料的能力;3.深入了解与掌握8255A在PC机系统的典型接法和8255A的工作方法及应用编程。设计任务与要求:设计一个循环彩灯控制系统,能输出四种花型,输出花型如下:1)00000001 左循环(1时亮,0时灭)2)10000000 右循环 3)按00000001,00000011,00000111-111

    2、11111规律递增,后同时闪烁一次,循环不断。4)按01010101,10101010(或红、绿彩灯) 交替闪烁。功能要求: 1)循环彩灯的循环速度可调;2)按键要求 启动/暂停,按SW0开关启动系统,按SW1开关停止系统工作。 花型变换,由开关SW2、SW3进行四种花型切换;总体方案与说明:根据所学内容和对8255A的应用,整个系统硬件采用8086微处理器,74LS373锁存器,和8255A可编程并行接口芯片和8个led彩灯。Intel 8255A是一种通用的可编程并行接口芯片,由于它是可以编程的,可以通过程序来设置芯片的工作方式,通用性强,使用灵活,可为多种不同的CPU与外设之间提供并行输

    3、入/输出的通道;8086微处理器,选择最小工作模式,所有的总线控制信号均由8086产生;8086CPU的地址数据总线AD15-AD0和地址状态总线A16/S3-A19/S6是复用的,必须通过地址锁存器把地址总线和数据总线分离 循环彩灯主要模块流程图软件设计采用模块化程序设计思想,将软件划分成若干单元,主要包括主程序、LED彩灯显示子程序和延时子程序等。本系统具体汇编源程序见附表一。使用软件说明:ProteusProteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真, 其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsP

    4、IC33、AVR、ARM、8086和MSP430等Emu8086Emu8086-MicroprocessorEmulator结合了一个先进的原始编辑器、组译器、反组译器、具除错功能的软件模拟工具(虚拟PC),还有一个循序渐进的指导工具,编译源代码,并在模拟器上一步一步的执行。可视化界面令操作易如翻掌可以在执行程序的同时可观察寄存器,标志位和内存算术和逻辑运算单元(ALU)显示中央处理器内部的工作情况 点击编译之生成.exe文件后,调试界面图 硬件电路图与说明: 8255A的数据线,片选信号,地址线,读写控制线等与系统总线相连,CS与译码器的也相连,通过译码器连接到系统总线。锁存控制电路74LS

    5、373在微控制器单元(MCU)中,寄存器是十分重要的资源。寄存器的主要作用是快速寄存算术逻辑运算单元(ALU)运算过程中的数据,其锁存功能利用74LS373来实现, (1) 锁存使能控制端 LE。(2) 控制输入端(3) 数据输入端通过锁存器74LS373把数据存储于集成块中,当LE锁存控制端为1,OE使能端为0时,其具有输入功能,反之其具有锁存功能,在此系统中充当一个桥梁的作用,将部分数据传送个8255A的A0,A1,和CS片选等等,从而驱动发光二级管显示不同的花色。由于地址锁存器8282与74LS373有相同的功能,可以将此处的74LS373替换成8282,原理上同样可以实现可编程并行通信

    6、接口芯片8255A: 方式0为简单I/O,查询方式,端口A、端口B、端口C均可使用。方式1为选通I/O,中断方式,端口A、端口B可以使用,选通的输入/输出方式。方式2为双向I/O,中断方式,只有端口A可以使用,双向的传输方式。 方式0也叫基本输入/输出方式。一种方式,不需要应答联络信号,端口A、端口B和端口C的高4位及低4位都可以作为输入或输出端口。方式0的应用场合有无条件传送和查询传送2种; 故根据我们系统设计的要求,综上可知,选择8255A为工作方式0。然而8255A的3种基本工作方式:由方式选择控制字来决定,D71(特征位)表明是设定方式选择控制字;D7=0,则表示是端口C按位置位/复位

    7、控制字; 端口C分成高4位(PC7PC4)和低4位(PC3PC0),可分别设置成输入端口或输出端口;端口C的高4位与端口A配合组成A组,端口C的低4位与端口B配合组成B组。 综上可得此系统需要满足A端口为输出,输出数据给到8个LED彩灯;端口C为输入,需要检测按键的输入情况;问题分析与解决方案:1. unknow 1-byte opcode at B900:7056! 61 SPICEerror-too many iterations without convergence在仿真过程中,出现以上两行的错误,太多的迭代没有收敛性,和某个汇编语言在编码过程中的地址不正确:说明程序代码过于分散,没有

    8、模块化,之后再将程序能够模块化的地方尽量改善,达到更加简洁易读易运行的目的由于程序中定义了 dz db 01h,03h,07h,0fh,1fh,3fh,7fh,0ffh,00h,0ffh,00h,0ffh 在在最初的调试的时候variable里面elements的值总是显示1,然而此处共有12个值,si共需要在此取11个偏移地址,所以改成11后,程序调试运行正常;2.延时子程序模块的编写方法多种,之前为了测试单一的彩灯循环左移是否能够成功,采用nop延时,由CPU晶振频率计算,12M的晶振频率,执行一个nop需要时间1us,8086的晶振频率是5MHz,所以执行一个nop需要的时间是12/5u

    9、s若要实现短暂而精确的延时可以用nop,然而此处流水灯的延时仅仅用空指令nop并不具有很好的移植性和修改性,程序代码也显得冗余;一般一定功能的程序段设计成一个子程序,MASM宏汇编程序用“过程”(Procedure)来构造子程序。如此段延时子程序:delay proc push cx push bx mov cx,0fh ;修改此处的值,可以改变延时时间 d1:mov bx,0fh d2:dec bx jnz d2 pop bx pop cx ret end endp 在写此系统程序中,我采用的是分支结构编写延时程序,后查的一般分支程序为计算机根据某种判断,利用条件转移指令,改变程序执行顺序所

    10、用;然而一般具有公用性,重复性,和相对独立性的某段程序应设计成子程序,这种结构会给程序设计和调试带来许多方便,在满足汇编语言一定的规范性条件下,应将延时模块改成如上程序所示;3. 内存空间分配,汇编语言的重要特点之一是能够直接利用机器指 或者伪指令为数据或者代码程序分配内存空间,86系列(如8086微处理器)的存储器结构是分段的,有代码段,数据段,堆栈段或附加段,在程序设计时要充分考虑分段结构,要执行的程序段应设在当前段(活动段)中;分配内存空间:直接在proteus里面将8086CPU的internal memory size设置成一个足够用的空间大小,如0x1000,默认的空间大小是0x0

    11、0000,如不改则仿真不成功。程序在运行时所需要的工作单元应尽可能的设在CPU寄存器中,这样存取速度快,而且操作方便;在此系统源程序中都采用8086CPU的全部通用寄存器:累加器AX,基数寄存器BX,基数寄存器CX,数据寄存器DX;和堆栈指针寄存器SI;4 在所有的程序模块逐步成功之后,期待着整体衔接能够成功,可是出现了一个现象:每次仿真只能实现一种花型,在仿真过程中按键根本无作用,也就是程序一直在某个彩灯子程序中运行,无法去读select处C端口的按键值,必须在仿真stop后,切换按键值,在按仿真play后才能改变花型;后来发现原来是在每个彩灯子程序中,由于利用了loop循环去实现彩灯的左移

    12、与右移,使得程序跳不到下一条语句jmp select,一直以为有了jmp select,似乎就可以去读取了按键值,后查loop的资料,loop的两步操作:1、cx=cx-1;2、判断cx的值,决定跳转还是向下执行;原来自己在子程序开始忘记了mov cx,08h;即彩灯实现完一次花型变换就去读取按键的值,如果此时按键的值改变,就跳转到相应的程序段去执行,否则继续执行当前的彩灯花型;5.某个想法:在调试过程中,由于led灯一端都接地,按下启动键,并没有什么现象,总让人产生错觉是不是程序出现问题,仿真不出来;未来便于启动按键按下有现象,可将led灯的另一端接高电平,但是想来想去,如果是在现实中,不可

    13、能用彩灯突然全部亮来说明系统启动,故可以在连接启动键导线中用一个led灯是否亮了来检测系统的启动成功,此时所有的按键的另一端也要求接高电平了;6整体调试过程中,SW0:启动/暂停能够控制仿真过程中的状态,SW1:停止系统,需要用到系统功能调用,返回当前操作系统;小结与体会:1.cmp属于加减运算的范畴,而test属于逻辑运算的范畴cmp主要用于比较两数的关系,可以在有符号数和无符号数之间进行比较。两数相等影响ZF标志,无符号数影响CF标志,有符号数影响SF和OF标志。一般根据标志位的影响设置程序跳转,即根据不同的条件完成对应的程序片段,类似于高级语言的IF-ELSE结构。所有的有条件转移指令都

    14、可以用在这条指令之后。test通常用于检测某些位是否为1,但又不希望改变操作数的场合。比如检查AL中的位6和位2是否有一位为1,可以用如下指令:test AL,01000100b,如果这两个位全为0.则ZF的值为1,否则清0,那么根据标志位设置的跳转就只能为jz或jnz这两条指令的相同点是都不会影响操作数,只是通过标志寄存器的某些位反映运算结果。2. 首先,更一步深化了程序设计步骤的思想,之前的混乱状态逐渐清晰起来;编写程序时我遇到了许多的麻烦,开始时我把程序编了出来,但是我用Proteus仿真就和我想要的结果不一致,然后我又通过认真的分析,发现我的逻辑思维出错了,用汇编语言编写时要求有很好的

    15、逻辑思维能力,在今后的练习中得加强这方面的锻炼; 其次每一个独立的子程序最好用回车把它与其它的语句分开,这样就是为了在你查找程序错误时能够很清楚的找到错误。 :以后在调程序时,确定问题后,要将流程和原理有非常清晰的理解,最好一步一步写下来,这样方便最初源程序的编写和最后完工后的调试;3. 进一步了解了8255A各引脚的功能, 8255A和系统总线之间的连接, 8255A和CPU之间的数据交换,以及8255A的内部逻辑结构。深入掌握了8255A显示电路的基本功能及编程方法,同时也深入了解了8255等芯片的工作方式、作用,受益匪浅。附表1: 循环彩灯系统汇编源程序清单:0001 0000 (10h

    16、)SW1停止系统工作0010 0000 (20h)SW0开始系统工作 0010 0000 (20h)SW2花型1 左循环0010 0001 (21h)SW2花型2 右循环 0010 0010 (22 h)SW3花型3 循环不断0010 0011 (23h) SW3交替闪烁CSA1A0端口对应地址 011控制字寄存器xxxx xx11 000端口A寄存器xxxx xx00001端口B寄存器xxxx xx01010端口C寄存器xxxx xx10 data segmentMY8255_A equ 90h ;8255的A端口地址MY8255_B equ 92h ;8255的B端口地址MY8255_C

    17、equ 94h ;8255的C端口地址MY8255_MODE equ 96h ;8255控制寄存器地址 MODE_A db 10001001b ;控制字 89h; A端口输出工作方式0,端口C输入 dz db 01h,03h,07h,0fh,1fh,3fh,7fh,0ffh,00h,0ffh,00h,0ffh data ends code segmentassume cs:code,ds:data start: mov dx,MY8255_MODE mov al,MODE_A out dx,al ;控制字 初始化 ;-select: mov dx, MY8255_C in al,dx ;读取C

    18、端口地址 goexit: test al,10h jz exit ;结果是0,CF=1,跳转到exit去执行 set: test al,20h jz select ;若是结果是0,则继续检测按键 ; * ;四种花型的判断 and al,0fh ;屏蔽al的高四位 cmp al,00h jz cont1 ;花型1 循环左移 cmp al,01h jz cont2 ;花型2 循环右移 cmp al,02h jz cont3 ;花型3 依次递增后闪烁 cmp al,03h jz cont4 ;花型4 交替闪烁 jmp select ;- exit: mov ah,4ch int 21h ;4ch系统

    19、功能调用,返回操作系统 ;-cont1: mov cx,08h mov dx,MY8255_A mov al,01h k1: out dx,al ;写A端口 call delay rol al,1 loop k1 jmp select ;- cont2: mov cx,08h mov dx,MY8255_A mov al,80h k2: out dx,al call delay ror al,1 loop k2 jmp select ;- cont3: mov dx,MY8255_A mov bl,0bh lea si,dz diz: mov al,si ;向左递增子程序 out dx,al

    20、call delay inc si ;加1存在si里面 dec bl jnz diz ;bl!=0则继续跳到diz执行 jmp select ;-cont4: mov dx,MY8255_A mov al,55h out dx,al call delay mov al,0aah ; xor al,0ffh out dx,al call delay jmp select ;- ;delay proc ;定义延时子程序 ; push cx; push bx; mov cx,0fh ; d1: mov bx,0fh; d2: dec bx; jnz d2; pop bx; pop cx; ret; end endp ;-delay: 延时子程序 pushf push bx push cx ;保护现场 mov bx, 0e0hlp2: mov cx ,176hlp1: pushf ;标志入栈 popf ;标志出栈 loop lp1 dec bx jnz lp2 pop cx pop bx popf ret code ends end start


    注意事项

    本文(微机课程设计8086控制的循环彩灯报告.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开