微机接口课程设计(电子钟).doc_第1页
微机接口课程设计(电子钟).doc_第2页
微机接口课程设计(电子钟).doc_第3页
微机接口课程设计(电子钟).doc_第4页
微机接口课程设计(电子钟).doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微机原理与接口技术 -电子钟实验 2011年1月5日 一 实验任务及要求 任务:1、掌握综合使用基本输入输出设备、通用接口芯片、专用接口芯片的方法;2 、掌握实时处理程序的编制和调试方法。要求设计一个定时显示装置,用实验仪左侧的六个led数码管显示时间,时间显示格式为24小时制。分秒值为59分55秒时开始报时,每秒钟蜂鸣器鸣叫一声,到整点报时停止。 用小键盘控制时钟的启停和时钟的设置,键的定义参见左图0123456789gs键值具体定义如下:g键(启停键) 程序启动后,按下该键时 钟启动; 再次按下该键,暂停计时,显示当前时间。s键(设置键) 按下s键后,为时钟设置时、分、秒初始值。二 硬件连线 键盘的控制、led显示模块:采用74系列模块控制键盘的行信号q_0、q_1、q_2、q_3分别与开放的输入信号q0、q1、q2、q3相连,键盘的列信号p_0、p_1、p_2和开放的输出信号p0、p1、p2相连。74芯片的片选信号cs1接地址译码信号340h, cs2接地址译码信号360h。时间的精确定时:用8254定时器0产生25ms的中断信号;8254的片选cs连地址输出端320h,a0,a1分别连地址总线a2,a3,gate0连+5v,clk0连74ls393分频输出的47k输出端,out0连接到8259的irq0整点报时控制:由8255模块控制;pc0直接与蜂鸣器相连,cs_4连接到实验仪中部的地址输出端cs_4中断处理模块:由8259控制8259的片选cs-1连地址输出300h, int1连总线输入intr,8259模块的int-a连总线的inta,8259的sp/1连+5v。三、程序流程图主程序初始化各段寄存器及相关变量初始化8255、8254、8259芯片设置中断向量,开放8259中断屏蔽开放处理器中断中断服务程序保护现场ny判断时间是否不小于59分55秒 报时n扫描键盘yg键?调用启停子程序ys键?调用设置时间子程序count加1ycount=40?修改时间,调用addone子程序count清0显示时间,调用显示时间子程序n结束中断(发eoi命令)恢复现场中断返回四、实验源代码.486p data segment at 0 use16org 1000hhour dw ?min dw ?sec dw ?sto db ?count db ?data endscode segment use16 assume cs:code,ds:data org 1500h beg: jmpstart tab db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,77h,7ch,00h ;0f的共阴极七段译码表 00h表示不显示任何东西 keycod db 0eeh,0deh,0beh,0edh,0ddh,0bdh,0ebh,0dbh,0bbh,0e7h,0d7h,0b7h ;行列编码值 keyval db 0,1,2,3,4,5,6,7,8,9,0ah,0bh ;所有键的键面值port1 equ340h ;数码管段选端口 port2 equ360h ;数码管位选端口,键盘矩阵的行列端口start: moveax,60000000hmov cr0,eax mov ax,datamov ds,axmov hour,0203h ;小时分钟以及秒的初始化mov min,0509hmov sec,0502h lea bx,tabmov sto,0 ;开始暂停标志位置0mov count ,0 ;中断次数计数初始值为0;8255初始化 ,用于产生报时的脉冲 mov dx,20fh ;利用左四的8255,控制口为20fhmov al,10000000b ;c口输出out dx,almov dx,20bh ;c0输出1,蜂鸣器不响 mov al,0ffh out dx,al ;8254初始化,用于产生周期为25ms的中断mov al,00110110b ;计数器0,先低后高,方式三,二进制mov dx,32ch ;写往控制口out dx,almov dx,320h ;计数器0写初值:47khz*25msmov ax,1175out dx,almov al,ahout dx,al ;8259初始化 cli :关中断mov dx,300h ;icw1mov al,00010011bout dx,al mov dx,308h ;icw2mov al,08h ;ir0中断类型号为08hout dx,almov al,00000001b ;icw4out dx,al mov al,0feh ;ir0开屏蔽 out dx,al xor ax,ax ;装载中断向量 mov es,axmov di,08h*4 mov ax,offset intsr mov es:di,ax mov ax,seg intsr mov es:di+2,ax sti ;开中断 jmp $ intsr proc ;中断服务程序 cmp min,0509h ;比较当前时间是否在59分55秒00分00秒之间 jl next1 cmp sec,0505h jl next1 mov dx,20bh mov al,00h ;蜂鸣器低有效,报时 out dx,al jmp next2next1: cmp min,0 jne next3 cmp sec,0 jne next3 mov dx,20bh mov al,00h ;蜂鸣器低有效,报时 out dx,al jmp next2next3: mov dx,20bh mov al,0ffh out dx,alnext2: cmp count,20 ;用8255产生0.5ms的蜂鸣 jle next4 mov dx,20bh mov al,0ffh out dx,alnext4: call keycheck ;检测有无键按下 cmp al,0ah ;启停键按下,调用启停程序 jnz next5 call tstart jmp next6next5: cmp al,0bh ;设置键按下,调用设置时间程序 jnz next6 call settimenext6: inc count ;当count直为40时,加一秒,之后置0 cmp count,40 ;25ms*40=1s jb next7 call addone mov count,0next7: call show ;显示时间 mov al,20h ;发eoi命令,结束中断 mov dx,300h out dx,al iretintsr endptstart proc ;控制暂停和开始 cmp sto,00h jne ll1 dec sto jmp ll2 ll1: inc sto ll0: call keycheck cmp al,0ah jz ll2 call show jmp ll0 ll2: rettstart endpaddone proc ;加1秒子程序 mov ax,sec ;当前秒个位为9,加1后变0,十位加1 cmp al,9 je n1 inc al mov sec,ax jmp n6n1: inc ah mov al,0 cmp ah,6 ;十位加1后为6,则秒变为00,分钟个位加1 je n2 mov sec,ax jmp n6n2: mov ax,0 mov sec,ax mov ax,min ; 当前分钟个位为9,加1后变0,十位加1 cmp al,9 je n3 inc al mov min,ax jmp n6n3: inc ah mov al,0 cmp ah,6 ;十位加1后为6,则分钟变为00,小时个位加1 je n4 mov min,ax jmp n6n4: mov ax,0 mov min,ax mov ax,hour inc al cmp ax,0204h ;小时加1后与24比,相等,则变为0 je n5 mov hour,ax jmp n6n5: mov ax,0 mov hour,axn6: retaddone endp settime proc ;设置时间子程序 lea bx,tab mov hour,0 mov min,0 mov sec,0 nop nopl1: call keycheck ;调用keycheck,无键按下时,al中值为0ch call delay cmp al,0ch jnz l2 jmp l1l2: cmp al,02h jg l1 ;设置小时十位时,将其他各位数码管灭掉及对应的七段译码表0ch mov ah,al mov byte ptrhour+1,al mov byte ptrhour,0ch mov min,0c0ch mov sec,0c0chl3: call show call keycheck ;设置小时的个位 call delay cmp al,0ch jz l3 mov ah,byte ptrhour+1l4: cmp ax,0204h jge l1 mov hour,axl5: call show call keycheck ;设置分钟的十位 call delay cmp al,0ch jz l5l6: cmp al,06h jge l1 mov ah,al mov byte ptrmin+1,al l7: call show call keycheck ;设置分钟的个位 call delay cmp al,0ch jz l7 mov ah,byte ptrmin+1 l8: cmp ax,0509h jg l1 mov min,ax l9: call show call keycheck ;设置秒的十位 call delay cmp al,0ch jz l9 l10: cmp al,06h jge l1 mov ah,al mov byte ptrsec+1,all11: call show call keycheck ;设置秒的个位 call delay cmp al,0ch jz l11 mov ah,byte ptrsec+1l12: cmp ax,0509h jg l1 mov sec,axl13: call show call keycheck ;再次按键,启动计时 call delay cmp al,0ch jz l13 retsettime endpkeycheck proc ;判断有无键按下子程序 push bx call clear movdx,port2 inal,dx andal,0fh cmpal,0fh jzexit ;有按键按下,延时消抖 nop nop ;再次确认是否有键按下 inal,dx andal,0fh cmp al,0fh jzexit ;开始对每一列进行逐行扫描 movcx,3 movbl,0fehnext:moval,bl movdx,port2 outdx,al nop nop inal,dx and al,0fh cmp al,0fh jnz key rolbl,1 loop next jmp exitkey: shl bl,4 or al,bl ;形成一个字节的键码信息存入al,高4位为列信息低4位为行信息 lea si,keycod lea di,keyval mov cx,12next11: cmp al,si jz find inc si inc di loop next11 jmp exitfind: mov al,di ;al中内容为所按键的键面值 push ax nop nopwait1: in al,dx ;判断按键是否已释放,若无则等待 and al,0fh cmp al,0fh jnz wait1 pop ax jmp exit2 exit:mov al,0ch exit2:nop pop bx retkeycheck endpshow proc ;显示时间 mov ax,hour xlat mov dx,port1 ;段选输出数据 out dx,al mov dx,port2 ;位选输出小时的个位 mov al,0c2h out dx,al call delay call clear mov al,ah xlat mov dx,port1 ;段选输出数据 out dx,al mov dx,port2 ;位选输出小时的十位 mov al,0c1h out dx,alcall delay call clear mov ax,min xlat mov dx,port1 ;段选输出数据 out dx,al mov dx,port2 ;位选输出分钟的个位 mov al,0c8h out dx,al call delay call clear mov al,ah xlat mov dx,port1 ;段选输出数据 out dx,al mov dx,port2 ;位选输出分钟的十位 mov al,0c4h out dx,alcall delay call clear mov ax,sec xlat mov dx,port1 ;段选输出数据 out dx,al mov dx,port2 ;位选输出秒的个位 mov al,0e0h out dx,alcall delay call clear mov al,ah xlat mov

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论