微机闰年判断_第1页
微机闰年判断_第2页
微机闰年判断_第3页
微机闰年判断_第4页
微机闰年判断_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、郑州航空工业管理学院微机原理课程设计说明书 2013 级 电气工程及其自动化 专业 1306971 班级题 目 判断某一年是否为闰年 姓 名 李晓孟 学号 130697112 指导教师 王义琴 职称 二一三 年 十二月 十二 日11 判断某一年是否为闰年摘要:微机原理及接口技术是一门应用性、综合性、实践性较强的课程,没有实际的有针对性的设计环节,我们就不能很好的理解和掌握所学的技术知识,更缺乏解决实际问题的能力。所以通过有针对性的课程设计,会使我们学会系统地综合运用所学的理论知识,提高我们在微机应用方面的开发与设计本领,系统的掌握微机硬软件设计方法。通过设计过程,要求我们熟悉掌握微机系统的软件

2、、硬件设计的方法、设计步骤,使我们得到微机开发应用方面的初步训练。关键词:缓冲区、字符转换、判断闰年1、 判断某一年是否为闰年的基本原理本设计是根据闰年的计算方法,利用汇编语言编写的一个简单的判断闰年的程序。根据判断闰年规则:如果某年能被4整除但不能被100整除或者该年能被400整除,则该年为闰年,否则不是闰年。在本程序运行后,只要从键盘输入年份,通过程序计算后,观察8255A并行接口发外设光二极管,亮表示为闰年,不亮表示不是闰年。2、 设计方案本设计中,我们利用DOS 21H中断类型的10号键盘功能调用,将从键盘接收的年份数值型字符串按字节存入缓冲区。将字符串中的每个字符转换为对应的十进制数

3、值(利用0-9这10个数的ASCII码值比其本身大30H的关系),通过判断某年是否为闰年的表达式,从8255A并行接口来控制LED发光二级管的亮灭。判断某年是否为闰年的汇编语言的表达式为:(AX) MOD 4 EQ 0)AND(AX)MOD 100 NE 0))OR(AX)MOD 400 EQ 0)其中,(AX)中存放的是从键盘输入的年份值。3、 硬件设计本课程设计中,设计采用的是8086CPU与外设之间通过8255A并行接口连接,通过控制外设发光二极管的亮与灭来判断用户输入的年份是否为闰年。 8255A的引线结构8255的引线结构如图2所示。共有40个引脚,其功能分别如下:D0D7:三态双向

4、数据总线,8255与CPU数据传送的通道,当CPU 执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。 RD:读信号线,当这个输入引脚为低电平时,即RD=0且CS=0时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。CS:芯片选择信号线,当这个输入引脚为低电平时,即CS=0时,表示芯片被选中,允许8255与CPU进行通讯;CS=1时,8255无法与CPU做数据传输。PA0PA7:端口A输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入锁存器。 PB0PB7:端口B输入输出线,一个8位的I/O锁存器,

5、一个8位的输入输出缓冲器。 PC0PC7:端口C输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入缓冲器。端口C可以通过工作方式设定而分成2个4位的端口, 每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。RESET:复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。 A1,A0:地址选择线,用来选择8255的PA口,PB口,PC口和控制寄存器。 当A1=0,A0=0时,PA口被选择; 当A1=0,A0=1时,PB口被选择; 当A1=1,A0=0时,PC口被选择; 当

6、A1=1,A0=1时,控制寄存器被选择;在本次课程设计当中,设计采用的是8255A并行接口(即通过汇编指令)实现的。而LED的亮与灭是用8255A的A口控制的,工作在方式0,A口和B口均为输出。端口地址为2A8H2ABH。并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息。CPU和接口之间的数据传送总是并行的,即可以同时传递8位、16位、32位等。8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种方式下工作:方式0-基本输入/出方式、方式1-选通输入/出方式、方式2-双向选通工作方式。8086与8

7、255A的系统连接图如图1所示,8255的内部结构及引脚如图2所示,8255工作方式控制字和C口按位置位/复位控制字格式如图3所示。 图1 8086CPU与8255A的连线图 图2 8255的内部结构及引脚 76543210控制C口低4位1:输入0:输出控制B口8位1:输入0:输出方式选择0:方式01:方式1控制C口高4位0:输出1:输入控制A口8位0:输出1:输入方式选择00:方式001:方式11X:方式2 功能控制0:位操作1:方式选择0XXXD3D2D1D0置位/复位 0:复位 1:置置端口C的位选择 PC0 0 0 0 PC1 0 0 0 PC2 0 0 0 PC3 0 0 0 PC4

8、 0 0 0 PC5 0 0 0 PC6 0 0 0 PC7 0 0 0标志位 无关 图3 8255工作方式控制字和C口按位置位/复位控制字格式4、 软件设计 1. 设计方案闰年计算程序流程图所示,程序开始运行以后,首先屏幕输出提示语,提示用户输入一个年份。用户输入年份后,程序将输入的字符转换为数值。设计利用乘法的操作,实现字符之间的10倍数值转换关系。将年份字符转换成数值后,则进行是否是闰年的判断。首先将年份除以4,若不能整除,则判断为不是闰年,通过8255A并行接口连接的外设,让LED不亮,并提示用户是否继续下一个年份的判断,如果用户输入n则表示不需要继续,程序将退出,否则继续下一个年份的

9、判断;若能整除4,则该年份将继续除以100,若不能整除,则判断为是闰年,通过8255A并行接口连接的外设,让LED亮,并提示用户是否继续下一个年份的判断,若不需要继续,程序将退出,否则继续下一个年份的判断;若能整除100,则该年份将继续除以400,若能整除,则判断为是闰年,通过8255A并行接口连接的外设,让LED亮,并提示用户是否继续下一个年份的判断,若不需要继续,程序将退出,否则继续下一个年份的判断;若不能整除400,则判断为不是闰年,通过8255A并行接口连接的外设,让LED不亮,并提示用户是否继续下一个年份的判断,若不需要继续,程序将退出,否则继续下一个年份的判断。2. 设计流程图 开

10、始 输入年份年份除以4是否整除 否 是年份除以100 是否整除 否 年份除以400 是是否整除 否 是 不是闰年 是闰年 LED灭 LED亮 3.代码段定义:代码段需要定义欲显示的字符串,且字符串以$作为结束标志,还需定义欲输入字符串的缓冲区,缓冲区的第一个字节存放能保存的最大字符数,第二个字节存放实际输入的字符数,用户从键盘输入的字符从第三个字节开始存放,直到用户输入回车键为止。 本设计代码段定义如下: DATAS SEGMENT MAXLEN DB 5 ACTLEN DB ? YEAR DB 4 DUP(?) YEARALL DW 0 NUM400 DW 400 NUM100 DW 100

11、 NUM4 DW 4 NUMMUL DW 1000,100,10,1 MESSAGE1 DB 'please input the year',13,10,'$' DATAS ENDS4. 8255A初始化:MOV AL,80HMOV DX,2ABHOUT DX,AL5.提示语显示:利用DOS 21H中断类型09号键盘功能调用,在屏幕输出提示用户输入年份的提示。首先,将要显示的字符串放在内存数据区中,本设计提示语显示程序代码如下:MOV AH,09H ;输出MOV DX,OFFSET MESSAGE1INT 21H 6.字符串输入:利用DOS 21H中断类型的10

12、号键盘功能调用,将从键盘接收的表示年份数值的字符串按字节存储缓冲区。首先,应在内存中建立一个输入缓冲区,如inbuff db 5,?,5 dup(?)。本设计字符串输入程序代码如下: MOV AH,0AH ;字符串输入 LEA DX,MAXLEN INT 21H7.数制转换:利用0-9这10个数的ASCII码值比其本身大30H的关系,将字符串中的每个字符转换为对应的十进制数值。本设计数制转换程序代码如下: MOV CX,4 MOV SI,0 MOV DI,0 MOV YEARALL,0 NEXT: MOV AL,YEARSI SUB AL,30H CBW MUL NUMMULDI ADD YE

13、ARALL,AX INC SI ADD DI,2 LOOP NEXT8.是否为闰年的判断:利用判断某年是否为闰年的表达式,输出该年是否为闰年的信息。 MOV DX,0 MOV AX,YEARALL DIV NUM4 CMP DX,0 JNZ NOCONTINUE: MOV DX,0 MOV AX,YEARALL DIV NUM100 CMP DX,0 JNZ YES MOV DX,0 MOV AX,YEARALL DIV NUM400 CMP DX,0 JZ YES9.8255A外设LED控制:利用8255A并行接口,外接LED发光二极管,通过8255输出,在LED接口地址上,让其在1的时候亮

14、,在0的时候灭。YES: MOV AH,1 OUT 2ABH,AL JMP DONE NO: MOV AH,0 OUT 2ABH,AL JMP DONE 10.源程序: DATAS SEGMENT MAXLEN DB 5 ACTLEN DB ? YEAR DB 4 DUP(?) YEARALL DW 0 NUM400 DW 400 NUM100 DW 100 NUM4 DW 4 NUMMUL DW 1000,100,10,1 MESSAGE1 DB 'please input the year',13,10,'$' DATAS ENDS STACKS SEGME

15、NT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS MAIN PROC FAR START: PUSH DS SUB AX,AX PUSH AX MOV AX,DATAS MOV DS,AX MOV AL,80H ;8255A初始化 MOV DX,2ABH OUT DX,AL POP DX POP AX MOV AH,09H ;输出 MOV DX,OFFSET MESSAGE1 INT 21H MOV AH,0AH ;字符串输入 LEA DX,MAXLEN INT 21H MOV CX,4 MOV

16、 SI,0 MOV DI,0 MOV YEARALL,0 NEXT: MOV AL,YEARSI SUB AL,30H CBW MUL NUMMULDI ADD YEARALL,AX INC SI ADD DI,2 LOOP NEXT MOV DX,0 MOV AX,YEARALL DIV NUM4 CMP DX,0 JNZ NO CONTINUE: MOV DX,0 MOV AX,YEARALL DIV NUM100 CMP DX,0 JNZ YES MOV DX,0 MOV AX,YEARALL DIV NUM400 CMP DX,0 JZ YES YES: MOV AL,1 OUT 2A

17、BH,AL ;LED亮 JMP DONE NO: MOV AL,0 OUT 2ABH,AL ;LED灭 JMP DONE DONE: MOV AH,4CH INT 21H MAIN ENDP CODES ENDS END START五、结论通过这两周的微机原理与接口技术课程设计实验,我对这学期微机原理与接口技术原理的知识有了更进一步的认识,经过这次课程设计的学习,我们才通过各方面途径去查取相关资料,去自学相关知识,去一个个逐步消解我们学习上的盲点,使我受益匪浅,收获颇多,但从中也发现了自己许多的不足和需要改进的地方。首先,就要把握整个的设计的大概的流程,然后再对每一个分快进行设计,本次设计这一

18、点没有做好,在设计当中做了不少无用功,其次在设计的过程中,很重要的一点是要熟悉可编程并行通信接口芯片8255的初始化及其端口的使用。通过本次课程设计,我的实际操作能力和设计能力都得到了一定的提高,但理论与实践之间永远是存在着一定差距的,要把理论知识充分灵活地运用于实践是需要一定的实践经验和牢固的理论基础,希望以后能有更多这样的实践的机会,让自己不断完善和进步。 六、参考文献1 余春暄.80x86/Pentium微机原理及接口技术.北京:机械工程出版 社,20082 张荣标.微型计算机原理与接口技术.北京:机械工业出版社,20083 王爽.汇编语言.北京:清华大学出版社,20084 杨季文.80x86汇编语言程序设计教程.北京:清华大学出版社,2006 5 李敬兆, 8086/8088和arm核汇编语言程序设计 中国科技大学出版社, 2008 6 张光长,汇编语言程序设计:北京大学出版社,2009.7设计总结:两个星期的课程设计结束了,在这段时间里,我们做这个

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论