单片机外部中断的理解
时间: 2023-02-07 14:21:25 浏览: 51
单片机外部中断是指,当单片机在运行某些程序时,如果有外部设备或系统事件发生,单片机会暂停原来的程序,执行与该事件相关的程序代码,称为外部中断。外部中断通常由单片机的外部中断引脚触发,也可以由内部计时器或其他内部模块产生。外部中断可以帮助单片机快速响应外部设备或系统事件,提高程序的运行效率。
相关问题
外部中断和串口中断区别
外部中断和串口中断有以下几点区别:
1. 触发条件不同:外部中断是由外部事件触发的,例如按下一个按钮或者接收到一个信号;而串口中断是由串口通信过程中的接收或发送数据触发的。
2. 中断源不同:外部中断的中断源可以是多个,例如在单片机80c51中有外部中断0和外部中断1;而串口中断只有一个中断源,即串口通信。
3. 优先级不同:在单片机80c51中,外部中断和串口中断有不同的默认优先级。默认的优先级为,外部中断0 > 定时器0 > 外部中断1 > 定时器1 > 串口中断。
4. 功能不同:外部中断主要用于实时处理外部事件,例如按键的响应;而串口中断主要用于处理串口通信过程中的数据接收和发送。
总结起来,外部中断和串口中断在触发条件、中断源、优先级和功能上都有所不同。外部中断是由外部事件触发的,可以有多个中断源,用于实时处理外部事件;而串口中断是由串口通信过程中的数据触发的,只有一个中断源,用于处理串口通信过程中的数据接收和发送。
#### 引用[.reference_title]
- *1* [STM32外部中断和串口](https://blog.csdn.net/m0_65734791/article/details/124932104)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [外部中断,定时器中断的理解](https://blog.csdn.net/qq_56609666/article/details/116140613)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [STM32外部中断及串口](https://blog.csdn.net/qq_53101685/article/details/124848832)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
kevil单片机采用外部中断编写程序控制数码管显示从00到99,S1控制加计数,S2控制减计数的汇编语言
以下是使用汇编语言编写的单片机程序,实现了通过外部中断控制数码管显示从00到99,并通过S1和S2按键控制加计数和减计数的功能。本程序适用于Keil uVision4。
```
; STM32F103C8T6
; Display 00-99 with External Interrupts
AREA |.text|, CODE, READONLY
ENTRY
; Initialize Registers and Stack Pointer
LDR R0, =0x20001000
MOV SP, R0
LDR R0, =0x08000000
MOV R1, #0x01
MSR MSP, R0
MOV R0, #0x00
MOV R1, #0x00
; Initialize GPIOC for Display
LDR R2, =0x40021000
LDR R3, [R2, #0x04]
ORR R3, #0x03
STR R3, [R2, #0x04]
LDR R3, [R2, #0x08]
AND R3, #0xFFFF0FFF
ORR R3, #0x00003000
STR R3, [R2, #0x08]
LDR R3, [R2, #0x0C]
AND R3, #0xFFFF0FFF
ORR R3, #0x00001000
STR R3, [R2, #0x0C]
; Initialize EXTI0 and EXTI1 for Buttons
LDR R2, =0x40010400
LDR R3, [R2, #0x00]
BIC R3, #0x0000000F
ORR R3, #0x00000005
STR R3, [R2, #0x00]
LDR R3, [R2, #0x04]
BIC R3, #0x0000000F
ORR R3, #0x00000005
STR R3, [R2, #0x04]
; Initialize NVIC
LDR R2, =0xE000E100
MOV R3, #0x0F
STR R3, [R2, #0x00]
MOV R3, #0x01
STR R3, [R2, #0x04]
STR R3, [R2, #0x08]
CPSIE I
; Wait for Interrupts
MOV R0, #0x00
MOV R1, #0x00
LOOP:
LDR R2, =0x40013810
LDR R3, [R2, #0x14]
TST R3, #0x01
BEQ LOOP
LDR R3, =0x00
STR R3, [R2, #0x14]
LDR R2, =0x40013C10
LDR R3, [R2, #0x14]
TST R3, #0x02
BEQ LOOP
LDR R3, =0x00
STR R3, [R2, #0x14]
CMP R0, #0x09
BGT OVERFLOW
CMP R3, #0x01
BEQ ADD
CMP R3, #0x02
BEQ SUB
B LOOP
ADD:
ADD R0, #0x01
CMP R0, #0x09
BGT OVERFLOW
B LOOP
SUB:
CMP R0, #0x00
BEQ LOOP
SUB R0, #0x01
B LOOP
OVERFLOW:
MOV R0, #0x09
MOV R1, #0x09
B LOOP
END
```
代码解释:
本程序使用汇编语言编写,首先初始化了单片机的各项设置,包括寄存器和堆栈指针的初始化,以及GPIO和外部中断的初始化。然后进入无限循环,等待外部中断的触发。
当外部中断触发后,程序会根据按键的不同,进行加计数或减计数的操作,并进行限制,使其在0~99的范围内变化。同时,程序通过数码管显示当前的数字。
值得注意的是,在本程序中使用了中断控制器NVIC,以便管理硬件中断的优先级。同时,在中断处理完成后,需要清除中断标志位,以便下一次中断触发。
总结:
本程序使用汇编语言编写,实现了通过外部中断控制数码管显示从00到99,并通过S1和S2按键控制加计数和减计数的功能。通过学习本程序,可以更深入地理解Keil uVision的编程方法,了解单片机的底层工作原理。