| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 584 人关注过本帖
标题:一个定时器,用的1CH,如何实现——若键入a,则保留旧时间,重新另起一行开 ...
只看楼主 加入收藏
xal319
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-11-13
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:1 
一个定时器,用的1CH,如何实现——若键入a,则保留旧时间,重新另起一行开始计时
以下(8086汇编)代码实现了从0到59的计时并显示
    INTNO EQU 1CH
    USEINT = 1

    DATA SEGMENT
      OLDISR DW ?,?
      TIMER DB 100
      COUNTER DW 0
      ISDONE DB 0
    DATA ENDS
   
    CODE SEGMENT
      ASSUME CS:CODE,DS:DATA
START:
      MOV AX,DATA
      MOV DS,AX
      
      MOV AX,0
      MOV ES,AX
      
      ;PROTECT
    IF USEINT
      MOV AL, INTNO
      MOV AH,35H
      INT 21H
      ;ES:BX
      MOV OLDISR[0], BX
      MOV AX,ES
      MOV OLDISR[2], AX
    ELSE  
      CLI
      MOV AX, ES:[INTNO*4]
      MOV OLDISR[0],AX
      MOV AX,ES:[INTNO*4+2]
      MOV OLDISR[2], AX
      STI
    ENDIF
   
      ;SET NEW ISR
    IF USEINT
      PUSH DS
      MOV AX, SEG ISR
      MOV DS,AX
      MOV DX, OFFSET ISR
      MOV AL, INTNO
      MOV AH, 25H
      INT 21H
      POP DS
    ELSE  
      CLI
      MOV WORD PTR ES:[INTNO*4], OFFSET ISR
      MOV WORD PTR ES:[INTNO*4+2],SEG ISR
      STI
    ENDIF

    ;WAIT HERE
WAITHERE:
        CMP     ISDONE,1
        JNZ     WAITHERE
  
  
EXIT:     
    ;RESTORE
   IF USEINT
      PUSH DS
      MOV DX,OLDISR[0]
      MOV AX,OLDISR[2]
      MOV DS,AX
      MOV AL, INTNO
      MOV AH, 25H
      INT 21H
      POP DS
    ELSE  
      CLI
      MOV AX,OLDISR[0]
      MOV ES:[INTNO*4],AX
      MOV AX,OLDISR[2]
      MOV ES:[INTNO*4+2],AX
      STI
    ENDIF
        
      MOV AX,4C00H
      INT 21H
      
ISR PROC FAR
        PUSH DX
        PUSH AX
        
        MOV AX,DATA
        MOV DS,AX

        STI               ;便于中断嵌套

       ;COUNT HERE
        INC TIMER
AGAIN:
        CMP TIMER, 1000/55  ;18
        JB DONE
        MOV TIMER,0


        ;carriage
        MOV AH,2
        MOV DL,13
        INT 21H

        ;print time
        MOV AX,COUNTER

        MOV DL,10
        DIV DL
        MOV DH,AH
        MOV DL,AL
        MOV AH,2
        ADD DL,30H
        INT 21H
        MOV DL,DH
        ADD DL,30H
        INT 21H
      
        inc COUNTER
    cmp    COUNTER,59
        jbe    DONE
        MOV ISDONE,1
    jmp    DONE

DONE:
        PUSHF
        CALL DWORD PTR OLDISR

        CLI
        POP AX
        POP DX
        IRET             ;中断返回
ISR ENDP


CODE ENDS
      END START
如何修改,使得——若键入a,则保留旧时间,重新另起一行开始计时
用21h的0B功能
搜索更多相关主题的帖子: 定时器 如何 
2011-11-13 12:01
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:20 
那就用咯,都有系统调用了,看看系统调用和键盘相关的几个
保留旧的时间么,也有系统调用的
另起一行么,就是设置下光标位置,也有系统调用的
你完全可以写3个小程序,写完了,调好了,再整到一起
1.读键盘值
2.显示系统时间
3.屏幕设置光标

技术问题,请不要以短消息方式提问
2011-11-18 12:57
快速回复:一个定时器,用的1CH,如何实现——若键入a,则保留旧时间,重新另起一 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016878 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved