汇编语言 8086 电子钟实验.docx
- 文档编号:6540460
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:15
- 大小:269.44KB
汇编语言 8086 电子钟实验.docx
《汇编语言 8086 电子钟实验.docx》由会员分享,可在线阅读,更多相关《汇编语言 8086 电子钟实验.docx(15页珍藏版)》请在冰豆网上搜索。
汇编语言8086电子钟实验
电子钟的设计报告
一、设计要求
设计一个电子时钟,使其具有二十四小时循环记时功能,走时要准。
并且有时钟的对时功能。
二、设计目的
熟练掌握TND86/88教学系统的基本操作和调试程序的各种指令
熟悉编程及调试程序的方法
掌握8259中断控制器的工作原理和应用编程方法,练习编写中断程序的方法
掌握8255的各种工作方式及其应用编程
掌握8253定时/计数器的工作原理、工作方式及其应用编程
练习LED-KEYBOARDUNIT的使用方法和数码管的显示编程方法
三、设计的具体实现
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负责将内存里的时位和分位值输出到数码管。
2.1显示模块
利用数码管的显示功能来设计。
数码管是由八个条形发光二极管组成的,这些发光二极管的阴极是互相连接在一起的,所以称为共阴极数码管。
通过在这八个发光二极管的阳极加+5V或0V的电压使不同的二极管发光,形成不同的字符和数字。
电子时钟用到的是0到9十个数字,他们所对应的字符表依次是3FH、06H、5BH、4FH、66H、6DH、7DH、07H、7FH、6FH。
该模块显示时先将保存在数据单元的当前时间包括小时和分钟读取出来,把十六进制数字转化成十进制用四个字节分别存放小时和分钟,并把这四个数值通过8255B端口并行输出给数码管显示。
该模块中用到的主要硬件是TND86/88的LED-KEYBOARDUNIT以及8255的A端口和B端口。
2.2时钟运算模块
该模块的主要功能是对时、分、秒的运算,并把运算出的最终结果存到事先已经开辟的内存单元里,以便显示模块即时地显示出来。
该模块可以细分为秒定时模块和运算模块。
秒定时模块负责提供中断信号,由于CPU运算模块中的指令消耗一定的时间,所以中断信号最好通过硬件来实现,选择的是TND86/88实验箱中的8253定时/计数器,但又因为8253所能提供的信号的周期时毫秒级的,因此必须通过软件的方法在运算模块中设置一个统计中断次数的变量,并且这一变量必须事先在内存里开辟存储单元。
中断信号是8253的计数器2工作方式为方式3时,同过设置计数器2的初值来产生一个40ms的脉冲信号。
运算模块负责时、分、秒的计算,该模块主要通过8259的IRQ7号中断来实现,首先将秒定时模块提供的中断信号为8259的IRQ7中断请求信号。
但由于每40ms一次中断请求。
所以在中断服务程序必须利用已申请内存单元count来统计中断请求的次数,只有当count的值为25时,才能让秒单元内的数值加1。
另外,在中断服务程序里,必须对秒、分和时的单元内的数值进行判断,当秒加到60时,分必须加1、秒清零;当分加到60时,时加1、分清零。
当时加到24时,直接清零。
2.3对时模块
该模块主要功能是修改小时、分钟内存单元的数值。
在对时的时候,秒应停止不变,并且在对分进行调整的时,时单元内的数值不变。
由以上分析可见,对时、分的调整用两个优先级高于IRQ7的中断来完成。
因此,可以用8259的IRQ2和IRQ6中断来实现,两个中断源的中断请求信号只需直接接在两个按键即可起到对时作用。
此处我们使用的是实验箱上的KK1+和KK2+。
3·软件程序设计
3.18259A的主要功能:
1)每片8259A可管理8级优先级中断源,通过开关,最多可管理64级优先权的中断源。
2)对任何一个级别的中断源都可单独进行屏蔽,使该级中断请求暂时被挂起,直到取消屏蔽时为止
3)能向CPU提供可编程的标识码。
4)具有多种中断优先权管理方式。
有完全嵌套方式、自动循环方式、特殊循环方式、特殊屏蔽方式和查询方式五种。
这些管理方式均可通过程序动态地进行变化。
在本设计中用到了这四种功能,电子时钟的灵活调时功能就是通过对级别的屏蔽或开启来实现的。
即设置OCW1来设置中断屏蔽/允许位。
3.28255的只要功能
可编程外设接口芯片可由程序改变其功能,通用性强、使用灵活。
通过8255A,CPU可直接同外设相连接,其负责CPU和外设之间的数据传送。
在本设计中主要通过8255来实现CPU向LED送数据,实现显示时间的功能。
3.38253的主要功能:
可编程定时器/计数器,其定时与计数功能可由程序灵活地设定,设定后与CPU并行工作,不占用CPU的时间。
计数器2工作在模式3方式下,提供计算一秒的中断请求信号。
4·程序框图
IRQ2中断流程:
IRQ6中断流程图:
四、
结论与展望
将编写好的源程序输入,编译后出现很多问题,经过反复修改程序终于运行通过。
1:
数码管显示的数字并不与理论计算值相符合,经过反复分析源程序发现问题出现在内存单元里时位和分位在转化为十进制时出错,经过更改内存但愿数据。
一开始数字闪动,后来请教同学,原因应该出在显示子程序里,缺少延时程序。
编写延时子程序,并在显示子程序调用它;编译源程序,装入生成的可执行文件,并运行。
数码管显示的数字与理论值相符合,并能正常计时,2:
如果按动KK1+键时,不能启动对时功能或按动KK2+时,也不能调时、调分。
问题很可能出在两键控制的中断源上,可以采取更换中断源来是进行调试。
五、心得体会与建议
通过本次课程设计,我对利用微机原理课程所学的知识设计电子表的基本过程的设计方法、步骤、思路、有一定的了解与认识。
它相当于实际工业设计的模拟。
在课程设计过程中,我先是收集、调查有关资料,然后进入草案阶段,其间与指导教师进行几次方案的讨论、修改,再讨论、再修改,最后定案,得出了总体方案设计。
设计方案确定后,又在老师指导下进行扩初详细设计,并分别设计了相应的模块;将这些模块组合起来,便形成了一个完整的电子表的设计。
对8259、8255、8253有了进一步的了解,对中断处理有了更深的理解,很好的复习了微机原理,同时对端口有了初步的理解。
通过课程设计更加体会到了团队作战的长处,大家一起受益颇多,取长补短,最主要的是认识到了自己的不足,需要进一步学习所含知识,尤其是端口,更需要勤加练习汇编语言与微机原理的结合,课程设计受益颇多。
经过这次成功的设计,我更加深刻的理解了微机原理的相关知识。
对一些常用芯片有了更深一步的认识,并且能够很好的使用它们。
应该说,这次课程设计达到了目的。
六、
附录
1)元器件明细表:
1.8253定时器:
8259A中断控制器:
8255A并行接口:
2)程序代码:
STACKSEGMENTSTACK
DW64DUP(?
)
STACKENDS
DATASEGMENT
HDW000CH
MDW0000H
SDW0000H
COUNTDW0000H
OFFDW0000H
TABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX//把数据送到DS中
MOVAL,81H
OUT63H,AL//设置8255的工作方式
MOVAX,2300H
MOV[0028],AX
MOVAX,0000H
MOV[002A],AX//把IRQ2的中断服务向量写入中断向量表中断向量为0AH
MOVAX,2200H
MOV[0038],AX
MOVAX,0000H
MOV[003A],AX//把IRQ6的中断服务向量写入中断向量表中断向量为0EH
MOVAX,2100H
MOV[003C],AX
MOVAX,0000H
MOV[003E],AX//把IRQ7的中断服务向量写入中断向量表中断向量为0FH
MOVAL,0B6H
OUT43H,AL
MOVAL,68H
OUT42H,AL
MOVAL,0BAH
OUT42H,AL//设置8253的计数器2和工作模式3
MOVAL,7BH
OUT21H,AL//设置8259A的2号和7号中断允许
BEGIN:
CALLDIS
STI
JMPBEGIN
IRQ7:
PUSHAX
MOVAX,COUNT
INCAX
MOVCOUNT,AX//COUNT++
POPAX
CMPCOUNT,19H
JNZRETURN//COUNT<25
MOVAX,0000H
MOVCOUNT,AX//COUNT=0
MOVAX,S
INCAX
MOVS,AX//S++
CMPAX,003CH
JNZRETURN//S<60
MOVAX,0000H
MOVS,AX//S=0
MOVBX,M
INCBX
MOVM,BX//M++
CMPBX,003CH
JNZRETURN//M<60
MOVBX,0000H
MOVM,BX//M=0
MOVDX,H
INCDX
MOVH,DX//H++
CMPDX,0018H
JNZRETURN//H<24
MOVDX,0000H
MOVH,DX//H=0
RETURN:
MOVAL,7BH
OUT21H,AL
//2号和7号中断允许,6号屏蔽
MOVAL,20H
OUT20H,AL//中断结束
IRET
IRQ6:
MOVAX,OFF
CMPAX,0001H
JNZHR//OFF!
=1跳转
MOVBX,M
INCBX
MOVM,BX//M+=1调整分钟
CMPBX,003CH
JNZR0//不满60分钟跳出
MOVBX,0000H
MOVM,BX//满60分钟清零
JMPR0
HR:
CMPAX,0002H
JNZR0//OFF!
=2
MOVBX,H
INCBX
MOVH,BX//H+=1调整小时
CMPBX,0018H
JNZR0//不满24小时跳出
MOVBX,0000H
MOVH,BX//满24小时清零
R0:
MOVAL,0BBH
OUT21H,AL//8259的2号和6号中断允许,7号中断屏蔽
MOVAL,20H
OUT20H,AL
IRET
IRQ2:
PUSHAX
MOVAX,OFF
INCAX
MOVOFF,AX//OFF++
POPAX
MOVBX,OFF
CMPBX,0003H
JZR1//OFF=3
CMPBX,0001H
JZR2//OFF=1
CMPBX,0002H
JZR2//OFF=2
R1:
MOVBX,0000H
MOVOFF,BX
MOVAL,7BH
OUT21H,AL
MOVAL,20H
OUT20H,AL
IRET//OFF清零,2号和7号中断允许,其余屏蔽
R2:
MOVAL,0BBH
OUT21H,AL
MOVAL,20H
OUT20H,AL
IRET/OFF清零,2号和6号中断允许,其余屏蔽
DIS:
PUSHAX
MOVAX,M
MOVBL,0AH
DIVBL
MOVDI,3000H
MOV[3000],AH
MOV[3001],AL//读出当前的分钟数并转换成十进制后放入3000/1单元中
MOVAX,H
MOVBL,0AH
DIVBL
MOV[3002],AH
MOV[3003],AL//读出当前的小时数并转换成十进制后放入3002和3003单元中
MOVDL,0F7H//选中一个数码管
MOVAL,DL
AGAIN:
OUT60H,AL//通过A端口选中相应数码管
MOVBL,[DI]
MOVBH,00H//读出相应数据放入BX
MOVSI,OFFSETTABLE
ADDBX,SI//获得要显示的数据
MOVAL,[BX]
OUT61H,AL//通过B端口送出数据
CALLDALLY
INCDI
MOVAL,DL
TESTAL,01H//判断是否选中的是最前面的数码管
JZOUT
RORAL,1
MOVDL,AL
JMPAGAIN
OUT:
POPAX
RET
DALLY:
//延时子程序
PUSHCX
MOVCX,000FH
T1:
MOVAX,0020H
T2:
DECAX
JNZT2
LOOPT1
POPCX
RET
CODEENDS
ENDSTART
3)电路图:
七、参考文献
[1]许立梓.微型计算机原理及应用[M].北京:
机械工业出版社,2003.
[2]戴梅萼等.微型计算机技术及应用.北京:
清华大学出版社,2003
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 8086 电子钟实验 电子钟 实验