在前面的IO篇中,使用到矩阵键盘与LED,主函数中对它们的功能函数,从而检测矩阵键盘是否被按下,LED是否需要被点亮。如下面的代码所示,在循环中,不断执行键盘扫描与显示。
/*******************************************************
*
* Function name :main
* Description :扫描键盘与显示
* Parameter :None
* Return :None
**********************************************************/
void main() {
sysinit();
while(1) {
//扫描键盘将键值码保存到一维数组
inputNum();
//显示数组
showsmg(0,table2[0]);
delay(5); //添加延时函数,防止会有显示乱码,必须加
if(table2[1]==1){
showsmg(1,table2[1]);
delay(5); //添加延时函数,防止会有显示乱码,必须加
}
}
从上面的代码中,循环中的inputNum()函数会被一直调用,CPU不断检测检矩阵键盘有没有被使用,从而进行按键处理。
实际应用中,可能矩阵键盘很久才会被用到,不断扫描的方式,会影响CPU的利用率;为此希望按键被按下时, 才会执行按键代码处理代码,否则执行其他的功能代码。这样子inputNum()函数,就不应该放在主函数执行了,而是需要放在inputNum()函数放在中断服务程序中执行。
中断是个什么概念?从上面的场景中可以看到
(1)CPU循环执行着主程序代码;
(2)矩阵键盘被按下(有中断源请求),打断主程序执行;
(3)中断响应,进入中断服务程序(执行按键处理程序);
(4)中断服务程序(按键处理程序)执行完后,中断返回;
(5)继续执行主函数代码。
中断的是否发生,是由外部因素决定(按键是否被按下,是人为因素)。程序中无法事先按安排好(不然键盘扫描函数可以放在主函数执行即可),因此中断服务程序的过程是由硬件自动完成的。
中断的特点:
1)分时操作:缓解慢速外设与快速CPU的矛盾(键盘使用与CPU利用率的矛盾)
2)实时操作:外界变量可以根据要向CPU提出处理请求
中断系统的功能:
1)实现中断响应与中断返回
根据中断请求优先级是否马上进行中断响应;
执行中断响应时,需要将当前运行的状态(程序指针PC、寄存器、标志位)压入堆栈保存,保护现场,然后进入中断服务程序;
中断服务程序执行完后,恢复原来的运行状态,恢复现场。
2)中断优先权
一般系统有多个中断源(可以请求中断的事件),它们进行中断请求时,需要区分优先级进行响应。
3)中断嵌套
中断可以实现嵌套,当CPU正在响应某个中断,这个时候有更高优先级的中断请求,高优先级的中断可以打断低优先级的中断,先高优先级中断,然后返回执行低优先级中断。
关键字:C51 编程 中断
引用地址:
C51编程11-中断篇(中断原理1)
推荐阅读最新更新时间:2024-11-11 21:38
Microsemi可编程存储交换机芯片被腾讯选为参考设计
PCIe交换机在下一代开放式超大规模数据中心规范中发挥着关键作用,这些规范现已被全球开发者社区所接受。Microchip Technology Inc.(纳斯达克股票代码:MCHP)子公司Microsemi Corporation今天宣布其Switchtec™ PSX Gen3 PCIe可编程存储交换机芯片已被腾讯的参考设计选用,该设计已发布到开放数据中心委员会的网站上(ODCC)。作为ODCC的共同发起人,腾讯在其T-Flex架构上使用了该参考设计,该架构使用交换机来汇集非易失性存储器(NVMe)存储,图形处理单元(GPU),网络接口卡(NIC)和其他资源,这提高了高性能I/O和存储设计以及异构计算应用程序的配置灵活性。 采用S
[网络通信]
PIC汇编编程规范
一、程序命名规范 程序文件名由两部分构成:一部分为产品型号或功能描述,一部分为软件版本号。产品型号用字母描述,可为英文或中文拼音。软件版本号为4位,前一位固定为字母”V”,后3位为数字,编写软件版本号应按照从小到大的顺序递增。开发阶段版本号从001开始;中试之后版本号从100开始。 例如:光电感烟探测器JTY-GD-G3程序 GDG3V001 电子差定温探测器JTW-ZCD-G3N程序 GWG3NV101 二、程序头格式 在每个文件的开始要有一个对该文件总体功能的描述,软件版本,以及作者及编写时间。采用模版统一格式。 1. 在功能描述中,除了对软件实现的功能做简要描述外,还应包括使用的单片机,晶振频率,以及主要I/O口
[单片机]
STC10F10XE定时器中断输出10KHz的方波程序
//咱做硬件的也动手做点测试程序,为了测试新做的电机驱动板,找了个51的板子当10K信号发生器测试IGBT开关延时时间。 #include STC_NEW_8051.H #include intrins.h #define uchar unsigned char //这个T0定时器中断程序网上找的,改了下定义和计数器值,移植到STC10F10XE上。 sbit OUT=P2^7; //定义OUT输出端口 /*------------------------------------------------ 定时器初始化子程序 ------------------------------------------------*/ voi
[单片机]
STM32外部中断详解
一、基本概念 ARM Coetex-M3内核共支持256个中断,其中16个内部中断,240个外部中断和可编程的256级中断优先级的设置。STM32目前支持的中断共84个(16个内部+68个外部),还有16级可编程的中断优先级的设置,仅使用中断优先级设置8bit中的高4位。 STM32可支持68个中断通道,已经固定分配给相应的外部设备,每个中断通道都具备自己的中断优先级控制字节PRI_n(8位,但是STM32中只使用4位,高4位有效),每4个通道的8位中断优先级控制字构成一个32位的优先级寄存器。68个通道的优先级控制字至少构成17个32位的优先级寄存器。 4bit的中断优先级可以分成2组,从高位看,前面定义的是抢占式优先级,
[单片机]
STM32F030 USART2配置函数 波特率不对导致无法进入中断
今天调试STM32F030 USART2,收发不了数据,仿真的时候进入不了中断,但是配置也是正确的。搞了很久,原因是先初始化的串口再初始化Flash数据,导致读入的波特率是0,进而无法正常使用USART2,浪费了大量的时间,血的教训呀。 void UartIntial(void){ int i; GPIO_InitTypeDef GPIO_uInitStructure; USART_InitTypeDef USART_uInitStructure; NVIC_InitTypeDef NVIC_InitStructure; for(i=0; i MAX_UART_PORT_NUM; i++){ memset
[单片机]
C51玩8x8LED点阵:PointGame
** 前言 ** 我借同学的光驱把光盘中的文件拷出来后,开始尝试玩一玩单片机。 目前做的比较难的是8X8Led点阵的使用,元件感觉有点多啊。 我用的是普中科技HC6800-ES V2.0的开发板,很多人说什么普中垃圾,我觉得还是他们自己C语言和数电等知识还没弄懂之类的吧。还有老师的教程到8X8LED点阵这里,很多人说有问题,我甚至见过一篇博客写这个教程但是在结果后写:没有显示… dots… 也是,视频里说了有个地方需要短接的,至于是哪里,请往下看! 像以往一样,做个预想,这篇结束时,可以尽量在LED点阵上显示文字等。 ** 8X8LED阵列 ** 我用的单片机中的LED阵列是左边这种。 行,是D7~D0,而列是P0
[单片机]
MSP430 LaunchPad定时器中断(连续模式)
#include msp430g2231.h int main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; P1DIR |= 0x01; TACCTL0 = CCIE;//使能CCIFG标志产生的中断 TACCR0 = 50000;(试验了一下,这句不加也可以) TACTL = TASSEL_2 + MC_2;//选择timer时钟和模式 // _BIS_SR(GIE); _EINT();//开总中断 while(1); } /*中断服务程序*/ #pragma vector
[单片机]
三菱plc编程定时器编程咋输入
三菱PLC(Programmable Logic Controller,可编程逻辑控制器)是一种广泛应用于工业自动化控制领域的设备。在三菱PLC中,定时器是实现时间控制功能的重要组件。本文将详细介绍三菱PLC定时器的编程方法和应用场景。 1. 定时器的基本概念 定时器是一种用于测量时间间隔的设备,它可以在PLC程序中实现延时、计时等功能。三菱PLC中的定时器有多种类型,包括T、TW、TD等,每种类型的定时器都有其特定的应用场景。 2. 定时器的分类 2.1 T型定时器 T型定时器是最常用的定时器类型,它可以设置一个预设的时间值,当PLC程序运行到定时器指令时,定时器开始计时,直到达到预设时间后,定时器输出一个信号。 2.2 T
[嵌入式]