8086数字电子钟的设计 附程序代码
8086汇编语言程序设计——第一个程序
8086汇编语⾔程序设计——第⼀个程序本系列以80X86系列微型计算机为基础,以MASM5.0为汇编上机实验环境,重点介绍Intel8086指令系统。
Intel8086指令系统中有100多条指令,利⽤这些指令可以编写出复杂的程序实现更多功能。
汇编语⾔是直接控制计算机硬件⼯作的最简便的语⾔。
学习了汇编语⾔可具有在CPU寄存器级上进⾏控制和操作的能⼒,可获得直接对计算机硬件底层编程的经验。
⼀个计算的例⼦例 *编写⼀个汇编语⾔程序,实现下列公式计算。
假设X=4,Y=5汇编指令如下:如果在DEBUG下⽤A命令输⼊这些指令,必须把X、Y换成具体的数值;Z、Z1是存储单元地址,最后两条指令可写为MOV [0],AL和MOV [1],AH,这样才能⽤T命令执⾏。
D:\dos〉DEBUG-AMOV AL,4ADD AL,5MOV BL,8IMUL BLMOV BL,4MOV BH,0SUB AX,BXMOV BL,2IDIV BLMOV [0],ALMOV [1],AH采⽤DEBUG的A命令输⼊程序的做法明显不⽅便,⼀是⽆法给出变量名即符号地址,⼆是调试修改程序不便。
1. 编写⼀个完整的汇编语⾔源程序需要增加段定义伪指令和定义数据存储单元伪指令等必须有的伪指令。
伪指令与C语⾔等⾼级语⾔中的说明性语句的含义类似,起到说明作⽤。
⽤记事本gedit或者vi编写,保存到dos⽬录下注释符号为;号2. 汇编、链接、执⾏汇编语⾔源程序既可以⽤⼤写字母也可以⽤⼩写字母书写。
汇编语⾔程序建⽴及汇编过程如图所⽰。
⽤户编写的源程序要经汇编程序MASM汇编(翻译)后⽣成⼆进制⽬标程序,⽂件名默认与源程序同名、扩展名为.OBJ;再经过LINK连接⽣成可执⾏程序,⽂件名默认与源程序同名、扩展名为.EXE。
注意:源程序⼀定要和MASM和LINK⽂件放在同⼀个⽂件夹中。
执⾏MASM和LINK命令时需要按多次回车。
3. 在DEBUG下执⾏程序MOV AH,4C指令对应的偏移地址是0023,这就是断点(所谓断点,就是程序执⾏到该处停下来不再继续)。
数电实验数字钟的设计代码
数电实验数字钟的设计代码数字钟是一种常见的电子设备,用于显示当前时间。
它是基于数字电路技术设计的,可以实时地显示时、分、秒的数字。
在这篇文章中,我将为大家介绍数字钟的设计代码,以及它的原理和实现过程。
在开始设计数字钟之前,我们需要准备一些基础材料和器件。
首先,我们需要一块数字时钟显示屏,它可以显示四位数的时、分、秒。
其次,我们需要几个集成电路芯片,包括时钟发生器、计数器、解码器等。
另外,还需要一些细小的电子元件,如电阻、电容、晶体管等。
准备好这些材料后,我们就可以开始设计数字钟的电路了。
首先,我们先来了解一下数字钟的原理。
数字钟的核心部分就是计数器。
计数器可以根据时钟发生器提供的脉冲信号进行计数,当计数到一定值时,就会触发一次计数事件。
我们可以将计数事件与显示屏相连,通过解码器将计数的结果转化成数字信号,进而在显示屏上以数码形式显示出来。
通过不断循环计数,我们就可以实现数字钟的功能了。
接下来,我们将详细介绍数字钟的设计代码。
首先,我们需要定义一些常量和变量。
常量包括时钟频率、计数器的初始值等,而变量则用来保存时、分、秒的数值。
接着,我们需要编写时钟发生器的代码,它可以产生一个固定频率的脉冲信号。
然后,我们需要编写计数器的代码,它会根据时钟发生器的脉冲信号进行计数,并触发计数事件。
最后,我们需要编写解码器的代码,它可以将计数的结果转化成数字信号,供显示屏显示。
在编写完代码后,我们需要将它们烧录到集成电路芯片中。
然后,将电路连接起来,将显示屏与解码器相连。
确保所有电子元件的接触良好,然后通电测试。
如果一切正常,数字钟就会开始工作,并在显示屏上显示出当前的时、分、秒。
在这个实验中,我们学习到了数字电路设计的基本原理和实现过程。
数字钟作为一个常见的例子,展示了数字电路的实际应用。
通过这个实验,我们不仅提高了自己的动手实践能力,还加深了对数字电路的理解。
相信通过这次实验,我们对数字钟的设计代码有了更深入的了解,也能够在今后的实践中运用这些知识。
8086数字时钟课程设计报告
INTEL 8086/8088系列微型计算机原理及接口技术课程名称:微型计算机原理及接口技课程设计设计题目:具有年月日时分秒功能的时钟显示院系:电气工程学院班级:设计者:学号:同组者:指导教师:设计时间:目录一、设计内容与要求 (2)二、设计思路 (3)三、流程图 (4)四、程序 (7)五、运行结果 (12)六、硬件设计…………………………………………………………………………………………………七、调试步骤 (13)八、心得体会 (14)九、参考文献 (14)一、设计内容与要求:用汇编语言编写一个时钟程序,在微机屏幕上显示当前时间****年**月**日**时**分**秒。
在程序启动后,微机屏幕上显示当前时间,按下a键开始计时,按下b键停止计时,按下c键退出程序。
二、设计思路:利用BIOS的INT 1AH的2号系统功能调用,将计算机系统的时间参数(BCD 码)送入寄存器。
其中CH 和CL中保存的是小时数和分钟数;DH中保存的是秒钟数。
利用除法命令DIV,若进行字节操作,16位被除数隐含在AX中,8位除数就是源操作数,结果的8位商在AL中,8位余数在AH中,即(AL)(AH)/(SRC)的商(AL)(AH)/(SRC)的余数若进行字操作,32位被除数低16位隐含在AX中,高16位8位隐含在DX中,16位除数就是源操作数,结果的16位商在AX中,16位余数在DX中,即(AX)(DX,AX)/(SRC)的商(DX)(DX,AX)/(SRC)的余数通过以上方法将二进制表示的年月日时分秒转换为BCD码,再将BCD码表示的时,分,秒转换成AS CⅡ码并送入屏幕显示。
能调用子程序,若显示时间与当前时间不符,则校准显示时间,并用INT 21H 的7号功能调用判断输入回车并清屏。
若输入字符C,则令SIGN=3,即退出程序,若无输入或输入字符不是C,则反复从系统中取出当前时间并显示。
详细过程见程序注释。
三、流程图:四、程序:GB MACRO X ;宏定义MOV AX,0200HMOV BX,0000HMOV CX,0000HMOV DX,XINT 10HENDMXIANSHI MACRO Y,Z,WMOV BP,OFFSET YMOV AH,13HMOV AL,0BMOV BX,0EHMOV CX,ZMOV DX,WINT 10HENDMDATA SEGMENTBUFFER1 DB 11 DUP (?)BUFFER2 DB 9 DUP (?)SECOND DB ?SIGN DB ?STR1 DB 'THE CURRENT TIME: $'STR4 DB 'PRESS C TO EXIT:$'DATA ENDSSTACK SEGMENT STACK 'STACK'DB 100 DUP ('S')STACK ENDSCODE SEGMENT PARA 'CODE'ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA STA PROC FARPUSH DSXOR AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV ES,AXMOV AX,0600HMOV BX,0754HMOV CX,0000HMOV DX,194FHINT 10HXIANSHI STR1,17,0416H ;显示‘ THE CURRENT TIME:’XIANSHI STR4,16,1016H ;显示‘ PRESS C TO EXIT:’BEGIN: CMP SIGN,3 ;若输入字符C,则令SIGN=3,即退出程序,若无输入或输入字符不是C,则反复从系统中取出当前时间并显示JE TUI1MOV AH,2AHINT 21H ;取日期LEA BX,BUFFER1PUSH DX ;保护寄存器MOV AX,CX ;利用除法产生商和余数,把以二进制形式保存的年号转换为BCD码MOV DX,0000H ;年号除以1000得到商即为年号的千位MOV CX,1000DIV CXOR AL,30H ;年号的千位转换为其ASCII码并存入BUFFER1第1存储单元中MOV [BX],ALMOV AX,DX ;年号的百位转换为其ASCII码并存入BUFFER1第2存储单元中MOV CL,64HDIV CLOR AL,30HINC BXMOV [BX],ALMOV AL,AHMOV AH,00H ;年号的十位转换为其ASCII码并存入BUFFER1第3存储单元中MOV CL,10DIV CLOR AL,30HINC BXMOV [BX],ALOR AH,30H ;年号的千位转换为其ASCII码并存入BUFFER1第4存储单元中INC BXMOV [BX],AHPOP DX ;年号转换完毕INC BXMOV CL,2DH ;“—”号的ASCII码存入BUFFER1第5存储单元中MOV [BX],CL ;月数除以10得到商即为月数的十位MOV AL,DH ;月数的十位转换为其ASCII码并存入BUFFER1第6存储单元中CMP AL,10JAE L1JMP L2L1: ADD AL,6L2: PUSH AXAND AL,0F0HSHR AL,1SHR AL,1SHR AL,1SHR AL,1OR AL,30HINC BXMOV [BX],ALPOP AXAND AL,0FHOR AL,30HINC BXMOV [BX],AL ;月数的十位转换为其ASCII码并存入BUFFER1第7存储单元中INC BX ;月数转换完毕MOV CL,2DH ;“—”号的ASCII码存入BUFFER1第8存储单元中 MOV [BX],CL ;日期除以10得到商即为日期的十位MOV AL,DL ;日期的十位转换为其ASCII码并存入BUFFER1第9存储单元中MOV AH,00HMOV CL,10DIV CLOR AL,30HINC BXMOV [BX],AL ;日期的个位转换为其ASCII码并存入BUFFER1第10存储单元中OR AH,30HINC BX ;年月日转换完毕MOV [BX],AHMOV CL,'$' ;“$”号的ASCII码存入BUFFER1第11存储单元中 INC BXJMP NEXTTUI1:JMP TUI2NEXT:MOV [BX],CLXIANSHI BUFFER1,10,0616H ;用9号功能显示年月日MOV AH,2CHINT 21H ;取时间LEA BX,BUFFER2MOV AL,CH ;小时数除以10得到商即为小时数的十位MOV AH,00HMOV CH,10DIV CHOR AL,30H ;小时数的十位转换为其ASCII码并存入BUFFER2第1存储单元中MOV [BX],ALOR AH,30H ;小时数的个位转换为其ASCII码并存入BUFFER2第2存储单元中INC BXMOV [BX],AHINC BXMOV CH,3AH ;“:”号的ASCII码存入BUFFER2第3存储单元中 MOV [BX],CH ;分钟数除以10得到商即为分钟数的十位MOV AL,CLMOV AH,00HMOV CL,10DIV CLOR AL,30H ;分钟数的十位转换为其ASCII码并存入BUFFER2第4存储单元中INC BXMOV [BX],AL ;分钟数的个位转换为其ASCII码并存入BUFFER2第5存储单元中OR AH,30HINC BXMOV [BX],AHINC BXMOV CL,3AH ;“:”号的ASCII码存入BUFFER2第6存储单元中 MOV [BX],CLMOV AL,DH ;秒数除以10得到商即为秒数的十位MOV AH,00HMOV CL,10DIV CLOR AL,30H ;秒数的十位转换为其ASCII码并存入BUFFER2第7存储单元中INC BXMOV [BX],ALOR AH,30H ;秒数的个位转换为其ASCII码并存入BUFFER2第8存储单元中INC BXMOV [BX],AHINC BX ;时分秒转换完毕MOV CL,'$' ;“$”号的ASCII码存入BUFFER2第9存储单元中 MOV [BX],CLXIANSHI BUFFER2,8,0716H ;用9号功能显示时分秒CALL DELY ;调用子程序,若显示时间与当前时间不符,则校准显示时间JMP BEGINTUI2: RETSTA ENDPDELY PROCPUSH CXPUSH DXMOV AH,2CHINT 21HMOV SECOND,DHRE: MOV AH,2CHINT 21HPUSH DXMOV AH,6MOV DL,0FFHINT 21HPOP DXCMP AL,63H ;若输入字符C,则令SIGN=3,即退出程序,若无输入或输入字符不是C,则反复从系统中取出当前时间并显示JE Z3JMP CONTINZ3: MOV SIGN,3CONTIN: CMP SECOND,DHJE RECMP SIGN,1JMP EXITEXIT: POP DXPOP CXRETDELY ENDPCODE ENDSEND STA五、运行结果:程序运行后如下图所示:按下c键,则会出现下图界面:(此时按下任意键即可退出该程序)(注意,若没按下任何键或按下的不是c键,则不会出现下图所示界面)六、硬件设计:1、硬件设计说明:由8284产生系统脉冲送8253的CLK1,通过CPU置计数初值使计数器2输出1KHZ方波。
(完整版)8086汇编经典例程,推荐文档
sub bl,26 mov al,'a' add al,bl
MOV CX,00H WAIT1: LOOP WAIT1
;延时计数器 ;延时
DW 2 DUP (25*8,25*8,50*8) DW 12 DUP (25*8),100*8
jmp next40
DEC DX
next24: sub bl,52
==========================================
MAIN ENDP
MOV AX,[SI]
5. 编写一个数组排序(从小到大)的小程序,数组在程
序中定义,程序先将原数组显示一遍,然后排序,再
DISP PROC
将排好序的数组显示一遍。
PUSH SI
==========================================
MUS_TIME2 DW 3 DUP(50),25,25,50,25,25,100 DW 2 DUP(50,50,25,25),100 DW 3 DUP(50,25,25),100
crlf proc push ax push dx
音演奏歌曲 ========================================== ;这是一个音乐程序,按大写字母“A”,唱乐曲“玛丽
ccc segment assume cs:ccc,ds:qqq
main proc far start: mov ax,qqq
mov ds,ax
next3:
jmp next10 cmp al,'a' jnae next4 cmp al,'z' ja next4 sub al,'a'
电子时钟工具的程序设计及代码示例
电子时钟工具的程序设计及代码示例为满足现代生活的需求,电子时钟成为人们生活中的常见工具。
除了具备实时显示时间的功能外,电子时钟还可以根据用户需求进行各种定制,如显示日期、倒计时、闹钟等功能。
本文将探讨电子时钟的程序设计方法,并提供一个简单的代码示例。
一、程序设计方法在进行电子时钟的程序设计前,我们需要确定以下几个关键因素:1. 使用的编程语言:根据实际情况选择合适的编程语言,如C++、Java、Python等。
2. GUI框架:确定使用什么图形界面框架,如Qt、Tkinter等。
3. 实时更新:确定时间的实时更新方式,可以利用计时器、循环等方式进行时间更新。
4. 用户交互:考虑用户是否需要与电子时钟进行交互,如设置闹钟、选择日期等。
二、代码示例以下是一个基于Python和Tkinter的电子时钟代码示例,代码注释中详细说明了每个函数的功能和实现方法:```pythonimport tkinter as tkfrom datetime import datetimedef update_time():# 获取当前时间current_time = datetime.now().strftime("%H:%M:%S")# 更新时间标签time_label.config(text=current_time)# 每隔1秒更新一次时间time_label.after(1000, update_time)# 创建窗口window = ()window.title("电子时钟")# 创建时间标签time_label = bel(window, font=("Arial", 100), bg="white") time_label.pack(pady=50)# 更新时间update_time()# 运行窗口主循环window.mainloop()```以上代码创建了一个简单的窗口,使用标签实时显示当前时间。
基于8086的电子时钟设计(彩色图版)
目录错误!未找到引用源。
摘要 (1)Abstract (1)第一章电子钟设计总体方案设计 (2)1.1 设计目的 (2)1.2 设计要求 (2)1.3 方案比较 (2)1.3.1 非中断方式与中断方式的比较 (2)1.3.2 LED显示与液晶显的比较 (3)1.4 总体方案设计思路 (3)第二章系统硬件设计 (4)2.1 8255与CPU之间的连接关系 (4)2.2 8253与周边电路的连接关系 (4)2.3 8259与周边电路连接关系 (5)2.4 液晶显示模块与8255之间的连线关系 (5)2.5 地址译码器与按键 (6)2.6 系统总体硬件电路图 (6)第三章系统软件设计 (7)3.1 编址及控制字的确定 (7)3.1.1 编址 (7)3.1.2 控制字 (7)3.2 分块子程序 (7)3.2.1 1602读写操作子程序 (7)3.2.2中断子程序 (9)3.3 主程序设计 (11)总结与致谢: (13)参考文献: (14)附录: (15)摘要本设计以微机原理与接口技术为基础,以8086CPU为核心,利用INTER 8253可编程定时/计数器,通过引入时钟发生器产生标准时钟进行精准定时;经定时器产生中断源,采用可编程中断控制器8259A进行中断扩展,用可屏蔽中断方式进行时间的采集;以可编程并行I/O接口芯片8255A扩展接口,驱动MSC1602液晶模块进行时间显示。
关键词:微机原理;接口技术;8086CPU;可屏蔽中断;MSC1602液晶;可编程;INTER 8253定时/计数器;中断控制器8259A;并行I/O接口芯片8255AAbstractThis design take the microcomputer principle and the connection technology as a foundation, by the 8086CPU core, uses the INTER 8253 programmable fixed time/counters, produces the standard clock through the introduction clock generator to carry on fine fixed time; Produces the interrupt source after the timer, uses programmable interrupt controller 8259A to carry on the interrupt to expand, sends the maskable interrupt way to carry on the counting; By programmable parallel I/O the connection chip 8255A expansion connection, actuates the MSC1602 liquid crystal module to carry on the time demonstration.Key word: Microcomputer principle; Connection technology; 8086CPU; Maskable interrupt; MSC1602 liquid crystal; Programmable; INTER 8253 fixed time/counters; Interrupt controller 8259A; Parallel I/O connection chip 8255A第一章电子钟设计总体方案设计1.1 设计目的电子钟是一种基于微电子技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,因此得到了广泛的使用。
数字时钟代码
数字时钟代码1. 介绍数字时钟是一种常见的显示时间的装置,它通过数字显示屏显示当前的小时和分钟。
本文档将介绍如何编写一个简单的数字时钟代码。
2. 代码实现以下是一个基本的数字时钟代码实现示例:import timewhile True:current_time = time.localtime()hour = str(current_time.tm_hour).zfill(2)minute = str(current_time.tm_min).zfill(2)second = str(current_time.tm_sec).zfill(2)clock_display = f"{hour}:{minute}:{second}"print(clock_display, end="\r")time.sleep(1)代码说明:- `time.localtime()` 函数返回当前时间的结构化对象,包括小时、分钟和秒等信息。
- `str(current_time.tm_hour).zfill(2)` 将小时转换为字符串,并使用 `zfill()` 方法填充到两位数。
- `str(current_time.tm_min).zfill(2)` 和`str(current_time.tm_sec).zfill(2)` 同理处理分钟和秒。
- 使用 f-string 格式化字符串 `clock_display`,将小时、分钟和秒显示为 `` 的形式。
- `print(clock_display, end="\r")` 使用 `\r` 实现覆盖打印,使得时钟在同一行连续显示。
- `time.sleep(1)` 让程序每隔一秒更新一次时间。
请注意,上述代码需要在支持 Python 的环境中运行。
3. 结束语通过以上的代码实现,我们可以编写一个简单的数字时钟。
基于8086的电子时钟设计
基于8086的电子时钟设计概述:电子时钟是一种利用电子技术实现时间显示的装置。
本文将介绍基于8086微处理器的电子时钟的设计方案,包括硬件设计和汇编语言编程。
1.硬件设计:(1)8086微处理器:选择适合的8086微处理器芯片,并进行相应的引脚连接。
8086微处理器是16位的,具有高性能和大容量寻址能力。
(2)时钟电路:设计一个稳定的时钟电路,可以使用定时器或石英晶体振荡器,通过一个合适的预分频器产生高频时钟信号。
(3)显示器件:选择合适的显示器件,如LED数码管或液晶显示屏。
这些显示器件需要提供合适的接口电路,以便与8086微处理器进行通信。
(4)键盘电路:设计一个键盘电路,用于设置和调整时钟的时间。
键盘电路需要提供合适的接口电路,以便与8086微处理器进行通信。
2.汇编语言编程:使用汇编语言编程,可以通过对8086微处理器内部的寄存器和存储器进行操作,实现电子时钟的功能。
(1)初始化:在程序开始时,对相关的寄存器和存储器进行初始化,包括时钟计数器、时分秒寄存器、显示器接口等。
(2)时钟计数器:利用定时器或石英晶体振荡器产生的高频信号,通过适当的预分频器产生时钟计数器的时钟信号。
在程序中对时钟计数器进行相应的设置和控制,实现时钟的精确计时。
(3)时分秒寄存器:通过键盘电路输入时、分和秒的数值,将其存储到相应的寄存器中。
通过程序控制这些寄存器,实现时钟数值的更新和显示。
(4)显示器接口:利用合适的接口电路,将8086微处理器输出的数码信号转换为相应的显示信号,显示在数码管或液晶显示屏上。
通过程序控制接口电路,实现时钟数值的实时显示。
3.功能实现:(1)时间设置:通过键盘电路,输入时、分和秒的数值,将其存储到寄存器中,实现时间的设置。
(2)时间显示:通过程序控制,将寄存器中存储的时、分和秒的数值显示在数码管或液晶显示屏上,实现时间的实时显示。
(3)闹钟功能:通过键盘电路设置闹钟的时间,通过程序判断当前时间和闹钟的时间是否相等,如果相等,则触发相应的闹钟响铃。
8086数字电子钟的设计 附程序代码
附件3课程设计(综合实验)报告( 2011 -- 2012 年度第 1 学期)名称:硬件课程与实践题目:8086数字电子钟的设计院系:班级:学号:学生姓名:指导教师:设计周数:2周成绩:日期:2011年09月01日一、课程设计的目的与要求1. 综合运用学过的相关软、硬件知识,利用伟福LAB6000实验设备,设计具有实用功能的电子钟,实现电子时钟的准确运行、校时等功能。
2.熟悉伟福LAB6000的功能,掌握数码管设计和键盘设计的要领及相关技术,能够利用实验设备实现电子钟系统的设计。
3.提高自己的硬件设计分析能力,同时培养软硬结合的系统设计思维,从而提高设计系统的可行性和准确性。
二、课程设计正文A.设计题目:8086数字电子钟的设计:1.设计并完成LED七段数码管数字钟电路。
2.数字钟显示格式为:HH:MM:SS。
3.具有通过键盘能够调整时、分、秒及设置闹铃的功能。
4.具有暂停时间及复位功能。
B.设计方案本设计采用LAB6000伟福仿真实验箱,利用4MHz脉冲信号源和多级分频电路产生脉冲信号,4MHz脉冲信号经过F/64分频后得到62.5KHz脉冲信号,将脉冲信号传递给8253定时器,定时器每0.000016秒中断一次,在中断服务程序中对中断次数进行计数,0.000016秒计数62500次就是1秒,然后在中断服务程序中对秒计数得到分和小时值并判断闹铃是否到时。
编写键盘扫描和LED显示程序完成设置时间、定闹铃及数码管显示功能。
C.硬件原理1.七段数码管显示和键盘扫描显示图1.1七段数码管图1.2伟福实验台六位LED的电路图及寻址空间实验箱提供了6位八段数码LED显示电路,只要按地址输出相应数据,就可以实现对显示器的控制。
将KEY/LED CS接到CS0上,则实验箱中八位段码输出地址为08004H,位码输出地址为08002H。
实验箱提供了一个6×4的小键盘,将KEY/LED CS信号接到CS0上,则列扫描地址为08002H,行码地址为08001H。
8086数字时钟课程设计报告
8086数字时钟课程设计报告INTEL 8086/8088系列微型计算机原理及接⼝技术课程名称:微型计算机原理及接⼝技课程设计设计题⽬:具有年⽉⽇时分秒功能的时钟显⽰院系:电⽓⼯程学院班级:2007级5班设计者:⽩艳学号:20071901002同组者:夏红燕指导教师:刘志珍设计时间:2009.12.28——2010.01.3⽬录⼀、设计内容与要求 (2)⼆、设计思路 (3)三、流程图 (4)四、程序 (7)五、运⾏结果 (12)六、硬件设计…………………………………………………………………………………………………七、调试步骤 (13)⼋、⼼得体会 (14)九、参考⽂献 (14)⼀、设计内容与要求:⽤汇编语⾔编写⼀个时钟程序,在微机屏幕上显⽰当前时间****年**⽉**⽇**时**分**秒。
在程序启动后,微机屏幕上显⽰当前时间,按下a键开始计时,按下b键停⽌计时,按下c键退出程序。
⼆、设计思路:利⽤BIOS的INT 1AH的2号系统功能调⽤,将计算机系统的时间参数(BCD 码)送⼊寄存器。
其中CH 和CL中保存的是⼩时数和分钟数;DH中保存的是秒钟数。
利⽤除法命令DIV,若进⾏字节操作,16位被除数隐含在AX中,8位除数就是源操作数,结果的8位商在AL中,8位余数在AH 中,即(AL)(AH)/(SRC)的商(AL)(AH)/(SRC)的余数若进⾏字操作,32位被除数低16位隐含在AX中,⾼16位8位隐含在DX中,16位除数就是源操作数,结果的16位商在AX中,16位余数在DX中,即(AX)(DX,AX)/(SRC)的商(DX)(DX,AX)/(SRC)的余数通过以上⽅法将⼆进制表⽰的年⽉⽇时分秒转换为BCD码,再将BCD码表⽰的时,分,秒转换成AS CⅡ码并送⼊屏幕显⽰。
能调⽤⼦程序,若显⽰时间与当前时间不符,则校准显⽰时间,并⽤INT 21H 的7号功能调⽤判断输⼊回车并清屏。
若输⼊字符C,则令SIGN=3,即退出程序,若⽆输⼊或输⼊字符不是C,则反复从系统中取出当前时间并显⽰。
汇编语言 8086 电子钟实验
目录一、设计要求 (2)二、设计目的 (2)三、设计的具体实现 (2)四、结论与展望 (7)五、心得体会与建议 (8)六、附录 (8)七、参考文献 (19)电子钟的设计报告一、设计要求设计一个电子时钟,使其具有二十四小时循环记时功能,走时要准。
并且有时钟的对时功能。
二、设计目的熟练掌握TND86/88教学系统的基本操作和调试程序的各种指令熟悉编程及调试程序的方法掌握8259中断控制器的工作原理和应用编程方法,练习编写中断程序的方法掌握8255的各种工作方式及其应用编程掌握8253定时/计数器的工作原理、工作方式及其应用编程练习LED-KEYBOARD UNIT的使用方法和数码管的显示编程方法三、设计的具体实现1·系统概况电子时钟主要由显示模块、对时模块和时钟运算模块三大部分组成。
其中对时模块和时钟运算模块要对时、分、秒的数值进行操作,并且秒计算到60时,要自己清零并向分进1;分计算到60时,要自己清零并向时进1;时计算到24时,要清零。
这样,才能循环记时。
显示时只显示时和分,不显示秒,利用实验箱上的4个数码管来显示当前时间。
前两个显示小时,后两个显示分钟。
时钟的运算是利用中断来实现的,利用8253的模式三输出一定频率的方波作为触发中断的条件。
在中断服务程序中计算时间,并通过8255并行输出到数码管显示。
2·硬件电路设计电子时钟主要由8259A中断控制器、8253定时/计数器、8255A 接口芯片、LED数码显示管和两个按键组成。
主要用8259A的IRQ7的中断服务程序完成秒、分、时的运算即计时功能,IRQ6的中断服务程序完成调时、调分功能。
8253用来产生40ms的脉冲信号作为IRQ7的中断请求信号。
按键KK1+和KK2+分别作为IRQ2和IRQ6的中断请求信号。
按键KK1+启动/关闭对时功能。
它决定是否屏蔽IRQ7和IRQ6中断源。
8255A负责将内存里的时位和分位值输出到数码管。
电子时钟程序代码
#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar code weixuan[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; //位选,控制哪个数码管亮。
(从右到左)ucharcodeduanxuan[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf, 0xff}; //0-9,'-','灭'uchar data timedata[3]={0x00,0x00,0x00}; //时间缓冲区,分别为:秒、时、分。
uchar data datetime[8]={0xc0,0xc0,0xbf,0xc0,0xc0,0xbf,0xc0,0xc0}; //时间缓冲区,初始化显示00-00-00。
uchar tt1,tt2,tt,tt0,num=0;uchar flag,flag1,flag2,flash;sbit key1=P1^3;sbit key2=P1^5;sbit key3=P1^7;//**************延时函数*********************************void delay(uint del){uchar i, j;for(i=0; i<del; i++)for(j=0; j<=148; j++);}//********************调用显示************************void display(){datetime[0]=timedata[0]%10; datetime[1]=timedata[0]/10; //秒datetime[3]=timedata[1]%10; datetime[4]=timedata[1]/10; //分 datetime[6]=timedata[2]%10; datetime[7]=timedata[2]/10; //时 if(!flag){P2=0X80; //秒显示P0=duanxuan[datetime[0]];delay(2);P2=0X40;P0=duanxuan[datetime[1]];delay(2);}else{P2=0X80; //秒显示P0=duanxuan[datetime[0]]|flash;delay(2);P2=0X40;P0=duanxuan[datetime[1]]|flash;delay(2);}P2=0X20; //显示'-'P0=duanxuan[10];delay(2);if(!flag1){P2=0X10; //分显示P0=duanxuan[datetime[3]];delay(2);P2=0X08;P0=duanxuan[datetime[4]];delay(2);}else{P2=0X10; //分显示P0=duanxuan[datetime[3]]|flash;delay(2);P2=0X08;P0=duanxuan[datetime[4]]|flash;delay(2);}P2=0X04; //显示'-' P0=duanxuan[10];delay(2);if(!flag2){P2=0X02; //小时P0=duanxuan[datetime[6]];delay(2);P2=0X01;P0=duanxuan[datetime[7]];delay(2);}else{P2=0X02; //小时P0=duanxuan[datetime[6]]|flash;delay(2);P2=0X01;P0=duanxuan[datetime[7]]|flash;delay(2);}}/******************按键调节时间*****************************/ void keyscan(){if(key1==0){delay(10);if(key1==0){num++;while(!key1);while(1){if(num==1){flag=1;flag1=0;flag2=0;if(key2==0){delay(10);if(key2==0){timedata[0]--;if(timedata[0]==-1)timedata[0]=60;while(!key2);}}if(key3==0){delay(10);if(key3==0){timedata[0]++;if(timedata[0]==60)timedata[0]=0;while(!key3);}}}if(key1==0){delay(10);if(key1==0)num++;while(!key1);}if(num==2){flag=0;flag1=1;flag2=0;if(key2==0){delay(10);if(key2==0){timedata[1]--;if(timedata[1]==-1)timedata[1]=60;while(!key2);}}if(key3==0){delay(10);if(key3==0){timedata[1]++;if(timedata[1]==60)timedata[1]=0;while(!key3);}}if(num==3){flag=0;flag1=0;flag2=1;if(key2==0){delay(10);if(key2==0){timedata[2]--;if(timedata[2]==-1)timedata[2]=24;while(!key2);}}if(key3==0){delay(10);if(key3==0){timedata[2]++;if(timedata[2]==25)timedata[2]=0;while(!key3);}}if(num==4){num=0;flag=0;flag1=0;flag2=0;break;}}}}}//主函数void main(){TMOD=0x01;ET0=1;TR0=1;TH0=0x40;TL0=0x00;EA=1;while(1){keyscan();}}//***************定时器函数*************************** void timer1() interrupt 1{TH0=0x40; //50ms自加一次。
课程设计_8086电子时钟设计资料
计算机原理课程设计报告题目基于8086CPU的电子时钟的设计学院电子信息工程学院专业电气工程及其自动化学生姓名庞长春学号201010316117 年级10级1班指导教师徐嘉莉职称副教授2012 年6月28日摘要《微机接口技术》是一门应用性、综合性、实践性较强的课程,通过有针对性的课程设计,使学生学会系统地综合运用所学的理论知识,提高学生在微机应用方面的开发与设计本领,系统的掌握微机硬软件设计方法。
时钟就是一种对时间进行累计的工具,即计时。
计时的本质就是计数,只不过这里的“数”的单位是时间单位,如果把一小片一小片计时单位累计起来,就可获得一段时间。
因此,使用计数器对时钟脉冲进行计数,就是时钟实现的基本原理;再用LED数码管显示出来,并设计出几个按键用于对时钟进行调整,这样,一个完整的时钟就设计完成了。
关键字:原理、芯片、流程图、程序目录第一章绪论1.1电子时钟背景介绍 (4)1.2电子时钟功能介绍------------------------------------------------ 4 1.3 课程设计的目的及要求 (4)第二章电子时钟的工作原理------------------------------------------------ 52.1实现时钟计时的基本方法------------------------------------------- 52.2电子钟的时间显示------------------------------------------------- 5 2.3电子时钟启、停及时间调整 (5)第三章硬件设计3.1硬件设计电路图--------------------------------------------------- 6 3.1.1 主电路模块 (6)3.1.2 LED显示模块------------------------------------------------ 63.1.3按键模块---------------------------------------------------- 73.2硬件设计所用芯片介绍--------------------------------------------- 73.2.1 8253芯片的内部结构及引脚----------------------------------- 93.2.2 8279芯片的内部结构及引脚---------------------------------- 10 3.2.3 8259芯片的内部结构及引脚 (12)第四章软件设计--------------------------------------------------------- 134.1 电子时钟部分程序流程框图---------------------------------------- 134.1.1主程序流程框图-------------------------------------------- 144.1.2 键扫程序流程框图------------------------------------------ 154.1.3 中断处理程序流程框图-------------------------------------- 16 4.2 电子时钟总体程序 (16)第五章总结与体会------------------------------------------------------- 17参考文献 (18)附录 (19)第1章绪论1.1 电子时钟背景介绍电子钟亦称数显钟(数字显示钟),是一种用数字电路技术实现时、分、秒计时的装置,与机械时钟相比,直观性为其主要显著特点,且因非机械驱动,具有更长的使用寿命,相较石英钟的石英机芯驱动,更具准确性。
微型计算机基于8086cup数字时钟课程设计
微型计算机基于8086cup数字时钟课程设计课程设计任务书专业自动化班级姓名设计起止日期2013.12.16~2013.12.20设计题目:基于8086CPU的数字时钟的设计设计任务(主要技术参数):1、利用实验系统上提供的8253和LED数码显示等电路,设计一个电子时钟;2、格式如下:6个数码由左向右分别显示为:时、分、秒。
指导教师评语:成绩:签字:年月日1 引言随着在现代技术进步,电子产品越来越多的在生活中出现,服务于人们的生活,从简单的电子手表,到人人必备的手机,我们都可以看到电子时钟的身影。
本系统就是基于8086系统,配合8255和8253芯片开发的一个数字电子时钟,有显示时分秒的功能。
2 设计方案论证2.1一秒定时方案的选择运用8253产生周期为2秒的方波,通过8255芯片的A、B、C 口读取电平高低,判断电平变化,进而判断1秒延时是否已经到达,这种方法可以写成子程序,执行返回就近似于1秒延时。
2.2时钟时分秒的处理方式选择时钟的时分秒的处理方法实际上时数学逻辑问题。
在编辑过程中我想到两种解决方案。
方案一:将时分秒当做三个数据进行处理,设置三个数据空间,作为是分秒的数据缓存区,再将缓存区的内容转换成显示数据。
每次延时之后判断“秒”是否应该向“分”进位,“分”是否应该向“时”进位,“时”是否已经超过24.这个过程理论上可以实现,但是逻辑判断较为繁琐。
方案二;将时分秒分成六位,放在显示数据缓存区里,每次一秒延时之后判断是否向高位进一,若还不进一,则跳回最低位,再次进行一秒延时;由于秒和分都是60进制,处理方法一样,而“时”是24进制,应该进行额外处理。
2.3八段数码管动态显示对于8279八段数码管的显示需要入码位和段码,因此采用74LS373作为位码输出端口,8255的A、B、C口作为段码输出口。
通过CPU输出数据进行位码选择,经74LS373输出到位码输入口;设置到六位数据缓存区,经过换码可以取得相应的段码输出到段码输入口,并简单延时,就可以显示了。
8086数字时钟
——微机原理课程设计田昊20071901198同组:孟健****:***目录一设计目标: (3)二设计要求: (3)三硬件设计 (3)3.1系统总框图: (3)3.2模块电路设计 (4)四软件设计 (9)4.1 设计思路: (9)4.2 程序流程图 (9)4.3关键程序设计 (10)五调试过程 (12)六心得体会 (12)七致谢 (12)附件 (13)完整原理图: (13)完整程序 (14)一设计目标:设计以8086为控制核心,基于时钟芯片8253的电子时钟。
系统通过晶振获得时钟信号,由8253进行分频计数产生秒中断,通过中断管理芯片8259向控制核心提出中断请求,通过由8255进行管理的LED数码管显示由时间。
二设计要求:1.计时精确2.显示方式清晰。
3.具有时间调整功能。
4.系统稳定可靠。
三硬件设计3.13.2模块电路设计3.2.1 8086最小系统在本系统中,8086工作在最小模式下。
负责对8259,8253等芯片进行工作方式控制和数据处理,对时钟信号进行响应并控制led数码管进行显示。
1.AD7~AD0(双向。
三态)为低8位地址/数据的复用引脚线。
采用分时的多路转换方法来实现对地址线和数据线的复用。
在总线坐骑的T1状态。
这些银线表示为这些银线用作株距总线。
可见对复用信号使用时间来加以划分的。
它要求在T1状态线出现低8位地址时,用地址锁存器加以锁存。
这样在随后的T状态,即使这些线用作数据线,而第8位地址线的地址在个体却被记录保存下来,并送到地址总线上。
在DMA 方式时,这些银线被浮置为高阻状态。
2.A15~A8(输出,三态)为8位地址线。
在读写存储器或外设端口色中个总线周期内,都作为地址线输出高8位地址。
在DMA方式时,这些引线被浮置为高阻。
3.A19/S6~A16/S3(输出。
三态)为地址/状态服用引脚线,在总线周期的T1状态,这些线表示为最高4位的地址线,在总线周期的其他T状态,这些线用作提供状态信息,同样需要地址锁存器对T1状态出现的最高4位地址加以锁存。
电子时钟课程设计(含代码)[优秀]
电子时钟设计一、课程设计目的和意义掌握8255、8259、8253芯片使用方法和编程方法,通过本次课程设计,学以致用,进一步理解所学的相关芯片的原理、内部结构、使用方法等,学会相关芯片实际应用及编程,系统中采用8088微处理器完成了电子钟的小系统的独立设计.同时并了解综合问题的程序设计掌握实时处理程序的编制和调试方法,掌握一般的设计步骤和流程,使我们以后搞设计时逻辑更加清晰.二、开发环境及设备1、设计环境PC机一台、windows 98系统、实验箱、导线若干.2、设计所用设备8253定时器:用于产生秒脉冲,其输出信号可作为中断请示信号送IRQ2.8255并口:用做接口芯片,和控制键相连.8259中断控制器:用于产生中断.LED:四个LED用于显示分:秒值.KK1或KK2键与K7键,用于控制设置.三、设计思想与原理1、设计思想在本系统设计的电子时钟以8088微处理器作为CPU,用8253做定时计数器产生时钟频率,8255做可编程并行接口显示时钟和控制键电路,8259做中断控制器产生中断.在此系统中,8253的功能是定时,接入8253的CLK信号为周期性时钟信号.8253采用计数器0,工作于方式2,使8253的OUT0端输出周期性的负脉冲信号.即每隔20米s,8253的OUT0端就会输出一个负脉冲的信号,此信号接8259的IR2,当中断到50次数后,CPU即处理,使液晶显示器上的时间发生变化.其中8259只需初始化ICW1,其功能是向8259表明IRx输入是电瓶触发方式还是上升沿触发方式,是单片8259还是多片8259.8259接收到信号后,产生中断信号送CPU处理.2、设计原理利用实验台上提供的定时器8253和扩展板上提供的8259以及控制键和数码显示电路,设计一个电子时钟,由8253中断定时,控制键控制电子时钟的启停及初始值的预置.电子时钟的显示格式米米:SS由左到右分别为分、秒,最大记时59:59超过这个时间分秒位都清零从00:00重新开始.基本工作原理:每百分之一秒对百分之一秒寄存器的内容加一,并依次对秒、分寄存器的内容加一,四个数码管动态显示分、秒的当前值.三、设计所用芯片结构1、8259A芯片的内部结构及引脚中断控制器8259A是Intel公司专为控制优先级中断而设计开发的芯片.它将中断源优先排队、辨别中断源以及提供中断矢量的电路集中于一片中.因此无需附加任何电路,只需对8259A编程,就可以管理8级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定.在米D微机系统中,8259芯片工作于单片方式.8259引脚图如图3.3,各引脚功能如下.D7~D0——八条双向数据线;WR(低电平有效)——写输入信号;RD(低电平有效)——读输入信号;CS(低电平有效)——片选输入信号;A0——地址信号;INT——中断请求信号;INTA(低电平有效)——中断响应信号;CAS0~CAS2——级联信号,形成一条专用8259A总线,以便多片8259A的级联;SP/EN——从编程/允许级联.在缓冲方式中,可用做输图3.1 8259A引脚图出信号以控制总线缓冲器的接收和发送.在非缓冲方式中,作为输入信号用于表示主片还是从片;IR0~IR7——外部中断请求输入线.要求输入的中断请求信号是由低电平到高电平的上升沿(并保持高电平到CPU 响应时为止)或者是高电平. 8259中断矢量地址与中断信号之间的关系如表3.1所示:中断序号 0 1 2 3 4 5 6 7 功能调用 08H 09H 0AH 0BH 0CH 0DH 0EH 0FH 矢量地址 20H~ 23H24H ~ 27H 28H ~ 2BH 2CH ~ 2FH 30H ~ 33H34H ~ 37H38H ~ 3BH 3CH ~ 3FH 说明时钟键盘可用可用串行口 可用可用可用2、8255芯片的内部结构及引脚8255可编程外围接口芯片是Intel 公司生产的通用并行I/O 接口芯片,它具有A 、B 、C 三个并行接口,用+5V 单电源供电,能在以下三种工作方式下工作: 方式0—基本输入/输出方式 方式1—选通输入/输出方式 方式2—双向选通输入/输出方式 8255引脚图如图3.2示,各引脚功能如下. D7~D0——与CPU 侧连接的八条双向数据线; WR(低电平有效)——写输入信号; RD(低电平有效)——读输入信号; CS(低电平有效)——片选输入信号; A0、A1——片内寄存器选择输入信号; PA7~PA0——A 口外设双向数据线; PB7~PB0——B 口外设双向数据线; PC7~PC0——C 口外设双向数据线; RESET ——复位输入信号表3.1 8259A 中断矢量表图3.2 8255引脚图2、8255端口地址 信号线寄存器 编址 IOY3A 口60H B 口 61H C 口 62H 控制寄存器63H3、8253芯片的内部结构及引脚8253可编程定时/计数器是Intel 公司生产的通用外围芯片之一,有3个独立的十六位计数器,技术频率范围为0~2米HZ,它所有的技术方式和操作方式都通过编程控制. 8253的功能用途是: (1) 延时中断 (2) 可编程频率发生器 (3) 事件计数器 (4) 二进倍频器 (5) 实时时钟 (6) 数字单稳 (7)复杂的电机控制器8253有六种工作方式: (1) 方式0:计数结束中断 (2) 方式1:可编程频率发生器 (3) 方式2:频率发生器 (4) 方式3:方波频率发生器 (5)方式4:软件触发的选通信号(6)方式5:硬件触发的选通信号8253引脚图如图3.3示,各引脚功能如下.表3.2 8255端口地址表图3.3 8253引脚图D7~D0——八条双向数据线;WR(低电平有效)——写输入信号;RD(低电平有效)——读输入信号;CS(低电平有效)——片选输入信号;A0、A1——片内寄存器地址输入信号;CLK——计数输入,用于输入定时基准脉冲或计数脉冲;OUT——输出信号,以相应的电平指示计数的完成,或输出脉冲波形; GATE——选通输入(门控输入),用于启动或禁止计数器的操作,以使计数器和计测对象同步.2、8253端口地址表3.3 8253端口地址表四、具体模块设计1、概述本系统设计的电子钟以8088微处理器作为CPU,用8253做定时计数器产生时钟频率,8255做可编程并行接口显示时钟和键盘电路,8259做中断控制器产生中断.在此系统中,8253的功能是定时,接入8253的CLK信号为周期性时钟信号.8253采用计数器0,工作于方式2,使8253的OUT0端输出周期性的负脉冲信号.即每隔20米s,8253的OUT0端就会输出一个负脉冲的信号,此信号接8259的IR2,当中断到50次数后,CPU即处理,使液晶显示器上的时间发生变化.程序由以下模块组成:系统共有5个功能模块,分别为,主控模块,显示模块,定时模块,中断模块,小键盘模块.系统框图如下:2、主程序模块主控模块是系的核心模块,对8253、8255A进行初始化,设置中断向量,扫描键盘根据按键值作相应的处理.主要由软件实现.它的主要功能是调用其它模块对系统工作进行协调,它的主要功能是读控制模块输入值并执行要做的工作,如果是由KK1或KK2的信号,则将进行中断处理,并调用显示模块显示.如果控制模块输出的K7的信号,则将进入对时状态.3、控制模块控制模块送入主控模块的子功能模块.由软件和硬件实现,硬件上由控制键和8255互连,将键值由8255送入主控模块.软件上使用行扫描法获得键值并送回主控模块.4、显示模块显示模块是将显示缓冲区的数值送到LED显示的功能模块,显示缓冲区是由六个字节构成,分别保存小时的高位和低位,分钟的高位和低位,秒钟的高位和低位.硬件上由六个LED构成,软件上由扫描显示的方法实现.实现代码如下:DISPLAY PROC NEAR 米OV CX,77FFH LED52: CALL DISUP LOOP LED52DISUP: PUSH CX米OV DI,OFFSET 米IN1米OV CL,01DISUP1: 米OV AL,0米OV DX,PORTBITOUT DX,AL米OV AL,[DI]米OV BX,OFFSET LEDXLAT米OV DX,PORTSEGOUT DX,AL米OV AL,CL米OV DX,PORTBITOUT DX,AL米OV BX,35H DELAY1: DEC BXJNZ DELAY1厘米P CL,20HJZ DISUP2INC DISHL CL,1J米P DISUP1 DISUP2: POP CXRET DISPLAY ENDP5、定时模块定时模块是为8259提供中断请求信号的.由一片8253实现,选用定时器0号,工作在方式3,由于时钟应该1秒走动一次,所以输出值应为1S,其输出信号可作为8259的中断请求信号.6、中断处理模块中断模块实现动态显示的,硬件为一片8259,由于中断请求信号为每秒一次,中断程序该为时间按秒增加,并显示,只要开中断,便可实现每秒显示时间增加一秒,从而达到动态显示的效果.代码:START: 米ov al,14h out 76h,al米ov al,3dhOUT 74H,AL米OV AL,1FH OUT 80H,AL米OV AL,18H OUT 81H,AL米OV AL,03H OUT 81H,AL米OV AL,80H OUT 0D6H,AL米OV AL,7FH OUT 81H,AL 米OV AX,0000H米OV CX,AX米OV BL,ALIR7: OUT 00D0H,CL OUT 00D2H,CH OUT 00D4H,BL INC CL厘米P CL,3CH JGE P1CALL IR7P1:米OV CL,AL INC CH厘米P CH,3CH JGE P2CALL IR7P2:米OV CH,AHINC BL厘米P BL,18H JGE P3CALL IR7米OV BL,AL CALL IR7 CODE ENDSEND START五、心得体会本次课程设计做的是电子时钟设计,本以为设计思路清楚,设计会简单,可是经过两周的时间,发现选择了一个相对比较难的题目,最终也没有将其完全设计出来,比较遗憾.这个题目有几个难处,一,是汇编语言与微机原理的相结合部分比较难,导致部分代码不能正确写出:二,对实验箱了解不充分,设计起来对具体端口不理解.三,本次设计的大多数题目都能在网上找到可以借鉴的程序,而我们的虽然找到了,但是遇到了相当不擅长的端口问题,暴漏了平常学习的缺漏.四,总结,中断,计数,以及端口等的知识在学习中没有能够很好的学习,遇到具体细节问题时,解决不了.两组成员一起讨论,仍然没有很好的解决,不过确实对微机原理的相关知识很有收获.本次设计的收获:对8259、8255、8253有了进一步的了解,对中断处理有了更深的理解,很好的复习了微机原理,同时对端口有了初步的理解.通过课程设计更加体会到了团队作战的长处,大家一起受益颇多,取长补短,最主要的是认识到了自己的不足,需要进一步学习所含知识,尤其是端口,更需要勤加练习汇编语言与微机原理的结合,课程设计受益颇多.参考书目:1、戴梅萼,史嘉权编著.微型计算机技术及应用(第三版). 北京:清华大学出版社,20032、李顺增,吴国东,赵河明等.微机原理及接口技术.北京:机械工业出版社,20063、杨立新.微型计算机原理和应用[米].北京:科学技术文献出版社,1986.114、眭碧霞.微型计算机原理与组成[米].人民邮电出版社,2003.8。
电子时钟程序代码
电子时钟程序代码预览说明:预览图片所展示的格式为文档的源格式展示,下载源文件没有水印,内容可编辑和复制(一)计时模块1. 秒计数是由一个六十进制的计数器构成,生成元器件如下Clk:驱动秒计时器的时钟信号Clr:校准时间时清零的输入端En:使能端Sec0[3..0]sec1[3..0]:秒的高位显示,低位显示Co:进位输出端,作为分的clk输入代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity second isport (clk,clr,en:in std_logic;sec0,sec1:out std_logic_vector(3 downto 0);co:outstd_logic);end second;architecture sec of second isSIGNAL cnt1,cnt0:std_logic_vector(3 downto0);beginprocess(clk)beginif(clr='0')thencnt0<="0000";cnt1<="0000";elsif(clk'eventand clk='1')thenif(en='1')thenifcnt1="0101" and cnt0="1000" thenco<='1';cnt0<="1001";elsifcnt0<"1001" thencnt0<=(cnt0+1);elsecnt0<="0000";ifcnt1<"0101"thencnt1<=cnt1+1;elsecnt1<="0000";co<='0';endif;endif;endif;endif;sec1<=cnt1;sec0<=cnt0;endprocess;end sec;2.分计数是由六十进制的计数器构成,生成元器件如下Clk:设置分输入和秒进位的或输入En:使能输入Min1[3..0] min0[3..0]:分的高位显示,低位显示Co:向时的进位输出代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity minute isport (clk,en:in std_logic;min1,min0:out std_logic_vector(3 downto 0);co:outstd_logic);end minute;architecture min of minute isSIGNAL cnt1,cnt0:std_logic_vector(3 downto0);beginprocess(clk)beginif(clk'eventand clk='1')thenifen='1' thenifcnt1="0101" and cnt0="1001" thenco<='1';cnt0<="0000";cnt1<="0000";elsifcnt0<"1001" thencnt0<=(cnt0+1);elsecnt0<="0000";cnt1<=cnt1+1;co<='0';endif;endif;endif;min1<=cnt1;min0<=cnt0;endprocess;end min;3.时计数是由二十四进制的计数器构成,生成元器件如下Clk:设置时间输入和分进位输入的或en:使能端h1[3..0] h0[3..0]:时的高位显示和低位显示代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity hour isport(clk,en:in std_logic;h1,h0:out std_logic_vector(3 downto 0));end hour;architecture beha of hour issignal cnt1,cnt0:std_logic_vector(3 downto0);beginprocess(clk)beginif(clk'event and clk='1') thenif en='1' thenif cnt1="0010" andcnt0="0011" thencnt1<="0000";cnt0<="0000";elsif cnt0<"1001" thencnt0<=cnt0+1;elsecnt0<="0000";cnt1<=cnt1+1;end if;end if;end if;h1<=cnt1;h0<=cnt0; end process; end beha;。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
附件3课程设计(综合实验)报告( 2011 -- 2012 年度第 1 学期)名称:硬件课程与实践题目:8086数字电子钟的设计院系:班级:学号:学生姓名:指导教师:设计周数:2周成绩:日期:2011年09月01日一、课程设计的目的与要求1. 综合运用学过的相关软、硬件知识,利用伟福LAB6000实验设备,设计具有实用功能的电子钟,实现电子时钟的准确运行、校时等功能。
2.熟悉伟福LAB6000的功能,掌握数码管设计和键盘设计的要领及相关技术,能够利用实验设备实现电子钟系统的设计。
3.提高自己的硬件设计分析能力,同时培养软硬结合的系统设计思维,从而提高设计系统的可行性和准确性。
二、课程设计正文A.设计题目:8086数字电子钟的设计:1.设计并完成LED七段数码管数字钟电路。
2.数字钟显示格式为:HH:MM:SS。
3.具有通过键盘能够调整时、分、秒及设置闹铃的功能。
4.具有暂停时间及复位功能。
B.设计方案本设计采用LAB6000伟福仿真实验箱,利用4MHz脉冲信号源和多级分频电路产生脉冲信号,4MHz脉冲信号经过F/64分频后得到62.5KHz脉冲信号,将脉冲信号传递给8253定时器,定时器每0.000016秒中断一次,在中断服务程序中对中断次数进行计数,0.000016秒计数62500次就是1秒,然后在中断服务程序中对秒计数得到分和小时值并判断闹铃是否到时。
编写键盘扫描和LED显示程序完成设置时间、定闹铃及数码管显示功能。
C.硬件原理1.七段数码管显示和键盘扫描显示图1.1七段数码管图1.2伟福实验台六位LED的电路图及寻址空间实验箱提供了6位八段数码LED显示电路,只要按地址输出相应数据,就可以实现对显示器的控制。
将KEY/LED CS接到CS0上,则实验箱中八位段码输出地址为08004H,位码输出地址为08002H。
实验箱提供了一个6×4的小键盘,将KEY/LED CS信号接到CS0上,则列扫描地址为08002H,行码地址为08001H。
向列扫描码地址逐列输入低电平,然后从行码地址读回。
如果有键按下,则相应行的值应为低,如果无键按下,由于上拉的作用,行码为高。
这样就可以通过输出的列码和读取的行码来判断按下的是什么键。
在判断有键按下后,要有一定的时延,防止键盘抖动。
2.硬件连接图2.1伟福实验台内部总线连接8253用定时器/计数器1,8253片选接CS1,地址为09000H,8253时钟源CLK1接分频电路的F/64输出,频器的Fin接4MHz时钟,8253的GATE1接VCC;8259中断INT0接8253的OUT1,片选接CS2,地址为0A000H。
显示电路的KEY/LED CS 接CS0,地址为08000H。
如下图:D.运行界面三、课程设计总结或结论四、参考文献[1] 王保义, 张少敏.接口与通信. 北京-中国电力出版社, 2008[2] 沈美明, 温冬婵. IBM-PC汇编语言程序设计. 清华大学出版社,第二版. 2002[3] 陆红伟.微机原理实验与课程设计指导书. 中国电力出版社, 2006.8附录(设计流程图、程序等)CONTROL EQU 09003HCOUNT1 EQU 09001HIN_KEY EQU 08001H ; 键盘读入口OUTBIT EQU 08002H ; 位控制口OUTSEG EQU 08004H ; 段控制口ICW1 EQU 00010011B ; 单片8259, 上升沿中断, 要写ICW4ICW2 EQU 00100000B ; 中断号为20HICW4 EQU 00000001B ; 工作在8086/88 方式OCW1 EQU 11111110B ; 只响应INT0 中断CS8259A EQU 0A000H ; 8259地址CS8259B EQU 0A001HDATA SEGMENTCNT DB 0;闹铃显示RHOUR DB 1RMINUTE DB 0HOUR DB 0MINUTE DB 0SECOND DB 0NUM DB 0;判断闹铃LEDBUF DB 6 DUP(?) ; 显示缓冲RINGBUF DB 6 DUP(?)SETBUF DB 6 DUP(?)LEDMAP: ; 八段管显示码DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07HDB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71HKEYTABLE: ; 键码定义DB 16H, 15H, 14H, 0FFHDB 13H, 12H, 11H, 10HDB 0DH, 0CH, 0BH, 0AHDB 0EH, 03H, 06H, 09HDB 0FH, 02H, 05H, 08HDB 00H, 01H, 04H, 07HSET: DB 6DH, 79H, 07H, 01H, 00H, 00H;字符显示SETBELL: DB 7FH, 79H, 38H, 38H, 00H, 00H;字符显示BELLDATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DA TADELAY PROC NEARPUSH AX ; 延时子程序PUSH CXMOV AL, 0MOV CX,AXLOOP $POP CXPOP AXRETDELAY ENDPDISPLAYLED PROC NEARMOV CL, 6 ; 共6个八段管MOV AH, 00100000B ; 从左边开始显示DLOOP:MOV DX, OUTBITMOV AL, 0OUT DX,AL ; 关所有八段管MOV AL, [BX]MOV DX, OUTSEGOUT DX,ALMOV DX, OUTBITMOV AL, AHOUT DX, AL ; 显示一位八段管PUSH AXMOV AH, 01HCALL DELAYPOP AXSHR AH, 1INC BXDEC CLJNZ DLOOPMOV DX, OUTBITMOV AL, 0OUT DX,AL ; 关所有八段管RETDISPLAYLED ENDPTESTKEY PROC NEARMOV DX, OUTBITMOV AL, 0OUT DX, AL ; 输出线置为0MOV DX, IN_KEYIN AL, DX ; 读入键状态NOT ALAND AL, 0FH ; 高四位不用RETTESTKEY ENDPGETKEY PROC NEARMOV CH, 00100000BMOV CL, 6KLOOP:MOV DX, OUTBITMOV AL, CH ; 找出键所在列NOT ALOUT DX, ALSHR CH, 1MOV DX, IN_KEYIN AL, DXNOT ALAND AL, 0FHJNE GOON_ ; 该列有键入DEC CLJNZ KLOOPMOV CL, 0FFH ; 没有键按下, 返回0FFHJMP EXIT1GOON_:DEC CLSHL CL, 2 ; 键值= 列* 4 +行MOV CH, 4LOOPC:TEST AL, 1JNZ EXIT1SHR AL, 1INC CLDEC CHJNZ LOOPCEXIT1:MOV DX, OUTBITMOV AL, 0OUT DX, ALMOV CH, 0MOV BX, OFFSET KEYTABLEADD BX, CXMOV AL, [BX] ; 取出键码MOV BL, ALWAITRELEASE:MOV DX, OUTBITMOV AL, 0OUT DX, AL ; 等键释放MOV AH, 10CALL DELAYCALL TESTKEYJNE WAITRELEASEMOV AL, BLRETGETKEY ENDPIENTER PROC NEARPUSH AXPUSH DXMOV NUM,0INC SECONDMOV AL, SECONDCMP AL, 60JNE J0MOV SECOND, 0INC MINUTEMOV AL, MINUTECMP AL, 60JNE J0MOV MINUTE, 0INC HOURMOV AL, HOURCMP AL, 24JNE J0MOV HOUR, 0J0: ;判断闹铃MOV AL,HOURCMP AL, RHOURJNE J1INC NUMJ1:MOV AL,MINUTECMP AL, RMINUTEJNE J2INC NUMJ2:CMP NUM, 2JNE EXITMOV CNT, 0EHL33:;MOV DX,0D000H;OUT DX,ALMOV BX, OFFSET BELLCALL DISPLAYLEDDEC CNTJNE L33EXIT:MOV DX, CS8259AMOV AL, 20H ; 中断服务程序结束指令OUT DX, ALPOP DXPOP AXIRETIENTER ENDPIINIT PROCMOV DX, CS8259AMOV AL, ICW1OUT DX, ALMOV DX, CS8259BMOV AL, ICW2OUT DX, ALMOV AL, ICW4OUT DX, ALMOV AL, OCW1OUT DX, ALRETIINIT ENDPSTART PROC NEARMOV AX, DA TAMOV DS, AXMOV NUM, 0MOV LEDBUF, 03FH ; 显示00.00.00MOV LEDBUF+1, 03FHMOV LEDBUF+2, 03FHMOV LEDBUF+3, 03FHMOV LEDBUF+4, 03FHMOV LEDBUF+5, 03FHMOV HOUR, 0MOV MINUTE, 0MOV SECOND, 0CLI ;关中断MOV AX, 0MOV DS, AXMOV AL, 76H; 01110110B ; 计数器1,16位,方式3,二进制MOV DX, CONTROLOUT DX, ALMOV AX, 65500MOV DX, COUNT1OUT DX, AL ; 计数器低字节MOV AL, AHOUT DX, AL ; 计数器高字节MOV BX, 4*ICW2 ; 中断号MOV AX, CODESHL AX, 4 ;*16ADD AX, OFFSET IENTER ;中断入口地址(段地址为0)MOV [BX], AXMOV AX, 0INC BXINC BXMOV [BX], AX ; 代码段地址为0CALL IINITMOV AX, DA TAMOV DS, AXSTI ;开中断LOOP2:MOV AL, HOURMOV AH, 0MOV CL, 10DIV CLMOV CH, AHMOV AH, 0 MOV BX, OFFSET LEDMAP ADD BX, AXMOV AL, [BX]MOV LEDBUF, ALMOV BX, OFFSET LEDMAP MOV AL, CHMOV AH, 0ADD BX, AXMOV AL, [BX]OR AL, 80HMOV LEDBUF+1, ALMOV AL, MINUTE MOV AH, 0MOV CL, 10DIV CLMOV CH, AHMOV AH, 0MOV BX, OFFSET LEDMAP ADD BX, AXMOV AL, [BX]MOV LEDBUF+2, ALMOV BX, OFFSET LEDMAP MOV AL, CHMOV AH, 0ADD BX, AXMOV AL, [BX]OR AL, 80HMOV LEDBUF+3, ALJMP L3LOOP1:JMP LOOP2L3:MOV AL, SECOND MOV AH, 0MOV CL, 10DIV CLMOV CH, AHMOV AH, 0MOV BX, OFFSET LEDMAP ADD BX, AXMOV AL, [BX]MOV LEDBUF+4, ALMOV BX, OFFSET LEDMAP MOV AL, CHMOV AH, 0ADD BX, AXMOV AL, [BX]OR AL, 80HMOV LEDBUF+5, ALMOV BX, OFFSET LEDBUFCALL DISPLAYLEDD0:MOV BX, OFFSET LEDBUFCALL DISPLAYLED ; 显示CALL TESTKEY ; 有键入?JE LOOP1 ; 无键入, 继续显示CALL GETKEY ; 读入键码AND AL, 0FH ; 显示键码MOV AH,0CMP AL,0AHJE SET0CMP AL,0BHJE BELL01CMP AL,0CHJE STOP1CMP AL,0DHJE CLEAR1JMP D0STOP1:CLISTOP2:MOV BX, OFFSET LEDBUFCALL DISPLAYLEDCALL TESTKEYJE STOP2CALL GETKEYAND AL, 0FHMOV AH, 0CMP AL, 0CHJNE STOP2STIJMP D0CLEAR1:MOV HOUR,0MOV MINUTE,0MOV SECOND,0 JMP D0SET0:MOV BX, OFFSET SETCALL DISPLAYLEDCALL TESTKEYJE SET0CALL GETKEYAND AL, 0FHMOV AH, 0MOV SETBUF[0],ALMOV BX, OFFSET LEDMAP ADD BX, AXMOV AL, [BX]MOV LEDBUF, ALSET1:MOV BX, OFFSET LEDBUF CALL DISPLAYLEDCALL TESTKEYJE SET1CALL GETKEYAND AL, 0FHMOV AH, 0MOV SETBUF[1],ALMOV BX, OFFSET LEDMAP ADD BX, AXMOV AL, [BX]MOV LEDBUF+1, ALJMP SET2BELL01:JMP BELL02SET2:MOV BX, OFFSET LEDBUF CALL DISPLAYLEDCALL TESTKEYJE SET2CALL GETKEYAND AL, 0FHMOV AH, 0MOV SETBUF[2],ALMOV BX, OFFSET LEDMAP ADD BX, AXMOV AL, [BX]MOV LEDBUF+2, ALSET3:MOV BX, OFFSET LEDBUF CALL DISPLAYLEDCALL TESTKEYJE SET3CALL GETKEYAND AL, 0FHMOV AH, 0MOV SETBUF[3],ALMOV BX, OFFSET LEDMAP ADD BX, AXMOV AL, [BX]MOV LEDBUF+3, ALJMP SET6BELL02:JMP BELL03SET6:MOV BX, OFFSET LEDBUF CALL DISPLAYLEDCALL TESTKEYJE SET6CALL GETKEYAND AL, 0FHCMP AL,0AHJE TIMESETJMP D0TIMESET:MOV AL , SETBUF[0]MOV CL,10DMUL CLMOV BL,SETBUF[1]ADD AL,BLMOV HOUR,ALCMP HOUR,24JL LP1MOV HOUR ,0LP1:MOV AL ,SETBUF[2]MOV CL,10DMUL CLMOV BL ,SETBUF[3] ADD AL,BLMOV MINUTE ,ALCMP MINUTE ,60JL LP2MOV MINUTE ,0LP2:MOV SECOND, 0JMP D0BELL03:MOV BX, OFFSET BELL CALL DISPLAYLED ; 显示CALL TESTKEY ; 有键入?JE BELL03 ; 无键入, 继续显示CALL GETKEY ; 读入键码AND AL, 0FH ; 显示键码MOV AH, 0MOV RINGBUF[0],ALMOV BX, OFFSET LEDMAP ADD BX, AXMOV AL, [BX]MOV LEDBUF, ALBELL1:MOV BX, OFFSET LEDBUF CALL DISPLAYLED ; 显示CALL TESTKEY ; 有键入?JE BELL1 ; 无键入, 继续显示CALL GETKEY ; 读入键码AND AL, 0FH ; 显示键码MOV AH, 0MOV RINGBUF[1],ALMOV BX, OFFSET LEDMAP ADD BX, AXMOV AL, [BX]MOV LEDBUF+1, ALBELL2:MOV BX, OFFSET LEDBUF CALL DISPLAYLED ; 显示CALL TESTKEY ; 有键入?JE BELL2 ; 无键入, 继续显示CALL GETKEY ; 读入键码AND AL, 0FH ; 显示键码MOV AH, 0MOV RINGBUF[2],ALMOV BX, OFFSET LEDMAP ADD BX, AXMOV AL, [BX]MOV LEDBUF+2, ALBELL3:MOV BX, OFFSET LEDBUF CALL DISPLAYLED ; 显示CALL TESTKEY ; 有键入?JE BELL3 ; 无键入, 继续显示CALL GETKEY ; 读入键码AND AL, 0FH ; 显示键码MOV AH, 0MOV RINGBUF[3],ALMOV BX, OFFSET LEDMAP ADD BX, AXMOV AL, [BX]MOV LEDBUF+3, ALBELL4:MOV BX, OFFSET LEDBUF CALL DISPLAYLEDCALL TESTKEYJE BELL4CALL GETKEY AND AL, 0FHCMP AL,0BHJE BELLSETJMP D0BELLSET:MOV NUM,0MOV AL , RINGBUF[0] MOV CL,10DMUL CLMOV BL,RINGBUF[1] ADD AL,BLMOV RHOUR,AL CMP RHOUR,24JL LP3MOV RHOUR ,0LP3:MOV AL ,RINGBUF[2] MOV CL,10DMUL CLMOV BL ,RINGBUF[3] ADD AL,BLMOV RMINUTE ,AL CMP RMINUTE ,60JL LP4MOV RMINUTE ,0LP4:JMP D0START ENDPCODE ENDSEND START。