




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
a2a10082b8c536139c156d2a76623308.pdf报告电子时钟Inter 8086/8088系列微型计算机原理及接口技术课程设计报告设计项目:电子时钟院系:山东大学电气工程学院班级:姓名:学号:同组者: 目录:一、 设计目的说明3二、 设计原理3三、 程序说明3四、 程序流程图5五、 程序代码10六、 效果图20七、 调试过程21八、 硬件连接图22九、 心得体会23十、 参考资料23一、 设计目的:运用汇编语言设计一个电子时钟,有以下功能:1、实现时分秒的计时,并显示于屏幕中央;2、具有时分秒的校时功能;3、具有半点整点声音报时功能;4、实现年月日的计算,并显示于时间下方;5、实现日期校对功能;6、实现一键重启功能;7、在屏幕左上方显示各功能操作提示8、设计表盘,作为时间显示的背景二、 设计原理设计的基本原理是通过软件实现延时,以实现秒的计时,进而通过进制关系实现分、时的显示。 软件延时原理如下:每条指令执行时间的长短,是以计算机的时钟周期为基本单位的。当CPU采用的时钟频率一定时,时钟周期也为定值,因此可以根据时钟周期的多少来计算执行指令需要的时间。因此可以在程序中增加适当的无关语句让计算机执行,已获得需要的延时。这就是延时程序的设计原理。 在以上延时程序的基础上,通过时间约1s的长延时累加,并以时、分、秒的形式显示出来。同理,通过时间与日期的进制关系,还可以编写一个日期的程序。在时、分、秒和年、月、日进制计算程序的基础上可以增加语句以实现时间和日期的校对功能,通过键盘输入不同字符可以选择对时、分、秒、年高位、年低位、月、日分别进行加一操作,以实现校对功能。报时的功能可以通过将8255A的PB端口的第一位交替置位或复位产生一个方波信号,推动扬声器发出声音。产生的声音频率就是端口置位复位的频率。半点/整点条件的检测则可以编写一个分支程序体,通过对当前秒值、分值与报时点的秒值、分值进行比较以实现。当分值到达29或59时激发响铃。另外,还可以在键盘输入特定字符的时候执行一条转移语句跳转到程序开始的地方,以实现一键重启的功能,然后提示再次输入起始时间,即重置时间。可以通过int10中断设置背景显示:2H子功能实现光标定位,9H子功能实现输出字符颜色,个数等的设定。另外,还可以用图形方式实现图形输出。为方便使用,在屏幕上还应当显示操作提示。三、 程序说明用户输入的初始时间,日期是以ASCII码的形式存入内存的,在程序中将输入先后换为BCD码,压缩BCD码。以这种形式实现各变量的计数,校时控制,整点报时的条件判断。最后,将压缩BCD码转换为ASCII码,并输出。子程序设计说明:LOCATE为光标位置设置,即输出位置设置TURN1:将输入内容的ASCII依次转换为BCD码TURN2:将压缩BCD码依次变换为ASCII码TURN3:将BCD码依次转换为压缩BCD码DELAYY:延时子程序CLEAN:清屏操作程序运行后,首先在屏幕的中央将显示提示信息“BEGIN:”,提示输入起始时间,输入起始时间(格式:HH:MM:SS)后,在屏幕左上方显示操作提示,在屏幕中央显示起始时间,并开始计时。同时在时间的下方显示日期提示符“DATE:”以及日期(格式YYYYMMDD),初始日期为“00000000” 。此时可以根据操作提示进行校时(h,m,s)、校日期(g,y,n,d)和重启(r)的操作。输入h,m,s可以分别使“时”、“分”、“秒”加1,以实现校时。输入g,y,n,d可以分别使“年高两位”、“年低两位”、“月”、“日”加1,以实现校日期。输入r则会重启,即回到提示输入初始时间的状态,等待输入起始时间。当时间达到半点或整点前4秒,如11:29:56或者12:59:56,将开始给8255A的PB的第一位交替置位复位,产生方波,激发扬声器。在校时、校日期以及报时的过程中,时钟不会停止计时。四:程序流程图见下页。 开始键盘输入起始时间,放入存储器缓冲区STAY显示提示语“BEGIN:”调用LOCATE,设置输出位置调用TURN1,将STAY中的ASCII依次转换为BCD码调用TURN3,将STAY中的BCD码依次转换为压缩BCD码ZF=1?ABEN读取键盘输入读取缓冲区内键代码,送入AL(0号16H中断OYNLLAAL=1?调用延时子程序DELAYYBAL=2?CAL=4?AL=5?K分(DH)加1,十进制修正CAL=6?H分=60?AL=7?G分置零AL=8?F时(CH)加1,十进制修正BIDAL=3?Y秒(DL)加1,十进制修正秒=60?DENNNNNNNYYYYYYYI时=24?L时置零天(DAY)加1,十进制修正DAY=31?天置零F月(MONTH)加1L月=13?月置零GL年低位(YEAR2)加1JHNYNYNYJCF=1?L年低位置零年高位(YEAR1)加1,十进制修正CF=1?L年高位置零K秒=5659?L分=29?分=59?报时MM调用TURN2,将时间的压缩BCD码依次变换为ASCII码MNYYN调用TURN2,将日期的压缩BCD码依次转换为ASCII码调用CLEAN,清屏调用LOCAT,设置时间显示位置显示缓冲区内的字符串(时间和日期)设置日期提示符、操作提示的显示位置并显示ENDO延时子程序流程图见下页。开始外循环次数赋CX内循环次数赋BXCXCX1CX=0?BXBX1BX=0?RETYNNY五、程序代码王子奴隶,和雪窗写的王子奴隶同人辽东风雪记,王子奴隶番外童年在坞堡这一系列的文文都不错,很后妈。 另外还有兰雨雨的醉江山DAT SEGMENTYEAR1 DB ?YEAR2 DB ?MONTH DB ?DAY DB ?STAY DB 100 DUP (?)DATE DB DATE:,$ SA0 DB BEGIN:,$ SA1 DB Press h m s to adjust time,$ SA2 DB Press g y n d to adjust date,$ SA3 DB Press r to reset,$ DAT ENDS STA SEGMENT PARA STACKSTACK DB 100 DUP (?)TOP LABEL WORDSTA ENDSCOD SEGMENTPIC MACRO X,Y ;X 是位置Y是字符MOV AH,02HSUB BH,BH MOV DX,XINT 10HMOV AL,YMOV BL,0EH MOV CX,1MOV AH,09HINT 10HENDMSTART PROC FAR ASSUME CS:COD,DS:DAT,SS:STA MOV AX,DAT MOV DS,AX MOV AX,STA MOV SS,AX MOV AX,TOP MOV SP,AXSTART1: CALL CLEAN CALL LOCATE ;调用光标位置设置子程序,设置提示语显示 MOV DX,OFFSET SA0 ;显示提示语 MOV AH,9 INT 21H MOV DX,OFFSET STAY ;键盘输入字符串存入内存 MOV AH,10 INT 21H MOV BX,OFFSET STAY ;将输入的ASCII码转换为BCD码 CALL TURN1 INC BX INC BX CALL TURN1 INC BX INC BX CALL TURN1 INC BX INC BX CALL TURN1 INC BX INC BX CALL TURN1 INC BX INC BX CALL TURN1 INC BX INC BX CALL TURN1 MOV BX,OFFSET STAY ;将BCD码转换为压缩的BCD码 MOV AL,BX CALL TURN3 MOV CH,AL INC BX INC BX MOV AL,BX CALL TURN3 MOV DH,AL INC BX INC BX MOV AL,BX CALL TURN3 MOV DL,AL INC BX INC BX MOV AL,BX CALL TURN3 MOV YEAR2,AL INC BX INC BX MOV AL,BX CALL TURN3 MOV YEAR1,AL INC BX INC BX MOV AL,BX CALL TURN3 MOV MONTH,AL INC BX INC BX MOV AL,BX CALL TURN3 MOV DAY,AL X1: MOV AH,1 ;读取键盘控制字符输入 INT 16H JZ AGAIN MOV AH,0 ;从键盘读入控制字符 INT 16H CMP AL,h ;分析输入,实现校时功能 JZ HOU CMP AL,m JZ MIN CMP AL,s JZ SEC CMP AL,r JZ G1 CMP AL,g JZ YEAR2_ CMP AL,y JZ YEAR1_ CMP AL,n JZ MONTH_ CMP AL,d JZ DAY_ JMP AGAIN G1: JMP START1 AGAIN: CALL TIME ;调用延时子程序 YEAR1_: MOV AL,YEAR1 ;实现分时秒的计数并显示 ADD AL,1 DAA MOV YEAR1,AL JNC DISPY MOV YEAR1,0YEAR2_: MOV AL,YEAR2 ADD AL,1 DAA MOV YEAR2,AL JNC DISPY MOV YEAR2,0 DAY_: MOV AL,DAY ADD AL,1 DAA MOV DAY,AL CMP AL,31H JNE DISPY MOV DAY,0MONT_: MOV AL,MONTH ADD AL,1 DAA MOV MONTH,AL CMP AL,13H JNE DISPY MOV MONTH,0SEC: MOV AL,DL ADD AL,1 DAA MOV DL,AL CMP AL,60H JNE DISPY MOV DL,0MIN: MOV AL,DH ADD AL,1 DAA MOV DH,AL CMP AL,60H JNE DISPY MOV DH,0HOU: MOV AL,CH ADD AL,1 DAA MOV CH,AL CMP AL,24H JNE DISPY MOV CH,0 DISPY: ;显示模块 MOV BX,OFFSET BUFFER CMP DL,56H ;报时条件测试 JZ NEXT CMP DL,57H JZ NEXT CMP DL,58H JZ NEXT CMP DL,59H JZ NEXT CMP DL,00H JZ NEXT2 JMP NEXT1NEXT: CMP DH,29H JZ RING CMP DH,59H JZ BAOSHI JMP NEXT1NEXT2: CMP DH,30H JZ BAOSHI CMP DH,00H JZ BAOSHI JMP NEXT1RING: ;半/整点报时 PUSH DX PUSH AX MOV DL,07H MOV AH,02H INT 21H POP AX POP DXAG: MOV DX,1200 IN AL,61H AND AL,0FEH OR AL,02H OUT 61H,AL MOV CX,233 LOOP $ AND AL,0FDH OUT 61H,AL MOV CX,100 LOOP $ DEC DX JNZ AG NEXT1: MOV AL,CH ;将压缩的BCD码转换为ASCII码 CALL TURN2 INC BX MOV AL,: MOV BX,AL INC BX MOV AL,DH CALL TURN2 INC BX MOV AL,: MOV BX,AL INC BX MOV AL,DL CALL TURN2 INC BX MOV AL,0DH ;定位日期显示和时间显示的位置 MOV BX,AL INC BX MOV AL,0AH MOV BX,AL INC BX MOV AL,0AH MOV BX,AL PUSH CX MOV CX,38 H1: INC BX MOV AL,20H MOV BX,AL LOOP H1 POP CX INC BX ;将压缩的BCD码转换为ASCII码 MOV AL,YEAR2 CALL TURN2 INC BX MOV AL,YEAR1 CALL TURN2 INC BX MOV AL,- MOV BX,AL INC BX MOV AL,MONTH CALL TURN2 INC BX MOV AL,- MOV BX,AL INC BX MOV AL,DAY CALL TURN2 INC BX MOV AL,20H MOV BX,AL INC BX MOV AL,0AH MOV BX,AL MOV AL,$ MOV BX,AL PUSH BX PUSH CX PUSH DX CALL CLEAN ;调用清屏子程序 CALL LOCATE ;调用光标设置子程序,设置时钟显示 MOV DX,OFFSET BUFFER ;显示缓冲区内的字符串(时间和日期) MOV AH,9 INT 21H POP DX POP CX POP BX PUSH AX PUSH BX PUSH DX MOV AH,02 ;设置日期提示符显示位置并显示 MOV BH,0 MOV DH,15 MOV DL,30 INT 10H MOV DX,OFFSET DATE MOV AH,09 INT 21H MOV AH,02 ;设置操作提示SA1显示位置并显示 MOV BH,0 MOV DX,0000 INT 10H MOV DX,OFFSET SA1 MOV AH,09 INT 21H MOV AH,02 ;设置操作提示SA2显示位置并显示 MOV BH,0 MOV DX,0080 INT 10H LEA DX,SA 2 MOV AH,09 INT 21H MOV AH,02 ;设置操作提示SA3显示位置并显示 MOV BH,0 MOV DX,0160 INT 10H LEA DX,SA 3 MOV AH,09 INT 21H POP DX POP BX POP AX JMP X1 RET START ENDP TURN3 PROC ; BCD码转为压缩BCD码程序 ADD AL,AL DAA MOV CL,AL ADD AL,AL DAA ADD AL,AL DAA ADD AL,CL DAA MOV CL,AL INC BX MOV AL,BX ADD AL,CL RETMUL10 ENDP TRAN1 PROC ;ASCII码转BCD码子程序 MOV AL,BX AND AL,0FH MOV BX,AL INC BX MOV AL,BX AND AL,0FH MOV BX,AL RETTRAN1 ENDP TRAN2 PROC ;压缩BCD码转ASCII子程序 MOV CL,AL SHR AL,1 SHR AL,1 SHR AL,1 SHR AL,1 OR AL,30H MOV BX,AL INC BX MOV AL,CL AND AL,0FH OR AL,30H MOV BX,AL RETTRAN2 ENDP TIME PROC ;延时子程序 PUSH CX PUSH BX PUSH AX MOV CX,5FFFH ;设置外循环次数 MOV BX,2FFFH ;设置内循环次数GOON: DEC CX ;外循环 JNZ GOON1 POP AX POP BX POP CX RET GOON1: DEC BX ;内循环 JNZ GOON1 JMP GOON TIME ENDP LOCATE PROC ;设置光标子程序 MOV AH,02 SUB BH,BH MOV DX,0D24H INT 10H RETLOCATE ENDP CLEAN PROC ;清屏子程序 MOV AX,0600H MOV BH,3 MOV CX,0 MOV DX,184FH INT 10H RETCLEAN ENDP COD ENDS END START六、 效果图 程序运行后界面:显示提示语,等待输入起始时间时钟界面:显示提示操作、时间、日期,当前显示时间12:36:02,日期20101225 七、 调试过程该程序是使用 “masm for windosw 集成实验环境”软件书写和调试的。可在文本下写源程序,保存后将文件名改为“.asm”,就可以在调试软件中打开,也可以直接在软件界面下生成ASM文件:按“新建”按钮,新建一个ASM文件,或者点击“打开”按钮,打开已有的ASM文件进行编辑。点击“运行”按钮,在下拉框内可以看到“编译成目标文件”“生成可执行文件”“运行”,可分别执行相应功能。如果编译有错误,会显示错误的处数和位置以及可能的出错原因。如果编译通过,将生成EXE文件,运行EXE文件即可对程序实现的效果进行检测。在工具下拉框内点击“选项”,选择字符大小,可以影响DOS窗口大小。另外还可以选择用debug进行调试排错,可以观察各寄存器的内容,还可实现单步执行。八、硬件
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网络直播内容监管服务补充协议书
- 企业高端礼仪培训师长期聘用协议
- 动脉瘤病人护理
- 肢体活动障碍护理
- 初一常见传染病预防要点
- 城乡居民健康体检工作规范与实施方案
- 数据统计分析流程图培训
- 儿童骨折饮食护理
- 被害妄想护理措施
- 2025版高考物理一轮复习全程训练计划课练36机械振动机械波含解析
- 2024年中国成人心肌炎临床诊断与治疗指南解读
- 仓库三级安全教育培训
- 焊接实训车间建设方案
- 英国默许开发权的发展历程、体系构建与成效分析
- 电商售前客服质检培训
- 2023电力调度控制中心设计导则第1部分:术语和定义
- 中国儿童川崎病诊疗循证指南(2023年)解读课件
- 《狼图腾》阅读分享与深度解读
- 国网公司合规管理
- 铅冶炼行业清洁生产评价指标体系 替代 HJ 512-2009 HJ 513-2009
- 玉盘二部合唱正谱
评论
0/150
提交评论