微机秒表实验

DATA    SEGMENT
CWORD DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH    ;数码管共阴极结构,数据段为数码管显示的段选码
DATA ENDS 

CODE    SEGMENT
    ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
    MOV DS,AX

    MOV DX,0606H        ;(A:0600H,B:0602H,C:0604H,8255控制端口:0606H)
    MOV AL,10000001B    ;(PC3-PC0输入1),选择c口低4位为输入口,a、b、c高四位口输出,工作方式都为0,
    OUT DX,AL        ;8255控制字写入

    MOV DX,0646H
     MOV AL,00110000B    ;选择PC0,读/写先低后高,方式0
    OUT DX,AL        ;8254控制字写入

    MOV DX,0640H        

    MOV AL,00H    
    OUT DX,AL
    MOV AL,48H    
    OUT DX,AL
ZERO: MOV CX,00H        ;CX从零开始计数
LP1:  MOV DX,0604H
    IN AL,DX
    TEST AL,4        ;判断第二位是否为1(pc2)
    JNZ START        ;非零转移(ZF=0)

    AND AL,00000001B
    CMP AL,00000001B    ;C口的最后一位(连接计数器0 OUT端口)的状态,判断开关是否打开
    JC KEEP        ;计数器为暂停态,状态保持

    INC CX
    CMP CX,64H        ;两位数计时最大值为99,再inc一次后等于64H
    JE ZERO        ;到达最大值后秒表自动复位(ZF=1)

    MOV DX,0640H        
    MOV AL,00H        ;?选择PC0,锁存计数值,方式0
    OUT DX,AL
    MOV AL,48H        ;?选择PC1,锁存计数值,方式4
    OUT DX,AL
KEEP: MOV AL,CL     
LP2:  XOR AH,AH    
    MOV BL,0AH
    DIV BL            ;将时间转换为十进制,个位十位分离,AL为十位,AH为个位
    CALL NUMBER        ;AL寄存器转换为对应字形码
    MOV DX,0600H
    OUT DX,AL        ;数码管显示数字
    MOV DX,0604H
    MOV AL,01111111B    ;pc7
    OUT DX,AL        ;选中十位数字的数码管
    MOV AL,11111111B    ;
    OUT DX,AL        ;数码管全灭,防止两数码管互相干扰
    MOV AL,AH
    CALL NUMBER 
    MOV DX,0600H
    OUT DX,AL
    MOV DX,0604H
    MOV AL,10111111B    
    OUT DX,AL
    OR CX,CX
    JNZ LP1        ;若一个完整周期未结束,cx继续数秒
    JMP ZERO        ;若结束,CX重置,开始下一周期计数
    MOV AH,4CH
    INT 21H
NUMBER PROC NEAR
    MOV BX,AX
    XOR BH,BH
    MOV AL,[CWORD+BX]
    RET
NUMBER ENDP
CODE ENDS
    END START
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值