汇编语言实现用定时/计数器TO实现20ms定时,以中断方式实现
时间: 2023-07-11 10:21:00 浏览: 114
以下是汇编语言实现用定时/计数器TO实现20ms定时,以中断方式实现的程序:
```
ORG 0 ;程序起始地址
START:
MOV AL, 00110110B ;将AL寄存器的值设为00110110B,即选择定时/计数器0为模式3,16位二进制计数器
OUT 43H, AL ;向计数器控制器8253的端口43H写入AL寄存器的值,设置计数器工作模式
MOV AX, 0E200H ;设置计数器初值为0E200H,即65536-20000,20ms的计数数值
OUT 40H, AL ;向计数器8253的端口40H写入AL寄存器的值的低8位
MOV AL, AH ;将AX寄存器的高8位存入AL寄存器
OUT 40H, AL ;向计数器8253的端口40H写入AL寄存器的值的高8位
MOV AH, 0 ;清空AH寄存器
CLI ;禁止中断
MOV AL, 00110101B ;将AL寄存器的值设为00110101B,即开启定时/计数器0的IRQ0中断
OUT 21H, AL ;向中断控制器8259A的端口21H写入AL寄存器的值,开启IRQ0中断
STI ;开启中断
WAIT:
HLT ;等待中断事件
JMP WAIT ;跳转到WAIT标签处
INTERRUPT:
; 在这里编写定时器中断服务程序的代码
JMP WAIT ;跳转到WAIT标签处
```
该程序通过选择定时/计数器0为模式3,设置计数器的初值为0E200H,即20ms的计数数值,打开定时/计数器0的IRQ0中断,并使用HLT指令等待中断事件。当定时器计数完成时,触发中断事件,跳转到中断服务程序的代码中执行。在中断服务程序中,可以编写需要定时执行的代码,例如控制LED灯的闪烁等。完成中断服务程序后,跳转到WAIT标签处等待下一次定时器中断事件。
阅读全文