北京邮电大学实验报告实验三微机.docx

上传人:b****7 文档编号:10761055 上传时间:2023-02-22 格式:DOCX 页数:12 大小:146.80KB
下载 相关 举报
北京邮电大学实验报告实验三微机.docx_第1页
第1页 / 共12页
北京邮电大学实验报告实验三微机.docx_第2页
第2页 / 共12页
北京邮电大学实验报告实验三微机.docx_第3页
第3页 / 共12页
北京邮电大学实验报告实验三微机.docx_第4页
第4页 / 共12页
北京邮电大学实验报告实验三微机.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

北京邮电大学实验报告实验三微机.docx

《北京邮电大学实验报告实验三微机.docx》由会员分享,可在线阅读,更多相关《北京邮电大学实验报告实验三微机.docx(12页珍藏版)》请在冰豆网上搜索。

北京邮电大学实验报告实验三微机.docx

北京邮电大学实验报告实验三微机

北京邮电大学实验报告

 

题目:

微机原理软件实验三

 

 

班级:

2010211127

专业:

信息工程

姓名:

付莹

学号:

10210759

 

实验五:

中断实验

1.实验类

设计型实验:

编程实现时钟的显示。

2.实验目的

掌握计数器/定时器8253的工作原理和编程方法;

掌握中断控制器8259的工作原理;

掌握中断处理程序的编写。

3.实验条件

硬件条件:

PC机一台。

软件条件:

DOS操作系统;任意一种编辑程序,如EDIT;

宏汇编程序MASM;连接程序LINK;调试程序DEBUG。

可借用该程序中的中断服务程序以及8253的初始化程序段(口地址为40H、41H、42H、43H,控制字为36H=00110110B,时间常数TC=11932:

1.1932MHz/11932=100Hz,输出方波频率为100Hz,其周期为1000/100=10ms)。

4.实验内容及步骤

编一程序,在显示器上显示时、分、秒。

借用计数器8253的Timer0作为中断源,通过8259A向CPU发中断,每10ms产生一次中断。

在中断服务程序中管理刷新时、分、秒

Currenttimeis:

xx:

xx:

xx(时分秒键盘输入)

回车后时、分、秒开始计时,时钟不停的刷新。

当键入CTRL+C时,停止计时,返回系统,且系统正常运行不死机。

5.实验报告

(1)画出程序流程图。

(2)提交调试好的汇编语言源程序(.asm)。

DATASEGMENTPARAPUBLIC'DATA'

COUNT100DB100

MESG1DB'Currenttimeis:

$'

MESG2DB'Thetimeiswrong,pleaseinputagian...$'

GETTIMEDB9,'?

'

TENHOURDB0

HOURDB0,':

'

TENMINDB0

MINUTEDB0,':

'

TENSECDB0

SECONDDB0

OLD_OFFDW0

OLD_SEGDW0

DATAENDS

STACKSEGMENTPARASTACK'STACK'

DB256DUP(0)

STACKENDS

CODESEGMENTPARAPUBLIC'CODE'

ASSUMECS:

CODE

ASSUMEDS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVDX,OFFSETMESG1;显示'Currenttimeis:

'

MOVAL,09H

INT21H

MOVDX,OFFSETGETTIME;接受屏幕输入时间

MOVAH,0AH

INT21H

MOVHOUR+1,':

';时分秒之间的分隔符为':

'

MOVMINUTE+1,':

';检测时间输入是否符合要求

CMPSECOND,'0'

JCERRO

CMPSECOND,'9'

JGERRO

CMPTENSEC,'0'

JCERRO

CMPTENSEC,'6'

JNCERRO

CMPMINUTE,'0'

JCERRO

CMPMINUTE,'9'

JGERRO

CMPTENMIN,'0'

JCERRO

CMPTENMIN,'6'

JNCERRO

CMPHOUR,'0'

JCERRO

CMPHOUR,'4'

JNCERRO

CMPTENHOUR,'0'

JCERRO

CMPTENHOUR,'3'

JNCERRO

JMPNEXT1

ERRO:

MOVDX,OFFSETMESG2;输入有错,显示'Thetimeiswrong,pleaseinputagian...'

MOVAH,09H

INT21H

JMPSTART

;设置中断向量表

NEXT1:

CLI

MOVAL,08H;取08号中断向量的服务程序地址

MOVAH,35H

INT21H;ES:

BX=入口地址

MOVOLD_OFF,BX;保存原来的终端服务程序地址

MOVBX,ES

MOVOLD_SEG,BX

MOVAL,08H;设置08号中断向量的服务程序地址

MOVAH,25H

MOVDX,SEGTIMER

PUSHDS

MOVDS,DX

MOVDX,OFFSETTIMER

INT21H

POPDS

;设置8253

MOVAL,36H

OUT43H,AL

MOVBX,11932

MOVAL,bl

OUT40H,AL

MOVAL,bH

OUT40H,AL

;设置8259A

MOVDX,20H;ICW1地址

MOVAL,11H;写ICW1,沿触发方式、级联,要ICW4

OUTDX,AL

ADDDX,1;指向ICW2、ICW3、ICW4地址

MOVAL,8;ICW2,中断向量号为08H

OUTDX,AL

MOVAL,4;ICW3,IR2接有从片PIC

OUTDX,AL

MOVAL,1;ICW4,正常屏蔽方式、全嵌套、正常EOI

OUTDX,AL

MOVDX,0A0H;从片ICW1地址

MOVAL,11H;写ICW1,沿触发方式、级联,要ICW4

OUTDX,AL

ADDDX,1;指向ICW2、ICW3、ICW4地址

MOVAL,70H;ICW2,中断向量号为70H

OUTDX,AL

MOVAL,2;ICW3,从片PIC识别号=2

OUTDX,AL

MOVAL,1;ICW4,正常屏蔽方式、正常EOI

OUTDX,AL

STI

;显示时间信息

FOREVER:

MOVDX,OFFSETMESG1;显示'Currenttimeis:

'

MOVAH,09H

INT21H

MOVBX,OFFSETTENHOUR

MOVCX,8

DISD:

MOVAL,[BX];显示具体时间

CALLDISPCHAR

INCBX

LOOPDISD

MOVAL,0DH

CALLDISPCHAR

MOVAL,SECOND

NEXT:

CMPAL,SECOND;检测时间是否改变

JENEXT

JMPFOREVER

;中断服务程序TIMER

TIMERPROCFAR

PUSHAX

DECCOUNT100;每100次中断为1秒

JNZTIMERX

MOVCOUNT100,100

INCSECOND

CMPSECOND,'9'

JLETIMERX

MOVSECOND,'0'

INCTENSEC

CMPTENSEC,'5'

JLETIMERX

MOVTENSEC,'0'

INCMINUTE

CMPMINUTE,'9'

JLETIMERX

MOVMINUTE,'0'

INCTENMIN

CMPTENMIN,'5'

JLETIMERX

MOVTENMIN,'0'

INCHOUR

CMPHOUR,'9'

JLETIMERX

MOVHOUR,'0'

INCTENHOUR

CMPTENHOUR,'1'

JLETIMERX

CMPHOUR,'3'

JLETIMERX

MOVTENHOUR,'0'

MOVHOUR,'0'

TIMERX:

MOVAL,20H;不到100次则结束中断

OUT20H,AL

POPAX

IRET

TIMERENDP

;显示字符的子程序

DISPCHARPROCNEAR

PUSHBX

MOVBX,0

MOVAH,14

INT10H

POPBX

RET

DISPCHARENDP

;恢复原来的中断服务程序

MOVAH,4CH

MOVDX,OLD_SEG

PUSHDS

MOVDS,DX

MOVDX,OLD_OFF

INT21H

POPDS

CODEENDS

ENDSTART

实验抓图

输入错误的时候

(3)总结实验中遇到的问题及解决的方法。

主要实验中是编写时候的问题,第一如何使8259A产生中断,一开始想的是固定循环次数,然后int8ch,但仔细研读了例题,并看了8253的工作方式36H=00110110B,发现方波发生器可以每一次可以把每个方波看做是事件,out为中断请求,这样子,就可以在计时的时候调用中断程序。

在设置的时候,就可以理解了。

此外就是24小时以后清零问题,就是23:

59:

59之后应该跳转到00:

00:

00,需要对小时加上一个跳转,还有就是判断用户输入的对错问题上,分和秒的个位由于一开始写的jnc跳转,但最后要比较的应该改为JG。

这个问题虽然小,但是也从中重新了解了一遍跳转。

【心得体会】

这次的实验由于涉及到了可编程器件的初始化,有和我们的硬件实验联系到了一起,不过学过中断和定时器之后,重新自己编程还是很有成就感的。

对于我本身来说,实验是必不可少的,平时看书把概念看似搞明白了,但是重新利用到了原来的知识又会出现错误,多亏了实验和课程相结合,感觉到了自己学得更加扎实了。

Ps:

祝新年快乐

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 外语学习 > 英语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1