电子秒表项目:汇编语言课程设计

前言.课程设计(论文)任务书

课程名称

汇编语言与微机接口

课设题目

电子秒表

项目 C

设计任务

设计一个可任意启动/停止的电子秒表,有6位LED数码管显示,可以显示分、秒、单位时间计时单位为1/100秒。

设计要求

1.硬件测试通过。8259 能够实现中断。8254 能够实现呼吸灯。8255 能够控制 L8— L15 的亮与灭。

2.  采用定时中断方式实现时、分、秒的计时。

3.  二进制到十进制的代码转换程序。

4.  十进制到显示代码的查表转换程序。

5.  数码管动态显示程序。

6.  START  STOP 代码。

7.  利用启动/暂停功能进行启动/暂停控制。

8.  用复位键清零。

成果要求

1. 设计出完整的硬件线路图。

2、编写出全部控制程序。

3、在实验箱上调试通过。

4、参加答辩或小测验。

5、写出完整、规范的课程设计报告。在指定的时间内提交指导教师。

其他事项

课程设计的封面、内容要求以及格式要求等相关资料,请参看附件。格式 必须按照要求编辑、打印、装订。如不符合要求的将按不合格处理。在课程

设计中严禁出现相互抄袭、雷同的情况。如有发现,将按照零分处理。

一、设计目的

1. 掌握电子秒表的工作原理。

2. 进一步巩固 8259  8254 以及 8255 的应用。掌握综合设计能力。

二、设计任务与要求

2.1设计任务:

设计一个可任意启动/停止的电子秒表   6  LED 数码管显示, 可以显示分、

秒、单位时间  计时单位为 1/100 秒。利用启动/暂停功能键进行启/停控制。有复 位键。

2.2设计要求如下 

  1. 1.硬件测试通过。8255 基本 IO 实验通过。8254 能够实现呼吸灯。8259 能够实 现中断。
  2. 2 .    采用定时中断方式实现分、秒、单位时间的计时。
  3. 3 .    上电后 ,计时器显示 00:00:00 
  4. 4 .    当第一次(或奇数次)按下启/停键时开始计时 
  5. 5 .     2 次(或偶数次) 按下该键时暂停计时。
  6. 6 .    只有在暂停状态时,按复位键后又进入初始状态。再一次按启/停键时重新开始计时。
  7. 7.     单位时间 100 进位。秒和分 60 进位
  8. 8      如此往复

三、设计方案

3.1设计思路以及教师问题解答

      首先利用8254芯片的定时功能向8259芯片定时发送中断请求,从而调用中断服务子程序MIR7,在MIR7中通过8255芯片首先实现了秒表的基本输出。

        而在输出的规律是单位时间100进位,秒和分60进位。而因为本方案设置数码管每次只显示一位,所谓六位数码管从后向前依次是满10进一,满10进一,满10进一,满6进一,满10进一,满6清零。所以每次显示的变化本质上都是由最低位控制的,所以本方案秒表的基本输出就是由最低位的进位控制。

        而本方案的启动/停止功能和清零功能都是通过在最低位自加处的判断而实现的。启动/停止功能由KK1开关控制的中断服务子程序MIR6控制,而在MIR6子程序中只是实现了启停控制量STATUS的自加,每次点击一次KK1,STATUS就会+1,也就是相当于在奇数和偶数之间相互循环,而在MIR7程序中在最低位自加之前会有一个TEST指令的判断,将STATUS与01H进行相与,如果STATUS是偶数,则自动跳转到只显示当前六位数码管数值的子程序中;如果是奇数,则最低位自加循环输出六位数码管;从而实现了动态方式下得启动和暂停。

        清零功能和启动/停止功能相似,清零功能由KK2开关控制的中断服务子程序SIR1控制,而在SIR1子程序中只是实现了启停控制量STATUS1的自加,每次点击一次KK2,STATUS1就会+1,也就是相当于在奇数和偶数之间相互循环,而在SIR1程序中在最低位自加之前会有一个TEST指令的判断,将STATUS与01H进行相与,如果STATUS是偶数,则自动跳转到只显示全零的六位数码管数值的子程序中;如果是奇数,则最低位自加循环输出六位数码管;从而实现了动态方式下的清零。

使用的 I/O 设备

   本实验使用的I/O 设备为六位LED数码管

使用的芯片

  8259芯片、8255芯片、8254芯片

芯片的作用

  •   8259芯片:用于接受8254芯片的中断请求和开关KK1,KK2的中断请求。
  •   8255芯片:用于实现对数码管的输出。
  •   8254芯片;用于定时中断。

四、源代码

1、参考程序
PP8255A EQU 0600H 
P8255B EQU 0602H 
P8255C EQU 0604H 
P8255M EQU 0606H
TIMER0 EQU 06C0H
TIMER1 EQU 06C2H
TIMER2 EQU 06C4H
TIMERM EQU 06C6H
DATA SEGMENT 
DISCODE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;0--7 的显示代码
DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H ;8--F 的显示代码
INDEX DB 00H,00H,00H,00H,00H,00H,0CCH,0CCH


DYNBUFF DB 00H,00H,00H,00H,00H,00H,00H,00H ;动态显示缓冲
LOCATN DB 00H,00H,00H,00H,00H,00H,00H,00H ;动态显示位置控制
MINUTE DB 0 ;分钟
SECOND DB 0 ;秒
UINTIME DB 0 ;单位时间
COUNT DB 100
DATA ENDS
SSTACK SEGMENT PARA STACK 'STACK'
DW 32 DUP(?)
SSTACK ENDS
CODE SEGMENT 
ASSUME CS:CODE, DS:DATA,SS: SSTACK
 START: MOV AX,DATA
MOV DS,AX

;--------------------------------------------------------------- 8255 初始化
INITA: NOP
;--------------------------------------------------------------- 中断芯片
INITB: PUSH DS
MOV AX,0000H
MOV DS,AX
MOV AX,OFFSET MIR7
MOV SI,003CH
MOV [SI],AX
MOV AX,CS
MOV SI,003EH
MOV [SI],AX
MOV AX,OFFSET MIR6
MOV SI,0038H
MOV [SI],AX
MOV AX,CS
MOV SI,003AH
MOV [SI],AX
MOV AX, OFFSET SIR1 
MOV SI, 00C4H 
MOV [SI], AX 
MOV AX, CS 
MOV SI, 00C6H 
MOV [SI], AX 
CLI
POP DS
;--------------------------------------------------------------- 主
MOV AL,11H
OUT 20H,AL ;ICW1
MOV AL,08H

OUT 21H,AL ;ICW2
MOV AL,04H
OUT 21H,AL ;ICW3
MOV AL,01H
OUT 21H,AL ;ICW4
;-------------------------------------------------------------初始化从片 8259 
MOV AL, 11H 
OUT 0A0H, AL ;ICW1 
MOV AL, 30H 
OUT 0A1H, AL ;ICW2 
MOV AL, 02H 
OUT 0A1H, AL ;ICW3 
MOV AL, 01H 
OUT 0A1H, AL ;ICW4
;---------------------------------------------------------------
MOV AL, 0FDH ;OCW1 = 1111 1101B
OUT 0A1H,AL 
MOV AL,2BH ;OCW1 = 00101011B
OUT 21H,AL
STI
AA1: NOP
JMP AA1
;--------------------------------------------------------------- 定时器芯片
INITC: MOV DX, TIMERM
MOV AL,36H
OUT DX,AL
MOV DX, TIMER0 ;计数器 0
MOV AL,0E8H
OUT DX,AL
MOV AL,03H
OUT DX,AL
MOV DX, TIMERM
MOV AL,76H
OUT DX,AL
MOV DX, TIMER1 ;计数器 1
MOV AL,0E8H
OUT DX,AL
MOV AL,03H
OUT DX,AL
;---------------------------------------------------------------
BEGIN: NOP
AA2: JMP AA2
;---------------------------------------------------------------
MIR7 PROC NEAR
PUSH AX
PUSH DX
MOV AX,0137H
INT 10H
MOV AX,0120H
INT 10H
MOV AL,20H
OUT 20H,AL
POP DX
POP AX
IRET
MIR7 ENDP
;---------------------------------------------------------------
MIR6 PROC NEAR
PUSH AX
PUSH DX
MOV AL,20H
OUT 20H,AL
POP DX
POP AX
IRET
MIR6 ENDP
SIR1 PROC NEAR
PUSH AX
PUSH DX
MOV AL, 20H 
OUT 0A0H, AL 
OUT 20H, AL
POP DX
POP AX
IRET
SIR1 ENDP
CODE ENDS
END START

CODE ENDS
END START
2.最终程序清单
MYDATA SEGMENT
                
        LED DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH  
        ;8255端口      
        PA DW 0640H ;
        PB DW 0642H ;
        PC DW 0644H ;
        CWR55 DW 0646H ;
        ;8259主片地址端口
        ICW1 DW 20H
        ICW2 DW 21H
        ICW3 DW 21H
        ICW4 DW 21H
        OCW1 DW 21H
        OCW2 DW 20H
        OCW3 DW 20H
        ;8259从片地址端口
        ICWW1 DW 0A0H
        ICWW2 DW 0A1H
        ICWW3 DW 0A1H
        ICWW4 DW 0A1H
        OCWW1 DW 0A1H
        OCWW2 DW 0A0H
        OCWW3 DW 0A0H
        ;数码管 
        L0 DB 00H
        L1 DB 00H
        L2 DB 00H
        L3 DB 00H
        L4 DB 00H
        L5 DB 00H
        ;控制暂停和启动的信号量
        STATUS DW 00H   
        ;控制清零的信号量
        STATUS1 DW 01H  
        
MYDATA ENDS
;----------------------------------------
SSTACK SEGMENT STACK 
DW 32 DUP(?)
SSTACK ENDS
;-------------------------------------------
MYCODE SEGMENT
ASSUME CS:MYCODE, SS:SSTACK,DS:MYDATA

START: 
                ;8255初始化
                MOV AX, MYDATA
                MOV DS, AX
                MOV DX, CWR55
                MOV AL, 80H
                OUT DX, AL
                
                MOV DX,PA
                MOV AL,00H ;选定所有数码管
                OUT DX,AL
                
                MOV DX,PB
                MOV BX,OFFSET LED
                MOV AL,00H  ;所有数码管最开始显示0
                XLAT
                OUT DX,AL
;-------------------------------------------------              
                ;8254初始化
                MOV DX,06C6H
                MOV AL,00110110B 
                OUT DX,AL
                
                MOV DX,06C0H
                MOV AL,00H
                OUT DX,AL
                
                MOV DX,06C0H
                MOV AL,48H
                OUT DX,AL
;--------------------------------------------------------------   
;初始化中断向量表             
        ;MIR6
        MOV AX,00H
        MOV ES,AX
        MOV BX,0038H
        MOV AX,OFFSET MIR6
        MOV ES:[BX],AX
        MOV AX,CS
        MOV ES:[BX+2],AX
        ;MIR7
        MOV AX,00H
        MOV ES,AX 
        MOV BX,003CH
        MOV AX,OFFSET MIR7
        MOV ES:[BX],AX
        MOV AX,CS
        MOV ES:[BX+2],AX
        ;SIR1   
         MOV AX,00H
        MOV ES,AX 
        MOV BX,00C4H
        MOV AX,OFFSET SIR1
        MOV ES:[BX],AX
        MOV AX,CS
        MOV ES:[BX+2],AX
        ;8259主片控制字初始化
        CLI
        MOV DX,ICW1
        MOV AL,00010001B 
        OUT DX,AL
        
        MOV DX,ICW2
        MOV AL,08H 
        OUT DX,AL
        
        MOV DX,ICW3
        MOV AL,00000100B  
        OUT DX,AL
        
        MOV DX,ICW4
        MOV AL,00000001B 
        OUT DX,AL
      
        ;8259从片控制字初始化
        MOV DX,ICWW1
        MOV AL,00010001B
        OUT DX,AL
        
        MOV DX,ICWW2
        MOV AL,30H 
        OUT DX,AL
        
        MOV DX,ICWW3
        MOV AL,00000010B  
        OUT DX,AL
        
        MOV DX,ICWW4
        MOV AL,00000001B
        OUT DX,AL
  ;    从片中断屏蔽控制字初始化      
        MOV DX,OCWW1   
        MOV AL,0FDH    ;11111101B
        OUT DX,AL
     ;主片中断屏蔽控制字初始化   
        MOV DX,OCW1
        MOV AL,2BH     ;00101011B
        OUT DX,AL
        STI
        

AA1:     JMP AA1                                
;------------------------------------------
;SIR1作用是将清零控制字+1
SIR1 PROC       
        CLI
        INC STATUS1 
        MOV DX,OCWW2
        MOV AL,00100000B
        OUT DX,AL
        MOV DX,OCW2
        MOV AL,00100000B
        OUT DX,AL 
        STI
     
SIR1 ENDP       
 
JMP MIR7
;MIR6作用是将启动暂停控制字+1
MIR6 PROC       
        CLI
        INC STATUS
        MOV DX,OCW2
        MOV AL,00100000B
        OUT DX,AL 
        STI
MIR6 ENDP                                               

;MIR7作用是一直在循环显示数码管                                                              
MIR7 PROC    ; 59 59 99    00 00 00
SKIP1:  CMP L0,9;9
        JBE T0
        MOV L0,00H
        INC L1
        
  T0:   CALL LED0
        CALL DELAY
        
        CMP L1,9;9
        JBE T1
        MOV L1,00H
        INC L2
       
  T1:   CALL LED1
        CALL DELAY
        
        
        CMP L2,9;9
        JBE T2
        MOV L2,00H
        INC L3   
        
  T2:  
        CALL LED2
        CALL DELAY
         
        
        CMP L3,5
        JBE T3
        MOV L3,00H
        INC L4  
  T3:   
        CALL LED3
        CALL DELAY
      
        CMP L4,9
        JBE T4
        MOV L4,00H
        INC L5
  T4:   
        CALL LED4
        CALL DELAY
       
       
        CMP L5,5
        JBE T5  
        CALL CLEAR
        JMP TO
  T5:
        CALL LED5
        CALL DELAY
      ;----------------------------------------------
  TO:      
        TEST STATUS1,01H  ; 如果是偶数则直接跳转到清零,如果是奇数则继续判断启动还是暂停
        MOV STATUS1,01H   ;判断完成将判断为重置为奇数
        JZ   OUT_2
        
       
        TEST STATUS,01H   ;如果是偶数则直接跳转到暂停;如果是奇数则让末位+1实现运转
        JZ OUT_1
        
        INC L0 
        JMP SKIP1
        
OUT_1:  ;利用无限循环重复输出一组数据,达到动态暂停显示的效果     
        STOPS:  
                
                CALL LED0
            CALL DELAY
                CALL LED1
                 CALL DELAY
                CALL LED2
                 CALL DELAY
                CALL LED3
                 CALL DELAY
                CALL LED4
                  CALL DELAY
                CALL LED5
                  CALL DELAY
                JMP STOPS       
                
OUT_2:    ;无限循环输出全零达到动态清零显示效果
                
        STOPS1: 
        
                MOV L0,0
                MOV L1,0
                MOV L2,0
                MOV L3,0
                MOV L4,0
                MOV L5,0
                
                CALL LED0
                CALL LED1
                CALL LED2
                CALL LED3
                CALL LED4
                CALL LED5
                
                JMP STOPS1      
                 
                 
        MOV DX,OCW2
        MOV AL,00100000B
        OUT DX,AL       
        
MIR7 ENDP 

JMP AA1
 ;清零函数
CLEAR PROC

                MOV L0,0
                MOV L1,0
                MOV L2,0
                MOV L3,0
                MOV L4,0
                MOV L5,0
                
                RET
                
CLEAR ENDP              
        

;-------------------------------------延时函数-------------------
DELAY PROC
PUSH SI
PUSH CX
MOV SI, 0040H
D11: MOV CX,000FH
D22: LOOP D22
DEC SI
JNZ D11 
POP CX
POP SI
RET
DELAY ENDP
;利用查表法将数据显示到相应的单独数码管
LED0 PROC
        PUSH DX
        PUSH AX
       ; PUSH BX
        
        MOV DX,PA
        MOV AL,11111110B;SPOINT
        OUT DX,AL
      
        MOV BX,OFFSET LED
        MOV AL,L0
        XLAT
        MOV DX,PB
        OUT DX,AL
      ;  

        POP AX
        POP DX
        
        RET
        
LED0 ENDP         
    
LED1 PROC
        PUSH DX
        PUSH AX
        
        MOV DX,PA
        MOV AL,11111101B;SPOINT
        OUT DX,AL
      
        MOV BX,OFFSET LED
        MOV AL,L1
        XLAT
        MOV DX,PB
        OUT DX,AL
        POP AX
        POP DX
        
        RET
        
LED1 ENDP

LED2 PROC
        PUSH DX
        PUSH AX
        MOV DX,PA
        MOV AL,11111011B;SPOINT
        OUT DX,AL
      
        MOV BX,OFFSET LED
        MOV AL,L2
        XLAT
        MOV DX,PB
        OUT DX,AL
        POP AX
        POP DX
        
        RET
        
LED2 ENDP

LED3 PROC
        PUSH DX
        PUSH AX
        MOV DX,PA
        MOV AL,11110111B;SPOINT
        OUT DX,AL
      
        MOV BX,OFFSET LED
        MOV AL,L3
        XLAT
        MOV DX,PB
        OUT DX,AL
        POP AX
        POP DX
        
        RET
        
LED3 ENDP

LED4 PROC
        PUSH DX
        PUSH AX
        MOV DX,PA
        MOV AL,11101111B;SPOINT
        OUT DX,AL
      
        MOV BX,OFFSET LED
        MOV AL,L4
        XLAT
        MOV DX,PB
        OUT DX,AL
        POP AX
        POP DX
        
        RET
        
LED4 ENDP

LED5 PROC
        PUSH DX
        PUSH AX
        MOV DX,PA
        MOV AL,11011111B
        OUT DX,AL
      
        MOV BX,OFFSET LED
        MOV AL,L5
        XLAT
        MOV DX,PB
        OUT DX,AL
        POP AX
        POP DX
        
        RET
        
LED5 ENDP
MYCODE ENDS
END START

七、调试过程

        调试步骤:首先在WM86软件上编译链接并加载程序,加载成功后点击运行,这时数码管显示全零,之后点击KK1,秒表开始及时,再次点击KK1秒表暂停,点击KK2,秒表清零。再次点击KK1,秒表重新开始计时。

  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋到亦天凉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值