欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    北邮微机原理中断程序报告.docx

    • 资源ID:26750287       资源大小:216.29KB        全文页数:20页
    • 资源格式: DOCX        下载积分:10金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    北邮微机原理中断程序报告.docx

    1、北邮微机原理中断程序报告北京邮电大学实验报告题目:微机原理软件实验学院:信息与通信工程专业:信息工程_中断实验报告一、实验目的1、初步掌握中断程序的设计方法;2、初步掌握修改DOS系统中断,以适应实际使用的方法。二:实验要求 编一程序,在显示器上显示时、分、秒。1: 借用计数器8253的Timer0作为中断源,通过8259A下向CPU发中断,每10ms 产生一次中断。2:在中断服务程序中管理刷新时、分、秒。3:输入文件名(如:CLK)后清屏显示 Current time is XX:XX:XX(时分秒键盘输入) 打回车,时、分、秒开始计时,时钟不停的刷新。4:当键入CTRL+C时,停止计时,返

    2、回系统,且系统正常运行不死机。提示:1、8253的初始化程序段可借用。2、口地址为40H、41H、42H、43H,控制字为36H=00110110B3、时间常数TC=11932:1.1932MHz/11932=100Hz,输出方波频率为100Hz,其周期为1000/100=10ms三:设计思路这个实验需要用到中断控制器8259A和计数器8253。我们先初始化8253的工作方式,利用工作方式3来计数时间,让其分频后产生100hz的方波,每100个周期即为1s,将这个方波作为中断源,通过8259A每10ms向CPU发出一次中断。然后我们将子程序Timer0的地址(CS以及IP)设置为中断向量,每次

    3、中断即执行这个子程序,在这个之程序中编写相应代码,看时间是否到1S,没到则跳出中断,等待下一次(1ms之后)中断到来,到1S则让时间+1并且重置计数值,再加上相应的时间显示程序,这样即可实现时间的自动增加与显示,可以当做一个计时器来用,这即是这个工程的主体部分。除此之外,还需要一部分程序来实现键盘输入相应时间,这里要注意时间的每一位都有取值方面的要求,这里就要通过一系列的CMP/JMP指令的组合来达到正确输入的效果,将顺序输入的时间存储起来,配合Timer0子程序即可输出当前设置的时间并且实现时间刷新。当然,如果选择不输入时间直接回车的话,程序可以从0开始计时,可以当成一个秒表。还有一些细节的

    4、设计如在计时过程中输入S可以重新设置时间,Ctrl+C可以退出这些也是利用CMP/JMP组合来实现。最后整个程序可以实现以下功能:可以设置开始时间然后自动计时,也可以当做秒表来使用,可以正常退出。开始关中断,保存源中断向量四:实验流程 否 是 是 否 是 否 否 是中断流程: 否 是 否是五:实验结果执行程序,输入格式不对时有错误提示:直接按回车,清屏后进入秒表计时模式:按下S后重新设置时间为12:34:10后开始计时:计时时按回车可以保存当前时间:利用ctrl+c退出:六:实验总结这次综合实验是很有难度的,它不仅需要对汇编语言有一定层次的了解,还需要对8259A与8253这两个硬件的工作方式

    5、很熟悉。通过不断的查找资料,参考学习,我终于完成了这次实验,在这个过程中我经历了许多也学习到了许多。首先得到提升的是我的debug能力,编的越多能力也就越强。除此之外,我对课本上学习到的微机原理有了更直观与深层次的了解,这对我使用计算机以及今后的学习都是非常有帮助的,最后,感谢这次实验给我带来的宝贵的经历。附录(源代码与子程序清单)data segmentcount100 db 100 ;100个10ms=1s,此处起计数作用msg1 db Please enter the current time(XX:XX:XX)!(Press ENTER to use default time)$msg

    6、2 db Input Error,please use the correct format!$msg3 db Now, the time is:,0ah,(Press Ctrl+C to EXIT.),0ah,(Press Enter to use as a Stopwatch.),0ah,(Press S or s to set current time again.)(XX:XX:XX)$msg4 db 0ah,Program EXIT.$tenhour db 0 ;小时十位数hour db 0,: ;小时个位数tenmin db 0 ;分钟十位数minute db 0,: ;分钟个位数

    7、tensec db 0 ;秒十位数second db 0 ;秒个位数data endsstack segment stack stackdb 256 dup(0)stack endscode segmentassume cs:code,ds:data,es:datastart: mov ax,seg datamov es,axmov ds,axcli ;置中断标志IF=0mov al,8 ;保存源中断向量,8中断为定时器mov ah,35h ;取中断向量,al为中断类型,ES:BX为中断向量int 21hpush espush bxmov ax,0mov es,ax ; es置零,这是准备中断

    8、向量的写入mov di,20hmov ax,offset Timer0 ;中断子程序timer的偏移量stosw ;字符串填充,将AX的内容;(timer偏移量)存入di所指向的单元, ;di的增减取决于DF,默认段基址总是ESmov ax,csstosw ;timer端基址mov al,36hout 43h,al ;设置8253控制字为36Hmov bx,11932 ;分频系数为11932,分频结果1.1932MHz/11932=100Hz,10ms变化一次mov al,bl ;分两次设置分频系数out 40h,almov al,bhout 40h,almov al,0fch ;主PIC端口

    9、设置为0fchout 21h,alsti ;开中断,允许外部中断mov ax,seg datamov es,axmov ds,axmov dx,offset msg1 ;打印提示信息1mov ah,09hint 21hmov dl,0ah ;回车mov ah,02hint 21hsettime:mov si,offset tenhour ;设定时间mov ah,01hint 21hcmp al,0dhjz forever1cmp al,0jc error2 ;如果输入不合法,报错cmp al,3jnc error2mov si,alinc sicmp al,2jz ershimov ah,01

    10、h ;如果小时高位为1,低位可以设置09int 21hcmp al,0dhjz forever1cmp al,0jc error2cmp al,9+1jnc error2mov si,alinc sijmp fenershi: mov ah,01h ;如果小时高位为2,低位可以设置04int 21hcmp al,0dhjz forever1cmp al,0jc error2cmp al,4jnc error2mov si,alinc sijmp fenfen: mov ah,01h ;分高位可设置05int 21hcmp al,0dhjz forever1cmp al,:jnz error1m

    11、ov si,alinc simov ah,01hint 21hcmp al,0dhjz forever1cmp al,0jc error1cmp al,6jnc error1mov si,alinc sizcy4: mov ah,01h ;分低位09int 21hcmp al,0dhjz forever1cmp al,0jc error1cmp al,9+1jnc error1mov si,alinc sijmp zcysettime2:jmp settime ;用来跳转接力error2: jmp error1forever1:jmp next2zcy: mov ah,01h ;秒高位可设置0

    12、5int 21hcmp al,0dhjz forever1cmp al,:jnz error1mov si,alinc simov ah,01hint 21hcmp al,0dhjz forever1cmp al,0jc error1cmp al,6jnc error1mov si,alinc simov ah,01h ;秒低位可设置09int 21hcmp al,0dhjz forever1cmp al,0jc error1cmp al,9+1jnc error1mov si,alinc sijmp next2error1: mov dl,0ah ;用来报错:设置时间不合法mov ah,02

    13、hint 21hmov dx,offset msg2 ;打印提示信息2mov ah,09hint 21hmov dl,0ahmov ah,02hint 21hjmp settimesettime3: jmp settime2 ;跳转接力next2: MOV AX,0003H ;做时钟显示初始化INT 10H ;清屏显示mov dl,0ahmov ah,02hint 21hmov dx,offset msg3 ;打印提示信息3mov ah,09hint 21hmov dl,0ahmov ah,02hint 21hforever:mov bx,offset tenhour ;这个程序段循环执行mo

    14、v cx,8cmp tenhour,2 ;如果超过24点,置为0点jnz dispclkcmp hour,4jnz dispclkmov tenhour,0mov hour,0dispclk:mov dl,bx ;用来显示当前时间call dispcharinc bxloop dispclk ;调用显示子程序,显示初始状态时间, ;比如”11:11:11mov dl,0dh ;输出一个换行call dispcharxor al,al ;读键盘缓冲区mov ah,0bhint 21hcmp al,0FFHjnz next3mov ah,08h ;取其字符int 21hcmp al,03h ;Ct

    15、rl+C退出jz stopcmp al,s ;S/s设定时间jz settime3cmp al,Sjz settime3cmp al,0dhjnz next3mov dl,0ah ;回车则使用秒表功能mov ah,02hint 21hjmp forevernext3: mov al,secondnext: cmp al,second ;判断second是否发生变化je next ;如果没有,循环比较jmp forever ;如果有变化,刷新输出stop: mov dx,offset msg4 ;打印提示信息4mov ah,09hint 21hmov dl,0ahmov ah,02hint 21

    16、hpop dx ;恢复中断向量pop dsmov al,8mov ah,25h ;25H 设置中断向量int 21hmov ah,4chint 21hTimer0 proc far ;中断程序timerpush axdec count100 ;计数100次jnz timerx ;如果计数小于100,跳出中断mov count100,100 ;否则重置count100=100;1s已经到达inc second ;加一秒cmp second,9 ;判断大小,用于进位,以下原理相同jle timerxmov second,0inc tenseccmp tensec,6jl timerxmov ten

    17、sec,0inc minutecmp minute,9jle timerxmov minute,0inc tenmincmp tenmin,6jl timerxmov tenmin,0inc hourcmp hour,9ja adjhourcmp hour,3jnz timerxcmp tenhour,1jnz timerxmov hour,1mov tenhour,0jmp short timerx ;段内短转移adjhour:inc tenhourmov hour,0timerx: mov al,20hout 20h,al ;主PIC口地址pop ax ;出栈恢复iret ;中断返回Timer0 endpdispchar proc near ;显示子函数push bx ;入栈保护mov bx,0mov ah,02hint 21h ;DOS功能调用,输出DL内容pop bxretdispchar endpcode endsend start子程序清单:子程序名:Timer0功能:通过计数是否到100次(1s)来控制中断,时间增加所用寄存器:AX入口参数:无出口参数:无调用其他子程序:无子程序名:dispchar功能:显示字符所用寄存器:AH,BX,DL入口参数:DL出口参数:无调用其他子程序:无


    注意事项

    本文(北邮微机原理中断程序报告.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

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

    收起
    展开