基于汇编语言的电子闹钟小程序

        电子闹钟程序:在微机及接口实验箱上完成电子闹钟设计。试验箱上的七段数码管显示时间,蜂鸣器整点报时。设置初始时间与定时时间,并在设置的时间报时,增加了闹铃音乐。

        本系统设计的电子时钟以8086微处理器作为CPU,用8254做定时计数器产生时钟频率,8255做可编程并行接口显示时钟电路,8259做中断控制器产生中断。8254设定计数初值进行计数,工作于计数器0,方式3。计数器0设置初值为10000用来产生10ms的脉冲,通过设置8259循环100次从而产生1s的脉冲。通过移位指令来实现时、秒、分的个位和十位的独自存储,将分、秒的个位十位分别存入指定的寄存器中,比较转移指令来完成秒和分的累加。当秒的个位累加到10时十位加一并将个位清零,当秒累计到60时,分的个位就开始计一位,同时秒清零,当分和秒都记到60时,时的个位开始计一位,同时分和秒都清零。小时计到24时就调用子程序使秒、分、时清零从新开始计时。通过可编程并行接口芯片8255将要显示的位内容送到端口A保存起来并将累加好的记数值经过変址寻址方式将记数值转换成数码管所要显示值。与此同时,还对显示的时间进行比较,看是否和设定的时间一致。当与设定的时间一致的时候,通过8254的控制,使扬声器发声,从而达到数字闹钟的功能。

程序由以下五个模块组成:初始化模块,定时模块,中断模块,显示模块以及发声模块。

        初始化模块:主控模块是系的核心模块,对8254、8255、8259进行初始化,设置中断向量。调用中断子程序和显示子程序由软件实现。该时钟程序由00:00:00开始计时,通过8254的分频产生1ms的方波。

        定时模块:定时模块是为8259提供中断请求信号的。由一片8254实现,选用定时器0,工作在方式3,由于时钟应该1秒走动一次,所以输出值应为1S,其输出信号可作为8259的中断请求信号。

        中断处理模块:中断模块实现动态显示的。中断程序为时间按秒增加,并显示,只要开中断,便可实现每秒显示时间增加一秒,从而达到动态显示的效果。

        显示模块:显示模块是将显示缓冲区的数值送到LED显示的功能模块,显示缓冲区是由六个字节构成,分别保存小时的高位和低位,分钟的高位和低位,秒钟的高位和低位。硬件上由六个LED构成,软件上由扫描显示的方法实现。

        发声模块:通过比较,当显示时间与设定时间一致时,使扬声器发声。

程序实现代码:

A8254    EQU  06C0H              ;宏定义
B8254    EQU  06C2H  
C8254    EQU  06C4H  
CON8254  EQU  06C6H 
MY8255_A    EQU  0600H
MY8255_B    EQU  0602H
MY8255_C    EQU  0604H
MY8255_CON    EQU  0606H

PUBLIC  SEC,MIN,HOUR                 
DATA    SEGMENT                  ;定义数据段
TAB     DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H     ;数码表
        DB 7FH,6FH,77H,7CH,39H,5EH,79H,71H
FREQ_LIST  DW   882,330,330,294,262,990,262,882,882
           DW   990,262,294,262,294,262,330,882,441
           DW   441,393,350,330,393,262,882,990,262,330
           DW   294,262,990,262,882,330,330,294,262,990
           DW   262,882,882,990,262,294,294,262,294,262
           DW   330,330,882,441,441,393,350,330,393,262
           DW   882,262,330,294,294,262,990,262,0
TIME_LIST  DB    4,12,4,4,4,8,4,12,4           ;时间表
            DB   4,4,8,4,8,4,8,4,12
            DB   4,4,4,8,4,12,4,4,4,4
            DB   4,4,8,4,12,12,4,4,4,8
            DB   4,12,4,4,4,4,4,4,4,4
            DB   4,8,4,12,4,4,4,8,4,8
            DB   4,4,4,4,4,8,8,4,12
                 
SEC     DB  0                    ;初始化                      
HOUR    DB  0                                 
MIN     DB  0
N_TIME  DB  20 DUP(0)
Z_TIME  DB  20 DUP(0)
N_S     DB  30
N_M     DB  0
N_H     DB  0
TIMER   DB  10 DUP(0)
DUAN    DB  0
BUF     DB  3 DUP(0)
DATA    ENDS    
SSTACK    SEGMENT STACK          ;堆栈段  
        DW 256 DUP(?)
SSTACK    ENDS
CODE    SEGMENT                  ;代码段
        ASSUME CS:CODE, SS:SSTACK,DS:DATA
START:    ;8254初始化
       MOV DX, CON8254           ;8254
        MOV AL, 36H              ;计数器0,方式3
        OUT DX, AL
        ;分频
        MOV DX, A8254
        MOV AL, 010H
        OUT DX, AL
        MOV AL, 27H
        OUT DX, AL
        ;8255初始化
        MOV AL,81H
        MOV DX,MY8255_CON
        OUT DX,AL
        ;MIR7中断
        MOV AX, 0000H
        MOV DS, AX
        MOV AX, OFFSET MIR7      ;取中断入口地址
        MOV SI, 003CH            ;中断矢量地址
        MOV [SI], AX             ;填IRQ7的偏移矢量
        MOV AX, SEG MIR7         ;段地址
        MOV SI, 003EH
        MOV [SI], AX             ;填IRQ7的段地址矢量
       
        ;MIR6中断

        MOV AX, OFFSET MIR6      ;取中断入口地址
        MOV SI, 0038H            ;中断矢量地址
        MOV [SI], AX             ;填IRQ6的偏移矢量
        MOV AX, SEG MIR6         ;段地址
        MOV SI, 003AH
        MOV [SI], AX             ;填IRQ6的段地址矢量
       
        ;SIR1
        MOV AX, OFFSET SIR1      ;取中断入口地址
        MOV SI, 00C4H            ;中断矢量地址
        MOV [SI], AX             ;填SIR1的偏移矢量
        MOV AX, SEG SIR1         ;段地址
        MOV SI, 00C6H
        MOV [SI], AX             ;填SIR1的段地址矢量
       
        ;8259初始化
        MOV AL, 11H
        OUT 20H, AL              ;ICW1
        MOV AL, 08H
        OUT 21H, AL              ;ICW3
        MOV AL,04H
        OUT 21H,AL               ;ICW2
        MOV AL, 03H
        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  

  • 13
    点赞
  • 112
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值