实验5_外部中断应用实验
实验二 按键中断实验
实验二按键中断实验一、实验目的了解中断的含义二、实验内容板子加电后,按动板子上K1-K3按键,可控制对应的LED1-LED3的亮灭,该实验学习了外部中断(EXTI)程序的编制及控制流程。
三、实验仪器、设备计算机、开发板、keil软件四、硬件设计在开发板上V6、V7、V8分别与MCU的PB5、PD6、PD3相连,如下图所示键盘部分如下图所示:例程所用到的列扫描线:PC5,PC2,PC3。
例程所用到的行扫描线(EXTI中断线):PE2。
五、实验要求和步骤开发板上有3个蓝色状态指示灯V6(LED1),V7(LED2),V8(LED3),通过对应的按键K1-K3,控制LED的亮灭,将PE2引脚配置为外部中断,当其上出现下降沿时产生一个中断,根据扫描PC5,PC2,PC3来判别是哪个按键按下。
首先我们了解一下什么是外部中断/事件控制器(EXTI)。
外部中断/事件控制器由19个产生事件/中断要求的边沿检测器组成。
每个输入线可以独立地配置输入类型(脉冲或挂起)和对应的触发事件(上升沿或下降沿或者双边沿都触发)。
每个输入线都可以被独立的屏蔽。
挂起寄存器保持着状态线的中断要求。
EXTI控制器的主要特性如下:每个中断/事件都有独立的触发和屏蔽每个中断线都有专用的状态位支持多达19 个中断/事件请求检测脉冲宽度低于APB2 时种宽度的外部信号如要产生中断,中断线必须事先配置好并被激活。
这是根据需要的边沿检测通过设置2个触发寄存器,和在中断屏蔽寄存器的相应位写“1”到来允许中断请求。
当需要的边沿在外部中断线上发生时,将产生一个中断请求,对应的挂起位也随之被置1。
通过写“1”到挂起寄存器,可以清除该中断请求。
为产生事件触发,事件连接线必须事先配置好并被激活。
这是根据需要的边沿检测通过设置2个触发寄存器,和在事件屏蔽寄存器的相应位写“1”到来允许事件请求。
当需要的边沿在事件连线上发生时,将产生一个事件请求脉冲,对应的挂起位不被置1。
单片机实验报告
单片机实验报告实验一:存储器块清零或赋值一、实验目的1 熟悉存储器的读写方法,熟悉51汇编语言结构。
2 熟悉循环结构程序的编写。
3 熟悉编程环境和程序的调试。
二、实验内容指定存储器中某块的起始地址和长度,要求将其内容清零或赋值。
例如将4000H开始的10个字节内容清零或全部赋值为33H。
注意:1 文件不要用中文名称保存时不要用中文路径(目录),不要放在“桌面”上,源文件和工程要放在同一个文件夹下,文件名称和路径名称不要太长。
2 查看存储器菜单使用:窗口---数据窗口---XDATA 观察存储器内容3 查看SFR:窗口---CPU窗口查看CPU寄存器SFR4 单步执行:执行---单步执行(F8),每执行一步,查看每条语句涉及到的寄存器和存储器内容的变化结果,是否是指令所要得到的结果,如不是,检查错误原因,修改。
5利用多种执行方法和观察各种窗口调试程序,直至程序满意为止。
三、实验仪器微机、VW,WA VE6000编程环境软件,(单片机实验箱)Lab6000/Lab6000通用微控制器MCS51实验四、实验步骤1、新建工程文件。
(注意:文件不要用中文名称保存时不要用中文路径)2、编写程序。
3、运行和调试过程。
外部数据存储器(4000H为首地址的10个字节)中初始状态(随便赋值FFH):单步执行程序,观察SFR中外部地址指针的变化;全速执行程序,可以看到外部数据存储器已赋值33H:五、实验结果可以看到外部数据存储器已赋值33H:六、问题讨论本次实验能够清楚地了解存储器中数据的移动和赋值过程,通过单步执行,对于每一步的指令操作过程能够了解如何执行,查看每条语句涉及到的寄存器和存储器内容的变化结果。
同时,学习掌握汇编程序的编写和调试过程。
实验二:存储块移动一、实验目的1 熟悉51汇编语言程序结构。
2 熟悉循环结构程序的编写,进一步熟悉指令系统。
3 熟悉编程环境和程序的调试。
二、实验内容将指定源地址(3000H)和长度(10字节)的存储块移动到目的地址(3050H)。
串口接收中断实验报告
#### 一、实验目的1. 理解串口通信的基本原理和配置方法。
2. 掌握使用中断方式接收串口数据的方法。
3. 学习如何在中断服务程序中处理接收到的数据。
4. 熟悉嵌入式开发环境下的程序调试技巧。
#### 二、实验环境1. 主控芯片:STM32F103C8T62. 开发环境:STM32CubeIDE3. 串口通信线:USB转串口线4. 连接设备:PC(上位机)#### 三、实验原理串口通信是计算机与外部设备之间进行数据交换的一种常见方式。
在嵌入式系统中,串口通信常用于设备之间的数据传输。
本实验采用中断方式接收串口数据,即在数据到来时,由硬件中断触发中断服务程序,从而实现数据的接收。
#### 四、实验步骤1. 硬件连接将STM32F103C8T6开发板通过USB转串口线连接到PC,确保串口线正确连接至开发板的USART1接口。
2. 软件配置1. 打开STM32CubeIDE,创建一个新的STM32CubeMX项目。
2. 在STM32CubeMX中配置USART1,设置波特率为9600,数据位为8位,停止位为1位,无校验位。
3. 使能USART1的中断,包括接收中断(RXNE)和空闲中断(IDLE)。
4. 配置NVIC,设置USART1的中断优先级。
3. 程序编写1. 在STM32CubeIDE中添加C语言程序文件。
2. 编写初始化函数,配置USART1的GPIO引脚、USART1的寄存器以及NVIC中断。
3. 编写中断服务程序,在中断服务程序中处理接收到的数据。
4. 编写主函数,用于启动串口通信。
4. 程序调试1. 在PC端打开串口调试助手,设置波特率、数据位、停止位和校验位,与STM32F103C8T6开发板配置保持一致。
2. 编译并下载程序到开发板。
3. 在PC端发送数据,观察开发板是否能够正确接收并处理数据。
#### 五、实验结果与分析1. 实验结果在PC端发送数据,开发板能够通过中断方式正确接收数据,并在串口调试助手中显示接收到的数据。
单片机原理应用实验指导书
《单片机原理与应用》课程实验指导书电子、机电及电气项目与自动化专业适用吴茂屈莉莉王飞编佛山科学技术学院二00 九年十月前言以往我校的单片机实验教案通常是使用启东DAIS 系列单片机微机仿真实验系统进行单片机实验教案的,DAIS 系统可以做二十多项实验,系统机构十分复杂,功能非常强大,但是在使用过程中也发现了一些不足的地方那个: 厂家为了技术保密,把核心电路都屏蔽了,我们不能了解实验系统的工作原理,另外系统庞大,不方便学生带回宿舍实验,不方便学生课外学习。
根据我校学生对单片机课程学习的需求, 我们在参考其他公司的产品的基础上,结合课程的实际情况,开发了适合学生入门学习的单片机学习板,FD-51 学习板,该学习板设置了包括LED数码管、LCD1602液晶、AD\DA转换器件等单元电路,可以做几十个单片机实验,而且本实验板我们是以配件的形式提供给学生,让学生自己焊接调试线路板。
学生不但可以学习软件编程技术,还可以学习硬件焊接及调试技术,可以更好地锻炼学生的动手操作能力。
目录系统介绍 (2)软件实验:实验一清零程序............. (4)实验二拆字程序.................... .. (5)实验三拼字程序.................... .. (5)实验四数据区传送子程序 (6)实验五查找相同数个数 (6)硬件实验:实验A 工业顺顺序控制 (7)实验B 简单IO口扩展实验 (8)实验一P1 口输出流水灯实验 (11)实验二P1 口输出交通灯实验 (11)实验三八段数码管显示实验 (12)实验四键盘实验.................. . (12)实验五遥控解码实验 ............. .. (12)实验六计数器实验..................... .. (13)实验七继电器控制实验 .................... (13)实验八定时器实验 (14)实验九单片机串行口通讯实验 (14)实验十电子时钟 (14)实验十一外部中断实验<急救车与交通灯) (15)实验十二AT24C02读写实验...... .......... . (15)实验十三93C46读写实验....... ........... (16)实验十四LCD1602字符型液晶控制显示实验 (16)实验十五LCD12864点阵型液晶控制显示实验 (17)实验十六A/D转换(数字电压表>实验 (17)实验十七D/A转换(波形发生器>实验 (18)实验十八计算机温度数据采集与处理 ............... . (19)系统介绍一、FD-51单片机学习板简介为了适应我校单片机课程教案的需要,我们在参考其他厂家学习板的基础上,再根据我校单片机课程教案大纲的要求,基于简单、使用的原则,开发了FD-51 单片机实验板。
中断原理实验报告总结(3篇)
第1篇一、实验目的本次实验旨在通过实际操作,加深对中断原理的理解,掌握单片机中断系统的工作机制,学会外部中断和定时/计数器的使用,以及串口数据发送和接收的方法。
二、实验内容1. 外部中断原理及使用(1)实验原理:通过实验,了解外部中断的工作原理,掌握外部中断的使用方法,包括中断源的设置、中断服务程序的编写和中断请求的处理。
(2)实验步骤:设置外部中断源,编写中断服务程序,实现按键控制LED灯亮灭。
2. 定时/计数器的使用(1)实验原理:通过实验,了解定时/计数器的工作原理,掌握定时/计数器的使用方法,包括定时/计数器的初始化、定时/计数器的启动和停止、定时/计数器的中断处理。
(2)实验步骤:设置定时/计数器,实现LED灯的闪烁。
3. 串口数据发送和接收(1)实验原理:通过实验,了解串口通信的工作原理,掌握串口数据发送和接收的方法,包括串口初始化、发送和接收数据的流程。
(2)实验步骤:实现单片机与计算机之间的串口通信,发送和接收数据。
三、实验结果及分析1. 外部中断实验结果及分析实验中,通过按键控制LED灯亮灭,实现了外部中断的基本功能。
实验结果表明,当按键被按下时,外部中断请求信号被触发,中断服务程序被执行,LED灯状态发生改变。
2. 定时/计数器实验结果及分析实验中,通过定时/计数器实现LED灯的闪烁,实现了定时功能。
实验结果表明,定时/计数器能够按照设定的周期产生中断,中断服务程序能够按照要求执行。
3. 串口数据发送和接收实验结果及分析实验中,通过串口通信实现单片机与计算机之间的数据传输。
实验结果表明,单片机能够按照设定的波特率发送和接收数据,计算机端能够正确接收并显示数据。
四、实验总结1. 通过本次实验,加深了对中断原理的理解,掌握了单片机中断系统的工作机制。
2. 掌握了外部中断、定时/计数器和串口通信的使用方法,为后续学习和实践打下了基础。
3. 在实验过程中,培养了动手实践能力,提高了解决问题的能力。
单片机原理与应用及c51程序设计答案
单片机原理与应用及c51程序设计答案【篇一:单片机原理与c51语言程序设计与基础教程_课后习题答案】p> 习题填空题1.一般而言,微型计算机包括、四个基本组成部分。
2.单片机是一块芯片上的微型计算机。
以地应用范畴。
3.atmel 公司生产的cmos型51系列单片机,具有代替rom作为程序存储器,4.单片机根据工作温度可分为、和三种。
民用级的温度范围是0℃一70℃,工业级是-40℃~85℃,军用级是-55℃-125℃(不同厂家的划分标推可能不同。
5.在单片机领域内,ice的含义是。
选择题1.单片机的工作电压一般为v?a 5vb 3vc 1vd 4v2.单片机作为微机的一种,它具有如下特点:a 具有优异的性能价格比b 集成度高、体积小、可靠性高c 控制功能强,开发应用方便d 低电压、低功耗。
3.民用级单片机的温度范围是:a -40℃~85℃b 0℃一70℃c -55℃-125℃d 0℃一50℃4.mcs-51系列单片机最多有a 3b 4c 5d 65.下列简写名称中不是单片机或单片机系统的是a mcub scmc iced cpu问答题1.单片机常用的应用领域有哪些?2.我们如何学习单片机这么技术?3.单片机从用途上可分成哪几类?分别由什么用处?填空题1.运算器、控制器、存储器、输入输出接口2.单片机嵌入式系统3. mcs-51flash rom4.民用级(商业级)工业级军用级5.在线仿真器选择题1、a2、abcd3、b 4、c5、d问答题1.单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴:(1)在智能仪器仪表上的应用单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。
嵌入式系统实验报告
嵌入式系统实验报告学号:姓名:班级:13电子信息工程指导老师:苏州大学电子信息学院2016年12月实验一:一个灯的闪烁1、实验要求实现PF6-10端口所连接的任意一个LED灯点亮2、电路原理图图1 LED灯硬件连接图3、软件分析RCC_Configuration(); /* 配置系统时钟*/GPIO_Configuration(); /* 配置GPIO IO口初始化*/ for(;;){GPIOF->ODR = 0xfcff; /* PF8=0 --> 点亮D3 */Delay(1000000);GPIOF->ODR = 0xffff; /* PF8=1 --> 熄灭D3 */Delay(1000000);4、实验现象通过对GPIOF8的操作,可以使LED3闪烁5、实验总结这是第一次使用STM32开发板,主要内容是对IO端口进行配置,点亮与IO端口相连接的LED灯,闪烁周期为2S。
通过本实验对STM32开发板的硬件原理有了初步了解。
实验二:流水灯1、实验要求实现PF6-10端口所连接的5个LED灯顺次亮灭2、电路原理图图1 流水灯硬件连接图3、软件分析int main(void){RCC_Configuration();/* 配置系统时钟*/GPIO_Configuration();/* 配置GPIO IO 口初始化*/for(;;){GPIOF->ODR = 0xffbf;/* PF6=0 --> 点亮LED1 */Delay(5000000);GPIOF->ODR = 0xff7f;/* PF7=0 --> 点亮LED2 */Delay(5000000);GPIOF->ODR = 0xfeff;/* PF8=0 --> 点亮LED3 */Delay(5000000);GPIOF->ODR = 0xfdff;/* PF9=0 --> 点亮LED4 */Delay(5000000);GPIOF->ODR = 0xfbff;/* PF10=0 --> 点亮LED5 */ }}4、实验现象LED1~LED5依次点亮,亮灭的时间间隔都为1S。
单片机实验——精选推荐
实验一认识实验一.实验目的1.了解仿真器的硬件结构与接线。
2.了解MCS-51单片机复位功能及复位后的内部状态。
3.通过示例程序的键入与执行,学习仿真器的使用与操作方法。
二.实验内容1.对照实验指导书,查对实验机具体接线。
2.按照开发系统的使用方法,分别查看复位后PC、SP、DPTR等特殊功能寄存器及片内、片外RAM的内容。
3.熟悉开发器的使用,将下面程序键入实验机。
ORG 2000H2000 74AA MOV A,#0AAH2002 75F0BB MOV B,#0BBH2005 E5F0 MOV A,B2007 78CC MOV R0,#0CCH2009 E8 MOV A,R0200A 80FE SJMP $4.程序键入后,检查各存储单元所储机器码是否正确如有误,重新键入,达到修正的目的。
5.单步执行示例程序,逐步检查执行结果,核查与分析结果是否相符,直到执行完最后一条指令。
6.练习连续执行示例程序,检查执行结果,核查与分析结果是否相符。
7.自己在示例程序中插入一条指令,执行并查看结果,然后删除,熟悉插入/删除操作。
8.将示例程序移到另外一个存储区,执行并查看结果,熟悉程序块移动操作。
三.实验预习要求1.认真阅读指导书的相关内容,熟悉开发系统的各种操作。
2.实验前应写出规定操作任务的具体操作方法步骤。
四.思考题1.MCS-51单片机怎样实现内部复位,画出一种复位电路。
2.PC、SP、P0、P1、P2、P3复位状态是什么?各有何意义?3.示例程序中最后一条指令SJMP $的作用是什么?如果取掉这一条指令,程序的执行将发生什么变化?4.实验机监控系统怎样实现程序“单步执行”功能?五.实验报告要求1.按实验顺序,写出实验操作的方法步骤。
2.写出实验中所遇到的问题与解决过程。
写出思考题的答案。
实验二建立数据区、数据块传送一.实验目的1.进一步熟悉实验机操作,练习程序调试方法。
2.理解并掌握建立数据区与数据块传送程序。
单片机实验指导书0807
单片机实验指导书张彦编机电职业技术学院机电系单片机实验室(2008年6月编)伟福仿真器系统概述本仿真器系统由仿真主机+仿真头、MULT1A用户板、实验板、开关电源等组成。
本系统的特点是:1.主机+仿真头的组合,通过更换不同型号的仿真头即可对各种不同类型的单片机进行仿真,是一种灵活的多CPU仿真系统。
采用主机+POD组合的方式,更换POD,可以对各种CPU进行仿真。
本仿真器主机型号为E2000/S,仿真头型号为POD8X5X(可仿真51系列8X5X单片机)。
2.双平台,具有DOS版本和WINDOWS版本,后者功能强大,中/英文界面任选,用户源程序的大小不再有任何限制,支持ASM,c,PLM语言混合编程,具有项目管理功能,为用户的资源共享、课题重组提供强有力的手段。
支持点屏显示,用鼠标左键点一下源程序中的某一变量,即可显示该变量的数值。
有丰富的窗口显示方式,多方位,动态地显示仿真的各种过程,使用极为便利。
本操作系统一经推出,立即被广大用户所喜爱。
3.双工作模式1.软件模拟仿真(不要仿真器也能模拟仿真)。
2.硬件仿真。
4.双CPU结构,100%不占用户资源。
全空间硬件断点,不受任何条件限制,支持地址、数据、外部信号、事件断点、支持实时断点计数、软件运行时间统计。
5.双集成环境编辑、编译、下载、调试全部集中在一个环境下。
多种仿真器,多类CPU仿真全部集成在一个环境下。
可仿真51系列,196系列,PIC系列,飞利蒲公司的552、LPC764、DALLAS320,华邦438等51增强型CPU。
为了跟上形势,现在很多工程师需要面对和掌握不同的项目管理器、编辑器、编译器。
他们由不同的厂家开发,相互不兼容,使用不同的界面,学习使用都很吃力。
伟福WINDOWS调试软件为您提供了一个全集成环境,统一的界面,包含一个项目管理器,一个功能强大的编辑器,汇编Make、Build 和调试工具并提供千个与第三方编译器的接口。
由于风格统一,大大节省了您的精力和时间。
实验五 数字振荡器实验
实验五 数字振荡器实验一、实验目的本实验属于综合性实验,在项目开发中,我们经常要用产生某一频率的正弦振荡信号,比如在电话通信中,用两个不同频率的正弦信号的叠加来代表按键。
正弦信号的生成方法有三种,计算法、查表法和数字振荡器。
用计算法求正弦波的离散序列值程序设计容易,但实际应用时会占用计算时间,使系统运行速度变慢。
查表法是先通过matlab 将正弦波的序列值计算出来并寄存在存储器中,运行时只要按顺序和一定的速度取出便可。
这种方法要占用较多的存储空间,但是速度快。
第三种方法是利用数字振荡器来实现不同频率信号的叠加,这种方法通过迭代的方法计算出不同频率的正弦信号序列,结构简单,运算速度快,节省内存,因此在DSP 实际应用中我们选择这种方法。
数字振荡器的本质是,使用一个IIR (Infinite Impulse Response )滤波器,通过把它的极点放在单位圆上面来产生振荡。
利用正弦波sinx 的指数形式)(21sin jx jxe e j x --=可以得到正弦序列x(n)的Z 变换为)(21)sin(][jnwT jnwTe e j T n n x --==ϖ110011[()]()(X )2z 2jnwT jnwT n jwT n jwT nn n e e z e z e z j j ∞∞-----==⎡⎤-=-⎣⎦=∑∑() 12jwT jwT z z j z e z e -⎡⎤=-⎢⎥--⎣⎦222122cos()1jwT jwT z ze z ze j z z wT -⎡⎤--+=⎢⎥-+⎣⎦22sin()2cos()1z wT Czz z wT z Az B==-+--,此式在|z|>1时成立,且)sin(,1),cos(2wT C B wT A =-==。
根据Z 变换的基本原理和性质,序列x[n]及其Z 变换X (z )之间存在一一对应的关系,即对于给定的X (z ),可以通过反Z 变换,唯一地确定x[n]。
MCS-51单片机应用实验教程课程设计
MCS-51单片机应用实验教程课程设计1. 简介MCS-51单片机是一种高性能、低功耗单片机,广泛应用于各个领域。
本文主要介绍MCS-51单片机应用实验教程课程设计内容,以帮助初学者了解MCS-51单片机的应用。
2. 实验环境•Keil C51编译器•STC89C52RC单片机•电路板和外围器件•PC3. 实验内容3.1 实验1:LED流水灯LED流水灯是MCS-51单片机入门实验,可以让学生熟悉MCS-51单片机基本指令和寄存器的使用,以及加深对位运算的理解。
实现方法:通过MCS-51单片机的IO口和位运算实现8个LED灯的流水效果。
3.2 实验2:数码管显示数码管是一种常见的数字显示器件,通过数码管的显示,可以实现对数字的显示和闪烁等效果。
该实验可以让学生了解MCS-51单片机的定时器和中断服务程序的使用,以及对数码管的控制。
实现方法:通过MCS-51单片机的定时器,按照一定的时间间隔对数码管进行显示和闪烁。
3.3 实验3:按键控制LED灯按键开关是电子产品常用的一种输入方式,通过按键的不同状态可以控制LED等输出设备的开关。
该实验可以让学生了解MCS-51单片机的IO口的输入状态读取和控制。
实现方法:通过MCS-51单片机的IO口读取按键输入状态,通过位运算控制LED灯的开关。
3.4 实验4:外部中断实现按钮控制LED灯外部中断是MCS-51单片机的一种重要功能,通过外部中断可以实现对按钮的响应,进而实现对LED等设备的控制。
该实验可以让学生进一步了解MCS-51单片机的外部中断服务程序的使用和IO口管理。
实现方法:通过MCS-51单片机的外部中断输入,响应按键状态,并通过位运算控制LED灯的开关。
3.5 实验5:定时器PWM控制LED灯亮度通过调节LED灯的亮度,可以达到调节电子产品亮度的效果。
该实验可以让学生了解MCS-51单片机的定时器的PWM输出功能,以及通过PWM实现对LED等设备的亮度调节。
实验5-独立键盘和矩阵键盘
实验5 独立键盘和矩阵键盘一、实验目的1、学会用C语言进行独立按键应用程序的设计。
2、学会用C语言进行矩阵按键应用程序的设计。
二、实验内容1、独立按键:对四个独立按键编写程序:当按k1时,8个LED同时100ms闪烁;当按k2时,8个LED从左到右流水灯显示;当按k3时,8个LED从右到左流水灯显示;当按k4时,8各LED同时从两侧向中间逐步点亮,之后再从中间向两侧逐渐熄灭;2、矩阵按键:采用键盘扫描方式,顺序按下矩阵键盘后,在一个数码管上顺序显示0~F,采用静态显示即可。
3、提高部分(独立按键、定时器、数码管动态扫描):编写程序,实现下面的功能。
用数码管的两位显示一个十进制数,变化范围为00~59,开始时显示00,每按一次k1,数值加1;每按一次k2,数值减1;每按一次k3,数值归零;按下k4,利用定时器功能使数值开始自动每秒加1;再按一次k4,数值停止自动加1,保持显示原数。
三、实验步骤1、硬件连接(1)使用MicroUSB数据线,将实验开发板与微型计算机连接起来;(2)在实验开发板上,用数据线将相应接口连接起来;2、程序烧入软件的使用使用普中ISP软件将HEX文件下载至单片机芯片内。
查看结果是否正确。
四、实验结果——源代码1. #include "reg52.h"typedef unsigned char u8;typedef unsigned int u16;#define LED P2sbit key1=P3^1;sbit key2=P3^0;sbit key3=P3^2;sbit key4=P3^3;const char tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; u8 code begMid[]={0x7e, 0xbd,0xdb,0xe7, 0xdb, 0xbd, 0x7e}; void Delay(u16 i){ while(i--);}void KeyDown(){u8 i;if(key2==0){Delay(1000);if(key2==0){for(i=0;i<8;i++){LED=tab[i];Delay(50000);}while(!key2);}LED=0xff;}else if(key1==0){Delay(1000);if(key1==0)for(i=0;i<3;i++){LED=0x00;Delay(10000);LED=0xff;Delay(10000);}}}}void Int0Init(){IT0=1;EX0=1;EA=1;}void Int1Init(){IT1=1;EX1=1;EA=1;} void main(){Int0Init();Int1Init();while(1){KeyDown();}}void Int0() interrupt 0{u8 i;if(key3==0){Delay(1000);if(key3==0)for(i=7;i>=0;i--){LED=tab[i];Delay(50000);}}}}void Int1() interrupt 2{u8 i;if(key4==0){Delay(1000);if(key4==0){for(i=0;i<=6;i++){LED=begMid[i];Delay(50000);}}}}2.#include "reg52.h"typedef unsigned int u16;typedef unsigned char u8;#define GPIO_DIG P0#define GPIO_KEY P1sbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;u8 KeyValue;u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//??0~F?? void delay(u16 i){while(i--);}void KeyDown(void){char a=0;GPIO_KEY=0x0f;if(GPIO_KEY!=0x0f){delay(1000);if(GPIO_KEY!=0x0f){GPIO_KEY=0X0F;switch(GPIO_KEY){case(0X07): KeyValue=0;break;case(0X0b): KeyValue=1;break;case(0X0d): KeyValue=2;break;case(0X0e): KeyValue=3;break;}GPIO_KEY=0XF0;switch(GPIO_KEY){case(0X70): KeyValue=KeyValue;break;case(0Xb0): KeyValue=KeyValue+4;break;case(0Xd0): KeyValue=KeyValue+8;break;case(0Xe0): KeyValue=KeyValue+12;break;}while((a<50)&&(GPIO_KEY!=0xf0)){delay(1000);a++;}}}}void main(){LSA=0;LSB=0;LSC=0;while(1){KeyDown();GPIO_DIG=smgduan[KeyValue];}}3.#include <reg52.h>typedef unsigned int u16;typedef unsigned char u8;#define KEYPORT P3sbit LSA=P2^2;sbit LSB=P2^3;sbit LSC=P2^4;sbit key1=P3^1;sbit key2=P3^0;sbit key3=P3^2;sbit key4=P3^3;u16 t;u8 sec;u8 DisplayData[2];u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void Time1Init(){TMOD |= 0x10;TH1=0Xd8;TL1=0Xf0;EA=1;ET1=1;}void delay(u16 i){while(i--); }void DigDisplay(){u8 i;for(i=0;i<2;i++){switch(i){case 0:LSA=0;LSB=0;LSC=0;break;case 1:LSA=1;LSB=0;LSC=0;break;}P0=DisplayData[i];delay(100);P0=0x00;}}void datapros(){DisplayData[0]=smgduan[sec%10];DisplayData[1]=smgduan[sec/10];}void main(){Time1Init();while(1){if(key4==0){delay(1000);if(key4==0){TR1=!TR1;while(key4==0);}}if(key3==0){delay(1000);if(key3==0){sec=0;while(key3==0);}}if(key2==0){delay(1000);if(key2==0){sec--;while(key2==0);}}if(key1==0){delay(1000);if(key1==0){sec++;while(key1==0);}}}}void Time1() interrupt 2{TH1=0Xd8;TL1=0Xf0;t++;if(t==100){t=0;sec++;if(sec>=60){sec=0;}}datapros();DigDisplay();}五、实验体会——结果分析1、独立按键:位定义四个按键key1、key2、key3、key4,宏定义LED为P2口,tab数组保存流水灯D0-D7依次点亮的数值,begMid数组保存流水灯同时从两侧向中间逐步点亮,之后再从中间向两侧逐渐熄灭的赋值方式。
实验五――电子秒表显示器
实验五――电子秒表显示器中国石油大学(北京)单片机原理及应用试验。
电子秒表显示器!中国石油大学(北京)实验课程:实验名称:实验报告单片机原理及应用实验五――电子秒表显示器中国石油大学(北京)单片机原理及应用试验。
电子秒表显示器!一、实验目的掌握定时/计数器的工作原理,熟悉定时/计数器中断法编程与调试内容。
二、实验内容1、按照教材图A.65,绘制实验五电路原理图;2、采用12MHz晶振,50ms T0定时方式1+中断(20次中断为1s)法编程;3、实现如下功能:程序启动时显示“00”,以后每隔1秒显示值加1,显示到59后,自动从“00”开始,如此无限往复。
3、观察仿真结果,完成实验报告。
三、实验要求提交的实验报告中应包括:电路原理图,T0定时方式1工作原理阐述,源程序(编程思路说明与源程序),仿真效果(运行截图与讨论),实验小结(结论与体会)。
其中讨论内容为:当前编程方案的不足之处?可以如何改进?提交实验报告的电子邮件主题及存盘文件名格式如,20XX 年0*****马晓明实验五。
中国石油大学(北京)单片机原理及应用试验。
电子秒表显示器!1、电路原理图图1 电路原理图2、T0定时方式1工作原理阐述T1T0脚T0TF0查询/中断TR0图2 T0定时/计数方式1逻辑结构图CT原理时,T0为定时器工作方式。
逻辑开关CT向上接通,此时以振荡器的12分频信号作为T0的计数信号。
若GATE=0,定时器T0的启动和停止完全由TR1的状态决定,而与INT0无关。
中国石油大学(北京)单片机原理及应用试验。
电子秒表显示器!已知T0方式1由高8位THx和低8位TLx组成一个16位的加一计数器。
若想要产生一个长度为t的定时,则需要为计数器赋初值a。
a = 216 C t* fos / 12 ,将a值得高8位赋给THx,低8位赋给TLx。
如此,当晶振产生时间长度为t的脉冲时,计时器发生溢出,使得TF0=1,从而触发了中断响应。
STC89C52学习板说明书
1 51 单片机开发板概述
本款51单片机开发板是一款专门为初学者量身定做的51单片机学习开 发板,拥有丰富的资源和例程。每个例程都做了详细的注释,由浅入深一 步一步引导你学习掌握。本板的单片机IO口全部引出,拔去上面的跳线帽 就是一个最小系统,方便购买者再次开发使用。
本款51单片机开发板套件的标准配置为: 1、STC89C52学习板一块 2、USB线一条 3、串口线一条 4、1206 LCD屏一块 5、光盘一张
首先插入51单片机,注意管脚的摆放,如果插入方向错误将可能导致单 片机的烧坏;检查电源开关是否处于断开状态,如果不是请将电源开关断 开;然后接入与计算机相连的串口线;最后接入USB+5V电源。再次检查单 片机是否有接错,如无,打开电源开关,查看是否有异常情况:电源指示 灯是否正常;有无板上芯片过热;如无则工作正常,现在你可以开始下一 步的程序检测调试。
定时器中断实验报告
定时器中断实验报告
《定时器中断实验报告》
实验目的:通过定时器中断实验,掌握定时器中断的原理和应用,加深对嵌入式系统中断处理的理解。
实验原理:定时器中断是一种常见的嵌入式系统中断方式,通过设置定时器的计数值和中断触发条件,可以实现定时中断功能。
在实验中,我们通过配置定时器的工作模式、计数值和中断触发条件,来实现定时中断功能。
实验过程:首先,我们在实验板上搭建了一个简单的嵌入式系统,包括主控芯片、定时器模块和LED灯。
然后,我们编写了一段简单的程序,配置定时器的工作模式为定时模式,设置定时器的计数值为1000ms,并配置定时器中断触发条件为计数器溢出。
接着,我们将LED灯的亮灭控制放在定时器中断服务函数中,当定时器中断触发时,LED灯状态发生改变。
最后,我们下载程序到实验板上,观察LED灯的亮灭情况。
实验结果:经过实验,我们成功实现了定时器中断功能,当定时器计数器溢出时,定时器中断触发,LED灯状态发生改变。
通过调整定时器的计数值,我们还可以实现不同的定时中断周期,满足不同的应用需求。
实验结论:定时器中断是一种常见的嵌入式系统中断方式,可以实现定时中断功能,用于实现定时任务、定时采样等应用场景。
通过本次实验,我们深入理解了定时器中断的原理和应用,为进一步深入学习嵌入式系统中断处理打下了坚实的基础。
通过本次实验,我们不仅掌握了定时器中断的原理和应用,还提高了对嵌入式系统中断处理的理解,为今后的嵌入式系统开发工作奠定了基础。
希望通过更
多的实验和学习,我们能够进一步提升自己的嵌入式系统开发能力,为未来的科研和工程实践做出更大的贡献。
AVR定时器学习笔记
0
0
0
0
1 普通模式
0xFF
立即
0xFF 比较匹配时触发 OC0
0
0
0
1
0 普通模式
0xFF
立即
0xFF 比较匹配时清零 OC0
0
0
0
1
1 普通模式
0xFF
立即
0xFF 比较匹配时置位 OC0
1
0
1
0
0 PWM,相位可调
0xFF
0xFF
0x00 PB3 为通用 I/O 引脚
1
0
1
0
1 PWM,相位可调
求定时时间
TS = {(MAX+1-TCNT0)* N }/Fclk
0.(A)
变量 N 代表预分频因子(1、8、64、或 1024),TS 定时时间,MAX 最大计数,Fclk 系统时钟
TCNT0 T/C0 的初始值;
求 T/C0 的初值
TCNT0 = MAX+1 – {(TS*Fclk)/N } (B)
第二部分:定时器 0 T/C0 定时器 0 有两个中断源 TIMER0 OVF(溢出中断)和 TIMER0 COMP(比较匹配中断),中断向量号分别为 10
和 20;在三个定时器中,T/C0 的中断级别最低。(PS:既然 TIMER0 OVF(溢出中断)比 TIMER0 COMP(比较匹配 中断)优先级要高,那么 T/C0 主要用在计数方面吧?^-^ ^-^) 1、 T/C0 的时钟源 T/C0 的计数时钟源可由来自外部引脚 T0(PB0)的信号提供,也可来自芯片的内部。时钟源
OCR0
立即
0xFF PB3 为通用 I/O 引脚
2
1
实验3-外部中断实验报告
实验3-外部中断实验报告实验 3 外部中断实验报告一、实验目的本次实验的主要目的是深入理解外部中断的工作原理和应用,通过实际操作掌握外部中断的配置和编程方法,提高对微控制器中断处理机制的认识和应用能力。
二、实验设备1、开发板:_____型号开发板。
2、编程软件:_____。
3、电脑:具备相应接口和操作系统。
三、实验原理外部中断是指由外部事件引起的微控制器中断。
当外部中断引脚检测到特定的电平变化(如从高电平变为低电平或从低电平变为高电平)时,微控制器会暂停当前正在执行的程序,转而执行中断服务程序(ISR)来处理外部事件。
在本次实验中,我们使用了开发板上的特定引脚作为外部中断输入引脚,并通过配置相关寄存器来设置中断触发方式、优先级等参数。
四、实验步骤1、硬件连接将外部中断源(如按键)连接到开发板的指定引脚。
确保开发板与电脑正确连接,以便进行编程和调试。
2、软件编程打开编程软件,创建新的项目。
配置微控制器的时钟、引脚等基本设置。
编写中断初始化函数,设置中断触发方式、优先级等。
编写中断服务程序,定义在中断发生时需要执行的操作。
3、编译与下载对编写好的程序进行编译,检查是否存在语法错误。
将编译成功的程序下载到开发板中。
4、实验测试按下连接的按键,观察开发板的响应,如指示灯的变化、数据的输出等。
五、实验结果与分析1、当按下按键时,开发板能够准确地响应外部中断,执行中断服务程序。
在中断服务程序中,我们设置了指示灯的状态变化,通过观察指示灯的闪烁情况,可以确认中断是否被正确触发和处理。
2、对不同的中断触发方式(如下降沿触发、上升沿触发等)进行测试,结果均符合预期。
这表明我们对中断触发方式的配置是正确的。
3、调整中断的优先级,观察不同优先级中断之间的响应顺序。
在实验中,高优先级的中断能够优先得到处理,符合微控制器中断处理的优先级机制。
六、遇到的问题及解决方法1、问题:在初次编程时,中断服务程序没有被正确执行。
解决方法:仔细检查中断初始化函数中的参数设置,确保中断触发方式、优先级等配置正确。
arm7(lpc2138)实验例程
微机原理实验报告实验名称:步进电机控制院系:物理与机电工程学院专业班级:0 8电子信息工程学号:**********学生姓名:***指导教师:完成时间:2011年5月5日报告成绩:一、实验目的1、掌握四相五线步进电机的工作原理2、以单四拍的方式用LPC2138与L297、L298控制步进电机二、实验原理1、用软件的方式通过对P1_21与P1_22的控制,并通过L297、L298驱动5V直流步进电机,原理图如下:2、同时用按键产生外部中断控制电机的转速与转向。
转速的控制主要是脉冲的频率,为了控制的简单,可以直接利用软件延时的方法实现。
3、程序再增加上位机控制步进电机指令4、程序流程图三、实验设备微机、EasyARM2131-LYXY V1.14学习开发板四、实验效果上电时步进电机按初始化的速度转动,按下4个按键分别执行增、减速;正、反转,同时上位机显示控制指令。
五、实验总结1、此次实验由于不是精细控制步进电机的步进量,所以只用简单的延时程序就可以控制速度,但要注意延时变量的取值避免步进电机出现失步现象。
2、写中断服务程序时记得清除相应的中断标志,且一定不要忘了VICVectAddr =0x00;即通知VIC中断处理结束。
一开始实验时由于少了此句,程序一直不正常。
七、程序清单#include "config.h"int DelayTime=60; //延时参数typedef struct UartMode{uint8 datab; //字长度,5/6/7/8可选uint8 stopb; //停止位,1/2可选uint8 parity; //奇偶校验位,0:无校验;1:奇检验;2:偶检验}UARTMODE;uint8 rcv_buf; //UART0数据接收缓冲区uint8 rcv_new; //接收数据标志void delay(int dly){int i,j;for(i=0; i<dly; i++)for(j=0; j<1200; j++);}//串口0数据发送函数void UART0_SendByte(uint8 dat){U0THR=dat;while((U0LSR&0x20)==0); //等待数据发送完毕}//串口0初始化函数uint8 UART0_Init(uint32 baud, UARTMODE set){uint32 bak;//参数过滤if((baud==0)||(baud>115200))return(0);if((set.datab<5)||(set.datab>8))return(0);if((set.stopb==0)||(set.stopb>2))return(0);if(set.parity>4)return(0);//设置串口的波特率U0LCR=0x80; //DLAB=1bak=(Fpclk>>4)/baud;U0DLM=bak>>8;U0DLL=bak&0xff;//设置串口模式bak=set.datab-5; //设置字长if(set.stopb==2)bak|=0x04; //判断是否为2位停止位if(set.parity!=0){set.parity=set.parity-1;bak|=0x08;}bak|=set.parity<<4; //设置奇偶校验U0LCR=bak;return(1);}//中断初始化函数void Int_Init(void){EXTMODE=0x00; //设置外部中断为电平触发IRQEnable(); //使能IRQ中断VICIntSelect=0x00000000; //设置所有分配为IRQ中断VICVectCntl4=0x20|0x0e; //分配外部中断4到向量中断0VICVectCntl1=0x20|0x0f; //分配外部中断1到向量中断0VICVectCntl2=0x20|0x10; //分配外部中断2到向量中断0VICVectCntl3=0x20|0x11; //分配外部中断3到向量中断0VICVectCntl0=0x20|0x06; //分配Uart0中断到向量中断0//设置中断服务程序地址VICVectAddr4=(uint32)IRQ_Eint0;VICVectAddr1=(uint32)IRQ_Eint1;VICVectAddr2=(uint32)IRQ_Eint2;VICVectAddr3=(uint32)IRQ_Eint3;VICVectAddr0=(uint32)IRQ_UART0;EXTINT=0x0f; //清除所有外部中断标志VICIntEnable=(1<<0x0e)|(1<<0x0f)|(1<<0x10)|(1<<0x11)|(1<<0x06);//使能所用到的中断}//工作模式设置函数void SetWorkMode(char WorkMode){//WorkMode:控制信号// '+':加速 '-':减速'<':逆时针'>':顺时针switch(WorkMode){case '+':if(DelayTime>20)DelayTime=DelayTime-20; //减少延时,即加速break;case '-':if(DelayTime<100)DelayTime=DelayTime+20; //增加延时,即减速break;case '<':IO0CLR=0x01<<21; //设置的步进电机的运转方向为逆时针break;case '>':IO0SET=0x01<<21; //设置的步进电机的运转方向为顺时针break;default :break;}}//外部中断0服务程序void __irq IRQ_Eint0(void){IO0CLR=0x01<<21; //设置的步进电机的运转方向为逆时针while((EXTINT&0x01)!=0){EXTINT=0x01; //清除中断标志}VICVectAddr=0;}//外部中断2服务程序void __irq IRQ_Eint2(void){if(DelayTime>20)DelayTime=DelayTime-5; //减少延时,即加速while((EXTINT&0x04)!=0){EXTINT=0x04; //清除中断标志}VICVectAddr=0;}//外部中断1服务程序void __irq IRQ_Eint1(void){IO0SET=0x01<<21; //设置的步进电机的运转方向为顺时针while((EXTINT&0x02)!=0){EXTINT=0x02; //清除中断标志}VICVectAddr=0;}//外部中断3服务程序void __irq IRQ_Eint3(void){if(DelayTime<100)DelayTime=DelayTime+5; //增加延时,即减速while((EXTINT&0x08)!=0){EXTINT=0x08; //清除中断标志}VICVectAddr=0;}//串口0接收中断服务程序void __irq IRQ_UART0(void){if((U0IIR&0x0f)==0x04)rcv_new=1; //设置接收到新的数据标志rcv_buf=U0RBR; //读取FIFO的数据,并清除中断VICVectAddr=0;}int main (void){UARTMODE set;set.datab=8; //设置字长度为8位set.stopb=1; //设置停止位为1位set.parity=0; //设置检验方式为无校验rcv_new=0; //接收数据标志初始化PINSEL0=0x0005c0c5;PINSEL1=0x00000301;IO0DIR=0x03<<21; //设P0.21-P0.22为输出UART0_Init(9600, set); //串口初始化U0FCR=0x01; //使能FIFO,并设置触发点为1字节U0IER=0x01; //允许RBR中断,即接收中断Int_Init(); //中断初始化(外部中断、串口中断)while(1){if(rcv_new==1){rcv_new=0;SetWorkMode(rcv_buf);//根据输入控制信号改变步进电机的工作模式UART0_SendByte(rcv_buf); //把键盘输入发回虚拟终端回显}IO0SET=0x01<<22;delay(DelayTime);//DelayTime初始值设定为60IO0CLR=0x01<<22;delay(DelayTime);}return 0;}。
实验五 24小时时钟显示控制实验
实验五24小时时钟显示控制实验
一、实验要求
1..P0口的2个扩展口作为段控口和位控口,通过使用P2.6和P2.7对SN74HC573芯片的使能,设计一个24小时时钟显示控制电路,时间显示时只用左边6个LED数码管;
2.利用INT0按钮作为启动/停止键,INT1按钮作为清0键,并按键采用中断响应;
3.系统复位时,显示“000000”,当第一次按下启动/停止键时,开始计时,再按一次时钟停止,再按又从原来时间的基础上继续计时……;当按下清0键时,停止计数并将时间恢复到“000000”
4.画出AT89C51实现上述功能的完整电路图,包括单片机电源、复位电路、晶振电路、显示电路和控制电路;
5.完成全部程序和电路调试工作;
二、实验目的
1.掌握定时器工作原理和使用方法;
2.掌握单片机外部中断和定时中断的控制方法;
三、设计提示
1.按钮控制均在外部中断中进行,建议将外部中断的引脚输入电平设置为下降沿有效,同时将外部中断的优先级设置为高。
2. 定时用定时器中断实现。
3. 演示时,时间可提速(比如提速10倍,用0.1秒表示1秒)。
4. 实验前:请搭好电路&编好程序。
五、参考电路图
提示:图中的段码-位码都是用P0口控制,为了简化,可以使用不同的P口。
全局图
局部图1 局部图2。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五外部中断应用实验一、实验目的:1.了解S3C2440外部中断的工作原理。
2.掌握S3C2440外部中断的使用方法。
二、实验设备:PC机、仿真器、ARM 实验箱。
三、实验内容:通过外部S201、S202、S203 按键触发外部中断。
四、实验原理:5.1 ARM 的异常中断类型在嵌入式系统中外部设备的功能实现主要是靠中断机制来实现的。
中断功能可以解决CPU 内部运行速度远远快于外部总线速度而产生的等待延时问题。
ARM 提供的FIQ 和IRQ 异常中断用于外部设备向CPU 请求中断服务,一般情况下都是采用IRQ 中断。
5.2 异常中断响应过程和返回过程异常中断的响应过程:1).保存处理器当前状态寄存器CPSR 的值到备份程序状态寄存器SPSR 中。
2).设置但前程序状态寄存器CPSR 的值,其中包括:设置CPSR 响应位的值,使处理24器进入特定的处理器模式;按要求屏蔽中断,通常应该屏蔽IRQ 中断。
在FIQ 总断时屏蔽FIQ 中断。
3).设置Lr 寄存器。
将相应中断模式的Lr 寄存器的值设为异常中断的返回地址。
4).处理程序计数器PC,将PC 值设为相应的中断向量的地址,从而实现跳转以执行中断服务程序。
异常中断的返回过程:当处理器执行完以上流程之后,处理器已经从中断向量进入异常处理的状态。
异常中断处理完毕之后,在异常中断程序的末端,处理器进入异常中断的返回状态,其流程如下:1).恢复状态寄存器。
将保存的备份程序状态寄存器SPSR 值赋给当前程序状态寄存器CPSR。
2).将返回地址赋值到程序计数器(PC)。
这样程序将返回到异常中断产生的下一条指令或出现问题的指令处执行。
需要注意的是:对于不同的异常中断,其返回地址的计算方法也是不同的,IRQ 和FIQ异常中断产生时,程序计数器PC 已经更新,而SWI 中断和未定义指令中断时由当前指令自身产生的,程序计数器PC尚未更新,所以要计算出下一条指令的地址来执行返回操作;指令预取指中指异常中断和数据访问中断要求,返回到出现异常的执行现场,重新执行操作。
保存状态寄存器CPSR->进入特定模式、屏蔽中断->设置Lr 寄存器->设置程序计数器PC进入中断向量、异常中断的处理程序->恢复状态寄存器->将返回地址复制到程序计数器。
5.3 异常中断的安装S3C2440 系统通过异常向量表安装异常中断处理程序。
即将异常向量表指向异常中断处理程序的入口,实现面向异常中断的跳转,异常向量中断的的入口地址是固定的(0x00 -0x1C),系统运行到满足异常中断时,系统将自动跳入相应的异常中断向量表中,而在异常向量表中保存的正是利用跳转指令或LDR 指令指向该中断的异常中断处理程序,这就实现了异常中断处理程序的安装。
1).利用跳转指令实现异常中断的安装将 BL 指令放置到中断向量表的特定位置,跳转目标地址为中断处理程序的首地址,便可直接实现异常中断的安装。
其优点是BL指令可以直接保存地址,缺点是BL的跳转范围只有32MB 的地址空间。
2).利用ldr 指令实现异常中断的安装利用ldr 直接向程序计数器PC 中赋值也可以实现中断处理程序的安装。
先要将异常中断处理程序首地址的绝对地址放在临近的一个存储单元中,然后用ldr 命令将该内存单元中的地址读取到PC 中。
其优点是可调用程序的范围不受限制。
五、S3C2440 的中断控制器:SRCPND――源中断指示寄存器SRCPND 寄存器32 位中的每一位对应着一个中断源,每一位被设置为 1,则相应的中断源产生中断请求并且等待中断被服务。
因此,这个寄存器表明了哪个中断源在等待中断请求被处理。
注意,SRCPND 寄存器的每一位是由中断源自动设置的,而不管INTMSK寄存器中的屏蔽位是否置 1。
另外,SRCPND 寄存器不影响中断控制器的优先级逻辑。
在指定中断源的中断服务程序中,SRCPND 寄存器相对应的位必须被清除,这样才可以正确响应来自同一中断源的中断请求。
如果从ISR 返回而没有清除相应的位,也就是SRCPND 寄存器中的对应的位还是1,那么就会一直响应这个中断请求。
SRCPND 中相应的中断位清除的时间依赖于用户的需求,如果想要从同一中断源接收另一次有效的中断请求,你在第一次就应该清除相应的位,并且使能中断。
用户可以通过向SRCPND 寄存器的相应位写“1”,这样可以清除该位。
下表为SRCPND 寄存器的地址和位定义说明。
INTMOD――中断模式寄存器中断模式寄存器(INTMOD)的32 位中的每一位对应一个中断源,当INTMOD 的每一位都设置位 1,则ARM 内核将以FIQ 模式相应中断,否则将以IRQ 模式相应中断。
25INTMOD 寄存器的定义如下表:INTPND――中断请求寄存器中断请求寄存器32 位中的每一位对应着相应的中断请求,经过优先级逻辑后,INTPND 寄存器只能有一位被设置为 1,并且向ARM 产生中断请求。
在IRQ 中断服务子程序,能够读取这个寄存器的值来决定32 个中断源的那一个中断被服务。
同 SRCPND 寄存器,在中断服务子程序里,这个寄存器的相应位需要被清除。
我们可以向INTPND 寄存器写一个数据 1,来清除寄存器的指定位。
INTMSK――中断屏蔽寄存器在 INTMSK 寄存器中,32 位依次对应着每个中断源,如果指定位被设为 1,ARM 将不响应中断源的中断请求(注意,即使在SRCPND 相应的位被置位1 的条件下也不响应)。
如果屏蔽位为 0,则中断请求可以被响应。
INTOFFSET――中断偏移寄存器中断偏移寄存器INTOFFSET 中的值显示了INTPND 寄存器中哪一个IRQ 的中断请求,这个位在清除SRCPND 和INTPND 后将自动清除。
S3C2440 子中断列表SUBSRCPND――次级源中断指示寄存器INTSUBMSK――次级中断屏蔽寄存器EXTINTn――外部中断控制寄存器n外部中断控制寄存器可以控制外部中断信号有效方式,外部中断信号有效方式可以设置为电平触发和边沿触__________发,具体内容见下表。
EINTPND――外部中断判断寄存器EINTPND 用来判断外部的20 个中断源(EINT[23:4]),用户可以通过向EINTPEND寄存器的相应位写“1”,这样可以清除该位。
EINTMASK――外部中断屏蔽寄存器五、实验程序:6.1 外部中断服务程序static void __irq Eint0_ISR(void){EINT0 ----- GPF0;EINT2 ----- GPF2;EINT11 ----- GPG3;EINT19----- GPG11通过外部S2、S3、S4、S5 按键触发外部中断EINT0、EINT2、EINT11、EINT19。
ClearPending(BIT_EINT0); Uart_Printf("EINT0 is occurred.\n");}static void __irq Eint2_ISR(void){ClearPending(BIT_EINT2); Uart_Printf("EINT2 is occurred.\n");}static void __irq Eint11_19_ISR(void){if(rEINTPEND & (1<<11)){Uart_Printf("EINT11 is occurred.\n"); rEINTPEND=(1<<11); ClearPending(BIT_EINT8_23);} else if(rEINTPEND &(1<<19)){Uart_Printf("EINT19 is occurred.\n"); rEINTPEND=(1<<19); ClearPending(BIT_EINT8_23);} else{Uart_Printf("others ENTs are occurred\n"); rEINTPEND=0xffffff; ClearPending(BIT_EINT8_23); }}6.2 中断初始化函数void xmain(void){26ChanHKlockDivider(3,1); ChangeMPllValue(127,2,1); //405MHZIsr_Init();Uart_Init(0, 115200); Uart_Select(0);Uart_Printf("the main is running\n");rGPFCON = (rGPFCON & ~((3<<4)|(3)))|(1<<5)|(1<<1); //GPF0/2 = EINT0/2rGPGCON = (rGPGCON & ~((3<<22)|(3<<6)))|(1<<23)|(1<<7); //GPG3/11 = EINT11/19rEXTINT0 = (rEXTINT0 & ~(7<<8))|(2<<8); //EINT0/2=falling edge triggered rEXTINT0 = (rEXTINT0&~(7<<0))|(2<<0);rEXTINT1 = (rEXTINT1 & ~(7<<12))|(0x2<<12); //EINT11=falling edge triggered rEXTINT2 = (rEXTINT2 & ~(7<<12))|(0x2<<12); //EINT19=falling edge triggeredpISR_EINT0=(U32)Eint0_ISR;pISR_EINT2=(U32)Eint2_ISR;pISR_EINT8_23=(U32)Eint11_19_ISR;rEINTPEND = 0xffffff;rSRCPND |= BIT_EINT0|BIT_EINT2|BIT_EINT8_23; //to clear the previous pending states rINTPND |= BIT_EINT0|BIT_EINT2|BIT_EINT8_23;rEINTMASK=~( (1<<11)|(1<<19) );rINTMSK=~(BIT_EINT0|BIT_EINT2|BIT_EINT8_23);while(1){Uart_Printf("the main is running\n"); Delay(100000);}}六、实验步骤:1.连接好实验环境,将仿真器的一端通过并口连接到PC 机,将仿真器的另一端通过ARM 仿真器先连接到ARM实验箱的JTAG 接口。