南邮微机实验(设计定时器)

利用系统定时源设计计时器,具体内容:利用日时钟附加1CH中断设计定时中断程序,每隔一秒刷新屏幕上显示的时、分、秒。

.486
DATA SEGMENT USE16
MESG DB '00:00:00',0DH,'$'
HOUR1 DB 0
HOUR2 DB 3
MIN1 DB 5
MIN2 DB 9
SECOND1 DB 5
SECOND2 DB 8
OLD0A DD ?
ICOUNT DB 18
DATA ENDS
CODE SEGMENT USE16
      ASSUME CS:CODE,DS:DATA
BEG:  MOV AX,DATA
      MOV DS,AX
      CLI
      CALL READ0A
      CALL WRITE0A
      STI
     
SERVICE PROC
      PUSHA
      PUSH DS
      MOV AX,DATA
      MOV DS,AX
      DEC ICOUNT
      JNZ EXIT
      MOV ICOUNT,18
      
      LEA BX,MESG
      
      INC SECOND2
      CMP SECOND2,10
      JB T
      MOV SECOND2,0
      INC SECOND1
      CMP SECOND1,6
      JB T
      MOV SECOND1,0
      INC MIN2
      CMP MIN2,10
      JB T
      MOV MIN2,0
      INC MIN1
      CMP MIN1,6
      JB T
      MOV MIN1,0
      INC HOUR2
      CMP HOUR1,2         ;以下几行代码用于判断是否是23:59:59加1s,若是,则跳转至00:00:00
      JE t1
      CMP HOUR2,10
      JB T
      MOV HOUR2,0
      INC HOUR1
      JMP T
t1:	  CMP HOUR2,4
	  JB T
	  MOV HOUR1,0
      MOV HOUR2,0
      MOV MIN1,0
      MOV MIN2,0
      MOV SECOND1,0
      MOV SECOND2,0
      
T:	  
	  MOV AL,HOUR1
	  ADD AL,30H      
      MOV [BX],AL
      
      MOV AL,HOUR2
      ADD AL,30H
      MOV [BX+1],AL
      
      MOV AL,MIN1
      ADD AL,30H
      MOV [BX+3],AL
      
      MOV AL,MIN2
      ADD AL,30H
      MOV [BX+4],AL
      
      MOV AL,SECOND1
      ADD AL,30H
      MOV [BX+6],AL
      
      MOV AL,SECOND2
      ADD AL,30H
      MOV [BX+7],AL
      
      MOV AH,9
      LEA DX,MESG
      INT 21H

EXIT: POP DS   ;恢复现场
      POPA
      IRET
SERVICE ENDP

BtoD PROC
	  RET 
BtoD ENDP	  

READ0A PROC
      MOV AX,351CH
      INT 21H
      MOV WORD PTR OLD0A,BX
      MOV WORD PTR OLD0A+2,ES
      RET
READ0A ENDP

WRITE0A PROC
      PUSH DS
      MOV AX,CODE
      MOV DS,AX
      MOV DX,OFFSET SERVICE
      MOV AX,251CH
      INT 21H
      POP DS
      RET
WRITE0A ENDP

RESET PROC
      MOV DX,WORD PTR OLD0A
      MOV DS,WORD PTR OLD0A+2
      MOV AX,251CH
      INT 21H
      RET
RESET ENDP
CODE ENDS
      END BEG


### 关于电大学微型计算机课程中的8254定时器讲解 #### 8254定时器简介 8254是一种可编程间隔定时器芯片,在许多计算机系统中用于提供精确的时间延迟和频率控制功能。该器件能够生成周期性的中断请求,适用于多种应用场景,如动态存储器刷新、系统时钟计时等[^2]。 #### 结构与工作原理 8254内部含有三个独立的16位减法计数器通道(Counter 0, Counter 1 和 Counter 2),每个通道都可以被单独配置来执行不同的任务。这些计数器通过预设初始值并逐次递减直至零的方式运作;当达到零时会触发相应的事件或输出脉冲信号。此外,还存在一个模式寄存器用来设定各个计数器的操作方式及其输入/输出特性。 #### 编程接口说明 对于8254而言,其编程主要依赖于向特定端口地址写入命令字节完成初始化设置过程。具体来说: - **读取状态**:可以通过访问指定的状态端口获取当前设备的工作状况; - **加载常数值**:允许用户定义各路计数器所使用的初值; - **改变操作模式**:支持六种不同类型的运行模式选择,包括但不限于软件触发的一次性延时、硬件重置后的连续方波发生等功能。 ```assembly ; 设置8254计数器0为模式3 (方波),装载初值为1000 mov al, 00110110b ; 模式3, 计数器0, BCD模式关闭 out 43h, al ; 发送控制字到控制寄存器 mov ax, 1000 ; 初值 out 40h, al ; 将低字节发送给计数器0的数据端口 mov al, ah ; 准备高字节 out 40h, al ; 将高字节发送给计数器0的数据端口 ``` #### 应用实例分析 考虑到实际应用需求,比如实现精准时间测量或是构建简单的音频合成电路等情况,可以利用8254强大的灵活性来进行定制化开发。例如,在某些嵌入式项目里,可能需要依靠此组件配合其他外围设施共同作用以达成预期效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值