华北科技学院课程设计报告
4.2、电子时钟中断处理程序流程图:
N 保护寄存器 计数单元减将字符转换为段码 输出段码 计满1秒了 Y
N 秒位加1 计满10秒了吗? Y 输出位码 位码右移1恢复寄存器 中断返回
N N N N 10秒位加1 计满60秒了Y 分位加1 计满10分了Y 10分位加1 计满60分了Y 时位加1 计满10小时了Y 10时位加1 10
华北科技学院课程设计报告
4.3、显示模块流程图:
4.4、程序代码: code segment
assume cs:code,ds:code start:
mov ax,cs mov ds,ax
mov bp,0064h ;设置计数初值 jmp start1 portbit equ 208h
11
开始 时、分转化为十进制,存到内存单元计算时、分的各位数值在TABLE中对应编码 依次在61H段输出到LED显结束 华北科技学院课程设计报告
portseg equ 209h start1:
mov dx,20bh mov al,10000001b
out dx,al ;8255初始化
******************************************************* mov al,34h mov dx,203h
out dx,al ;8253写控制字 mov dx,200h mov ax,10000d out dx,al mov al,ah
out dx,al ;8253初始化 ******************************************************* mov al,13h ;8259初始化 mov dx,210h
out dx,al ;ICW1初始化 mov al,08h mov dx,211h
out dx,al ;ICW2初始化 mov al,01h
out dx,al ;ICW4初始化 in al,dx and al,0feh
12
华北科技学院课程设计报告
out dx,al ;OCW1打开非屏蔽位 ******************************************************* push ds
mov ax,0 mov ds,ax mov ax,offset intr mov ds:word ptr[4*8],ax mov ax,cs
mov ds:word ptr[4*8+2],ax ;设置中断向量 pop ds
*************************************************** ;主程序开始 ab: mov dx,20ah in al,dx and al,1
cmp al,01h ;判断时钟是否启动 jz intr1 ;若启动,则开中断 call showhello ;没启动,则转显示 cli ;关中断 jmp ab
intr1: sti ;开中断 jmp ab ;检测时钟状态 ******************************************************* ;初始界面显示程序 showhello:
13
华北科技学院课程设计报告
lea bx,TABLE lea di,BUFDA
mov cl,11011111b ;位码 next:
mov dx,208h mov al,cl
out dx,al ;输出位码 mov al,[di+06] ;取段码 xlat
mov dx,209h ;输出段码 out dx,al push cx mov cx,30h delay1:
loop delay1 ;软件延迟 pop cx
cmp cl,11111110b ;判断是否扫完一遍 jz aaaa ;显示完一遍则返回 inc di
ror cl,1 ;循环右移一位 jmp next aaaa: ret
******************************************************* ;中断处理程序 intr proc near
14