单片机程序、通过外部中断0来响应按键功能。每当按键按下时,进入外部中断0的中断服务程序,对按键的按下次数进行计数,并将计数结果在2位LED上显示出来。在使用中断的过程中,要注意中断的初始化程序,包括对IE、TCON等寄存器的设置。
时间: 2023-05-31 15:06:40 浏览: 52
以下是一个基于8051单片机的程序,通过外部中断0来响应按键功能并计数,同时将计数结果在2位LED上显示出来。程序中使用了中断服务程序和中断初始化程序。
中断服务程序:
```
; 外部中断0中断服务程序
; 每当按键按下时,计数器加1
; 并将计数结果在2位LED上显示出来
ORG 0BH ; 外部中断0中断向量地址
CLR P3.0 ; 清除LED2(低电平亮)
INC COUNTER ; 计数器加1
MOV A, COUNTER
ANL A, #0FH ; 只保留低4位
MOV LED, A ; 将计数结果显示在LED上
RET ; 返回中断前状态
```
中断初始化程序:
```
; 初始化外部中断0
; 设置P3.2为输入,P3.2口为中断0触发口
; 设置IE、TCON等寄存器
INIT:
MOV P3, #0FFH ; P3口全部设置为输入
SETB P3.2 ; P3.2口设置为上拉输入
SETB EX0 ; 允许外部中断0
SETB EA ; 允许中断总开关
SETB IT0 ; 设置外部中断0为边沿触发
RET
```
主程序:
```
; 主程序
; 初始化计数器和LED
; 初始化外部中断0
COUNTER EQU 20H ; 计数器存储单元
LED EQU P2 ; LED输出口
ORG 0000H ; 程序入口地址
MOV COUNTER, #0
MOV LED, #00H
SJMP INIT ; 跳转到中断初始化程序
```
程序的实现过程如下:
1. 程序首先定义了计数器和LED的存储单元,以及中断服务程序和中断初始化程序的代码。
2. 在主程序中,将计数器和LED初始化为0,并跳转到中断初始化程序。
3. 中断初始化程序中,将P3口全部设置为输入,P3.2口设置为上拉输入,允许外部中断0并设置为边沿触发,同时允许中断总开关。
4. 当按键按下时,外部中断0被触发,程序跳转到中断服务程序。在中断服务程序中,LED2被清零,计数器加1,并将计数结果在LED1上显示出来。
5. 中断服务程序执行完毕后,返回中断前的状态,程序继续执行主程序。
需要注意的是,在使用中断的过程中,要注意中断的优先级和中断服务程序的执行时间,避免出现中断嵌套或中断阻塞的情况。