基于8086的电子时钟设计汇编语音_第1页
基于8086的电子时钟设计汇编语音_第2页
基于8086的电子时钟设计汇编语音_第3页
基于8086的电子时钟设计汇编语音_第4页
基于8086的电子时钟设计汇编语音_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、目录摘要1Abstract 1第一章电子钟设计总体方案设计 21.1设计目的 21.2设计要求 21.3方案比较 21.3.1 非中断方式与中断方式的比较 21.3.2 LED显示与液晶显的比较 31.4总体方案设计思路 3第二章系统硬件设计 42.1 8255与CPU之间的连接关系 42.2 8253与周边电路的连接关系 42.3 8259与周边电路连接关系 52.4液晶显示模块与8255之间的连线关系 52.5地址译码器与按键 62.6系统总体硬件电路图 6第三章系统软件设计 73.1编址及控制字的确定 73.1.1 编址 73.1.2控制字 73.2分块子程序 73.2.1 1602 读

2、写操作子程序 73.2.2中断子程序 93.3主程序设计 11总结与致谢: 13参考文献: 14附录: 15Word资料摘要本设计以微机原理与接口技术为基础,以8086CPL为核心,利用INTER 8253可编 程定时/计数器,通过引入时钟发生器产生标准时钟进行精准定时;经定时器产生中断源,采用可编程中断控制器8259A进行中断扩展,用可屏蔽中断方式进行时间的采集; 以可编程并行I/O接口芯片8255A扩展接口,驱动MSC160液晶模块进行时间显示。第一章电子钟设计总体方案设计1.1设计目的电子钟是一种基于微电子技术实现时、分、秒计时的装置,与机械式时钟相比具 有更高的准确性和直观性,且无机械

3、装置,具有更长的使用寿命,因此得到了广泛的 使用。通过该题目的设计和分析,学习微机软、硬件系统设计开发的过程,加深微机 原理及其应用课程基础知识的理解和综合运用能力,熟悉集成电路芯片的使用方法, 熟悉微机编程及接口电路,学会体会工程实际设计过程,培养学生独立解决实际工程 问题的综合能力。初步得到用汇编语言书写程序的训练,全面培养程序设计的分析、 设计、编测试及文档规范书写的能力,得到运用汇编语言的综合训练,提高解决实际 问题的能力。1.2设计任务通过该题目的设计过程,可以初步掌握汇编语言的运用、软件开发方法并提高解决实际问题 的综合能力。电子时钟实际是一个多重的定时技术系统。对于秒、分技术系统

4、,逢60进1,即当秒计数到60时,秒计数器向分计数器输入一个计数脉冲;而当分计数器计数到60时,向小时计数器输入一个计数脉冲。当小时计数器逢24进1.把秒计数器、分计数器和小时计数器的内容通过七段数码管或其他芯片显示出来,就完成了时间信息的输出。本课程设计要求利用 8086系统模拟电子时钟结构,完成以下设计任务:1、时间初值输入:利用键盘输入时间初值;2、电子钟计数:电子钟通过计数器自动计数,实现时间的自动更新;3、时间显示:可选用 LED七段数码管输出时间,显示给用户;4、程序采用汇编语言在 PC机上完成;5、完成复核学习要求的设计计算说明书。1.3设计要求1、利用Intel 8086 CP

5、U 及其相应的外围扩展电路及其接口电路,设计系统硬 件原理图,并绘制于2号工程图纸。2、 给出程序的设计思路,设计系统软件流程框图,并绘制于2号工程图纸。3、完成设计计算说明书。1.3方案比较为实现设计要求,在8086微机系统中实现计时功能可有多种方式,同时实现显示的方式也有多种,现主要比较计时方式中的中断与非中断方式,及显示常用的LED显示与液晶显示。1.3.1非中断方式与中断方式的比较在非中断方式设计常使用的方式为查询法,查询法的设计,可将定时/计数器8253 的OUT引脚接至并行I/O扩展芯片8255的PA PB, PC的任一口上,CPUS过不断的 检测该引脚上的高低电平变化,来进行计数

6、。该方式的优点:实现思路相对简单;由于不要引入中断则可不用中断扩展芯片 8259电路相对简单;该方式的缺点:由于CPU要不断的去检测单一引脚高低电平的变 化,占用的时间比较长,利用率较低;与此同时,CPU要进行数据的运算与控制数据的传输,如果二者冲突,可能会发生计时不准的现象。中断方式的设计思路,将定时/计数器8253的OUT脚接至中断扩展芯片8259的 IR引脚上,定时器产生相同频率的计数脉冲,形成中断源。 8259再通过INTR引脚向 CPU发出中断请求信号,CPUS过中断检测进行计数/计时。该方式的主要缺点:由于芯片8259的引进,使电路相对复杂;该方式的主要优 点是:用中断的方式可以大

7、大提高 CPU勺利用效率,同时可以在该系统上进行更多功 能的扩展,同时用中断的方式进行计数/计时,计时更加的准确可靠。基于以上的考虑本设计,采用电路稍微复杂,但可靠性强,禾U用效率高的中断方 式。132 LED显示与液晶显的比较为完成本设计的要求,若采用 LED则需6块以上,可以采用二片8255来驱动动 这六片LED进行静态显示。也可以采用动态扫描的方式,用一片8255加锁存器(如74LS573)来进行动态显示。若采用液晶显示,则只需用一片8255芯片进行接口的扩展(具体扩展方案将在下面进行介绍),可以得到较为满意的显示效果,但操作的技 巧性要求相对较高,成本相对较高。不论从硬件电路驱动的复杂

8、性,还是从软件设计的简洁性及整个系统的外观来 看,时尚的液晶显示更能满足系统的需求。鉴于以上考虑,本次设计采用操作要求相 对较高的液晶进行数码显示。1.4总体方案设计思路本方按主要设计思路如右下图所示:以8086CPU最小系统为核心,控制可编程定时/计数器INTER 8253,可编程中断控制器 8259A,可编程并行I/O接口芯片8255A。通过8253的输出记数脉 冲为8259产生中断源,8259将中断信号反馈到 CPU从而产生可屏蔽中断的申请信号,在CPU的合理响应下进行计数,通过 8255驱动16*2的液晶显示模块 LCM1602进行时间显示。第二章系统硬件设计在本章中,将分模块对本次设

9、计的硬件设计进行简述,分块介绍系统的主要功能 及连线方式。2.1 8255与CPU之间的连接关系用B, C及控制口分配了可靠的地址。将8086的低 八位数据线与8255数据端对接,为82558255CPUZ间的连接图的输入输出提供数据。由于为芯片提供的 都是偶地址,系统默认访问低八位的数据 线。具体连线图见右图:蚤釜_0RS4M14 f - q A juqmm通过CPU与8255的读写控制线对接,有效的控制接口芯片的输入输出状态, 第11和12根地址线再加上2-4译码器的的Y0脚接8255片选,为8255的A,SmotwDlGATEC-D2CLKf%1111vcc6954二D5 8253 蟲;

10、csL3D-1b-IY11£<3ED22KDWROVT2 AOGATE!AlCLK2 弋way1rD2191&D330132.2 8253与周边电路的连接关系在系统中定时/计数芯片8253主要与CPU及中断扩展芯片8259之间存在着连接nl心©化济;77卅加弓关系。同8255, 8253的读写控制线与CPU 的读写控制线对接,正确控制 CPU寸8253 的读写控制(本次设计只用到了 CPU往 8253 中写入数据,没用到读出状态的功能),第2 和3位数据/地址复用线加上译码器的 Y1端 为8253的定时器0, 1, 2及控制口确定了 可靠的地址(仅用到T0及控

11、制地址),CPU氐八位数据线为控制8253提供数据。通过CLK0端引入时钟发生器所产生的标准时钟 (本设计采用10KHZ的外部时钟),将OUT0 接至8259的IR0引脚上,作为中断源。具体电路如上示:2.3 8259与周边电路连接关系为了对8259进行合理分配奇、偶地址,从 CPU引入了第A13作为地址线,再加 上译码器的丫2端作为片选信号,8259获得了两个可靠的地址。同8255与8253相似 8086同样靠低八位的数据线,与8259进行数据交换。IR0为8253的计数输出端,8259通过检测IR 一组引脚的输入情况,经过中断判优以后,对当前优先级最高的中断进 行响应,同时向CPL发送IN

12、TR信号请求中断,在可屏蔽中断允许的情况下 CPU寸其 进行响应,返回INTA非的信号,8259此时发出当中断的中断类型号给 8086。程序跳 到中断子程序的入口地址处去执行中断操作。具体电路连线如右图所示:2.4液晶显示模块与8255之间的连线关系液晶显示模块1602的数据线接在8255的A 口上,通过对A 口进行读写操作,为 显示模块提供控制指令及显示数据。8255的PC0和 PC1分别接1602的RS (指令/数 据控制脚)和EN (使能脚)上,控制指令/数据的输入。2.5地址译码器与按键在本次设计中,由于有多片芯片要进行地址编码,使用了一片2-4译码器74LS139 进行译码,使地址编

13、码更加的方便。使用的CPU地址端口为第9和10号地址线,输出的 Y0, Y1, Y2分别接 8255,8253,8259。由于设计要求,在本设计中进行了按键设计,其电路简单,当K未按下时输出为高电平,当K按下时输入给8255PB0口一个低电平,系统通过检测这一引脚是否为低 电平来判断系统是否开始从当刖时间开始计时具体设计电路图见2.6总体硬件电路图。2.6系统总体硬件电路图基于8Q86的电子钟设计总体电路百:总 JHW / F Jv . - J - i 5 J- a- 3 J 譚 r M r - rlt h fa fa L - I - =*i =!*="- AXAZAZAZAXAIA

14、IAI益心心心心心AfiLLfirJiAAAA - J aj J-rrsmo s JH3HX工3L3.3.9528第三早系统软件设计3.1编址及控制字的确定3.1.1 编址按照第二章硬件设计电路中,CPU寸8253, 8255, 8259进行的地址分配地址(仅为在编程过程过要使用的地址进行编制),本设计所用编址无用位均置 0;8253 定时器0的地址:0200H;控制口: 020CH8255 A 口地址:0; B 口地址:0800H C 口地址:1000H;控制口: 1800H8259 奇地址:2400H3.1.2 控制字根据系统的需要,合理选择各芯片的工作方式。8253:选取定时器0,采用先

15、写高八拉后写低八的初值写入方式,工作方式3方波发生器,采取二进制的方式输入初值,从而C得00110110吐36H8255:分别选取A,C 口为输出端口,B 口为输入端口均采用工作方式 0简单的 输入/输出方式,故工作方式控制字为;10000010吐82H;同时要对PC0和 PC1进行 复位和置位操作,其复位/置位控制字分别为:PCO复位/置位控制字为:0/01H; PC1 口的置位/复位控制字:02H/03H8259:本设计中只有一片8259无从片,故无须写入ICW3不需要写ICW4采用上升沿触发的方式可得:ICW仁00010010H= 12H;使用 60H号中断故 ICW2= 60H3.2分

16、块子程序 3.2.1 1602读写操作子程序:写理齐时庠如右图所示,为1602液晶显示的写时 序图:1602的写操作通过不同的时序进行控 制,可分为写指令操作(子程序WRITER COM 和写数据(子程序WRITE DATA。EN写数据的操作时序与之基本类似,只是先拉低指令 /数RS然后拉低EN最体子程序代码如下示:写指令的时序为,先拉低RS小延时(约 0.5ms)后将EN拉低,小延时后拉高电平输 入指令到液晶,然后拉低 据控制信号WRITE_COM PROC FAR1602 写指令子程序PUSHAX;将AX压入堆栈PUSH3X;MODX,1800H;MOAL,1;OUT DX,AL ;将PC

17、(即RSS为高电平 MOAL,2 ;将PC即Eh拉为低电平OUT DX,ALMODX,0 ;从A口输出数据POPAX;OUT DX,ALCALL DELAY短暂延时MOAL,3 ;将EN拉高让数据写入液晶MODX,1800H;OUT DX,AL CALL DELAYMOAL,2 ;拉低 EN;OUT DX,ALPOPCX;POPAX;RETWRITE_COM ENDPWRITE_DATA PROC FARI602 写数据子程序PUSHAX;将AX压入堆栈PUSH3X;MODX,1800H;MOAL,0 ;OUT DX,AL ;将PC®卩RSS为低电平MOAL,2 ;将PCHPEh拉为

18、低电平OUT DX,ALMODX,0 ;从A口输出数据POPAX;OUT DX,AL CALL DELAY 短暂延时MOAL,3 ;将EN拉高让数据写入液晶MODX,1800H;OUT DX,ALCALL DELAYMOAL,2 ;拉低 EN;OUT DX,ALPOPCX;POPAX;RETWRITE_DATA ENDP3.2.2中断子程序中断子程序的设计流程图如右示, 进入中断后先保 护现场(将寄存器CX AX DX及标志寄存器中的内容 压入堆栈中),然后恢复中断现场(分别将秒时分计数 寄存器BX, SI,DI的数值进行恢复继续计数)然后进 行时钟的操作,最后要保护中断现场,即将时分计数寄存

19、器BX SI, DI的当前数值进行压栈操作进行保护方便下一次的计数,接着要进行现场的恢复(对寄存器 CX AX, DX及标志寄存器进行弹栈操作,并进行开启中断方 便下一次中断的到来)。具体子程序设计如下:TIMER PROC FARPUSFCX;保护现场PUSHAX;PUSHDX;PUSHFPOPBX;恢复秒计数寄存器POPSI ;恢复分计数寄存器POPDI ;恢复时计数寄存器INC BX;秒加一操作MOAL,8OH+4OH+OAH写指令给1602进行输出定位CALL WRITE_COMMOVX,BX;AAD BCD?调整指令MOVCX,10;DIV CX; AX 除以10得当前秒的十位和个位

20、CALL WRITE_DATA写入秒十位MOAL,AH;CALL WRITE_DATA写 入秒个位CMABX,60;比较是否到了 60JNZ EXIT; 不是60跳到EXIT的位置MONBX, 0;秒清 0INC SI ;分加 1MOAL,80H+40H+08H;写指令给1602进行输出定位CALL WRITE_COMMOAX,SI ;AAD BCD?调整指令MOVCX,10;DIV CX; AX除以10得当前分的十位和个位CALL WRITE_DATA写入分的十位MOAL,AH;CALL WRITE_DAT写入分的个位CMPSI,60 ;检测分是否到60JNZ EXIT;不是60跳转到EXI

21、T处MOSI , 0;分清 0INC DI ;时加 1MOAL,80H+40H+05H;写指令给1602进行输出定位CALL WRITE_COMMOVXQI ;AADBCD?调整指令MOVCX,10;DIV CX; AX除以10得当前时的十位和个位CALL WRITE_DAT写入时的十位 MOAL,AH;CALL WRITE_DAT写入时的个位 CMADI,24 ;检测时是否为24 JNZ EXIT;跳到公共点EXITMOSI , 0;时清零EXIT: PUSHDI ;保护中断现场PUSHSI ;PUSH3X;POFDX;恢复现场POPAX;POPCX;STI ;开启中断IRET;中断返回TI

22、MER ENDP3.3主程序设计主程序的主要功能是:1. 完成各主要芯片的初始化;2. 完成液晶显示模块的初始化;3. 检测开关按键是否按下;等待中断4. 实时检测有无可屏蔽中断其主要流程如右图所示:具体设计代码如下:STARTMOVXQATASMOV)S,AXMOAL,82H;8255 初始化MODX,1800HOUT DX,ALMOAL,36H ;8253 初始化MODX,020CHOUT DX,ALMOAL,27H;MODX,0200HOUT DX,ALMOAL,10H;OUT DX,ALMOAL,12H ;8259 初始化 MODX,0204H;OUT DX,ALMOAL,60H;OU

23、T DX,AL,本设计采用DO功能调用MOAL,60H ;将TIMER寸应的60号中断写入中断向量表 法写入MOAH,25H;MOVCX,SEGTIMERMODS,CXMODX,OFFSETIMERINT 21H;MOAL,38H ;设置 1602为 16*2 行 5*7 点阵CALL WRITE_COMMOAL,0BH;开显示,不显示光标,光标不闪烁CALL WRITE_COMMOAL,06H;指针自动加一,整屏不移动CALL WRITE_COMMOAL,1 ;清屏指令CALL WRITE_COMMOAL,80H+40H+05H在1602的第二行第5个位置写入数据,正好在1602的正中位 置

24、CALL WRITE_COMMOVCX,8;MOV5I, -1;AA1:INC SI ;将BUI里边的内容写入1602,其初始化完成MOAL,BUFSI;CALL WRITE_DATALOOP AA;1MOBX,0 ;MOSI,0 ;MODI,0 ;AA2:MODX,0800H;检测按键K是否按下IN AL,DX;TEST AL,1;JNZ AA2;不为0表明K未按下跳转STI;开中断JMP $;等待中断总结经过一周的微机原理及应用课程设计, 深化了我对微机原理及其接口技术的理解 与认识。在接到课到课题以后我先对设计的要求进行了分析,通过方案的比校最终确 定了所要使用的芯片,然后开始利用 PR

25、OTE99进行硬件设计,在硬件设计完成后开 始着手程序的设计,并成功运行原代码的书写,最后完成了文档的制作。在这一周的实习时间内让我受益良多, 不仅让我平时所学的内容在本次设计中得 到了应用,也让我更熟悉了各主要芯片的工作方式,同时通过文档的制作也让我在文 档的制作上有了一定的进步,这将为我以后的毕业设计和以后的工作奠定良好的基 础。在此首先要感谢我的课程设计指导老师王南兰老师,她在设计之前对设计的要求 与实现方式进行了详细的说明,为我的设计方案提供了思路;也为我们的文档设计提 供了模板,让我在文档制作时更具有方向性和标准性。其次要感谢的是我的微机原理 及接口技术的任课老师张晓虎老师, 他在这

26、一学期内教会了我程序设计的方法及对各 主要芯片应用与控制,也教会了我一个完整的去做一个课题设计的步骤。再次向两位 老师表示衷心的感谢!但是,这次的实习唯一感到遗憾的是,由于实验器材的限制,也无法做出直观可 见的仿真结果,所以这次的设计仅是基于理想化的设计。附录:源程序代码:DATASSEGMENTBUF DB'00:00:00', '$'此处输入数据段代码DATASENDSSTACKSSEGMENT;此处输入堆栈段代码STACKSENDSCODE空EGMENTASSUMCS:CODES,DS:DATAS,SS:STACKSSTARTMOVXQATASMODS,A

27、XMOAL,82H;8255 初始化MODX,1800HOUT DX,ALMOAL,36H ;8253 初始化MODX,020CHOUT DX,ALMOAL,27H;MODX,0200HOUT DX,ALMOAL,10H;OUT DX,ALMOAL,12H ;8259 初始化MODX,0204H;OUT DX,ALMOAL,60H;OUT DX,ALMOAL,60H ;将TIMER寸应的60号中断写入中断向量表,本设计采用DO功能调用 法写入MOAH,25H;MOVCX,SEGTIMERMODS,CXMODX,OFFSETIMER;INT 21H;MOAL,38H;设置 1602为 16*2

28、行 5*7 点阵CALL WRITE_COMMOAL,0BH;开显示,不显示光标,光标不闪烁CALL WRITE_COMMOAL,06H;指针自动加一,整屏不移动CALL WRITE_COMMOAL,1 ;清屏指令CALL WRITE_COMMOAL,80H+40H+05H在1602的第二行第5个位置写入数据,正好在1602的正中位 置CALL WRITE_COMMOVCX,8;MOSI, -1;AA1:INC SI ;将BUI里边的内容写入1602,其初始化完成MOAL,BUFSI;CALL WRITE_DATALOOP AA1MOBX,0 ;MOSI,0 ;MODI,0 ;AA2:MODX

29、,0800H;检测按键K是否按下IN AL,DX;TEST AL,1;JNZ AA2;不为0表明K未按下跳转STI;开中断JMP $ ;等待中断DELAY PROC FARPUSFCX;AA3:MOVCX,50LOOP AA3 POPCX;RETDELAY ENDPWRITE_COM PROC FAR1602 写指令子程序 PUSHAX;将AX压入堆栈PUSFCX;MOVDX,1800H;MOAL,1;OUT DX,AL ;将PC(即RSS为高电平MOAL,2 ;将PC即ENK为低电平 OUT DX,ALMOVDX,0 ;从A口输出数据POPAX;OUT DX,ALCALL DELAY短暂延时MOAL,3 ;将EN拉高让数据写入液晶 MOVDX,1800H;OUT DX,ALCALL DELAYMOAL,2 ;拉低 EN;OUT DX,ALPOPCX;POPAX;RETWRITE_COM ENDPWRITE_DATA PROC FARI602 写指令子程序 PUSHAX;将AX压入堆栈PUSH3X;MOVDX,1800H;MOVAL,0 ;OUT DX,AL ;将PCd卩RSS为低电平MOVAL,2 ;将PC即Eh拉为低

温馨提示

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

评论

0/150

提交评论