AVR单片机基本输入和外部中断实验二
- 格式:doc
- 大小:185.50 KB
- 文档页数:13
一、实验目的1. 理解单片机外部中断的工作原理和触发条件。
2. 掌握如何通过外部中断实现计数功能。
3. 学习中断服务程序的设计方法。
4. 提高单片机编程和调试能力。
二、实验环境1. 单片机:80C512. 开发工具:Keil uVision3. 实验电路:按键、LED灯、单片机及其相关外围电路三、实验原理外部中断是指单片机通过外部引脚接收到的中断信号,使得CPU暂停当前程序,转而执行中断服务程序。
本实验通过外部中断实现计数功能,具体原理如下:1. 将单片机的某个外部引脚(如P3.2)设置为外部中断0(INT0)的触发引脚。
2. 在外部中断0的中断服务程序中,设置一个计数变量,每次中断发生时,计数变量加1。
3. 将计数变量的值通过LED灯显示出来,以观察计数过程。
四、实验步骤1. 创建Keil uVision项目,并添加80C51固件库。
2. 编写C语言程序,实现以下功能:- 初始化外部中断0,设置中断触发方式为下降沿触发。
- 初始化定时器,用于产生中断。
- 编写外部中断0的中断服务程序,实现计数功能。
- 编写主函数,用于设置单片机的工作状态和显示计数结果。
3. 编译并下载程序到单片机。
4. 连接实验电路,包括按键、LED灯和单片机及其相关外围电路。
5. 观察实验现象,验证计数功能是否实现。
五、实验结果与分析1. 实验现象:按下按键,LED灯显示的计数值加1。
2. 分析:- 外部中断0的中断服务程序被正确调用。
- 计数变量在每次中断发生时加1。
- LED灯能够正确显示计数结果。
六、实验总结1. 本实验成功实现了通过外部中断实现计数功能,验证了单片机外部中断的工作原理。
2. 通过编写中断服务程序,掌握了中断编程方法。
3. 实验过程中,遇到了一些问题,如中断服务程序编写错误、程序编译错误等,通过查阅资料和调试,最终解决了问题。
4. 通过本次实验,提高了单片机编程和调试能力,加深了对单片机外部中断的理解。
一、实验目的1. 理解外部中断的概念和作用。
2. 掌握外部中断的编程方法。
3. 熟悉中断处理程序的设计和调试。
二、实验原理外部中断是指由外部设备或信号产生的中断,用于处理与CPU无关的事件。
在微机系统中,外部中断通常用于处理输入/输出设备的中断请求。
外部中断分为可屏蔽中断和不可屏蔽中断两种类型。
三、实验环境1. 开发平台:Keil uVision 52. 微控制器:STM32F103C8T63. 外部设备:按钮、LED灯4. 连接方式:通过GPIO引脚连接四、实验步骤1. 设计外部中断电路(1)将按钮连接到STM32F103C8T6的GPIO引脚,例如PA0引脚。
(2)将LED灯连接到STM32F103C8T6的另一个GPIO引脚,例如PB0引脚。
2. 编写外部中断初始化程序(1)在Keil uVision 5中创建一个新项目,并添加STM32F103C8T6的起始代码。
(2)在主函数中编写初始化程序,包括以下步骤:a. 配置PA0引脚为输入模式,设置为浮空输入。
b. 配置PB0引脚为输出模式,用于控制LED灯。
c. 使能中断,设置中断优先级。
d. 配置NVIC(嵌套向量中断控制器)以允许外部中断。
3. 编写外部中断处理程序(1)在项目中添加一个新的C文件,用于编写外部中断处理程序。
(2)编写外部中断处理函数,当按钮按下时,触发中断,控制LED灯闪烁。
a. 初始化外部中断处理函数,设置中断优先级和中断触发方式。
b. 在外部中断处理函数中,编写LED灯控制代码,实现LED灯闪烁。
4. 编译并下载程序(1)编译项目,生成.hex文件。
(2)将.hex文件下载到STM32F103C8T6开发板上。
5. 测试实验结果(1)将按钮按下,观察LED灯是否闪烁。
(2)松开按钮,LED灯停止闪烁。
五、实验结果与分析1. 实验结果实验过程中,当按钮按下时,LED灯闪烁;松开按钮后,LED灯停止闪烁。
实验结果表明,外部中断能够正确地处理外部设备的中断请求,并控制LED灯的亮灭。
一、实训目的1. 理解单片机外部中断的概念和作用。
2. 掌握单片机外部中断的配置方法。
3. 学会编写外部中断服务程序。
4. 通过实际操作,提高单片机编程和调试能力。
二、实训内容1. 单片机外部中断原理2. 单片机外部中断配置3. 外部中断服务程序编写4. 实验验证与调试三、实训环境1. 单片机开发板:选用STC89C52单片机。
2. 仿真软件:Proteus。
3. 实验工具:示波器、电源、连接线等。
四、实训步骤1. 理解单片机外部中断原理外部中断是单片机中断系统中的一种,用于响应外部事件。
当外部事件发生时,单片机会暂停当前程序,转去执行外部中断服务程序。
外部中断有多个中断源,如INT0、INT1等。
2. 单片机外部中断配置(1)设置外部中断触发方式:根据需要选择上升沿触发、下降沿触发或双边沿触发。
(2)设置外部中断优先级:根据实际需求设置中断优先级。
(3)设置外部中断使能:通过设置IE寄存器使能外部中断。
3. 外部中断服务程序编写编写外部中断服务程序,用于处理外部中断事件。
在服务程序中,完成相关处理逻辑,如记录外部事件发生次数、控制LED灯闪烁等。
4. 实验验证与调试(1)搭建实验电路:将单片机开发板与外部设备(如按钮)连接,设置好外部中断配置。
(2)在Proteus中搭建仿真电路,编写代码。
(3)下载代码到单片机开发板,观察实验现象。
(4)根据实验现象,调试程序,确保外部中断功能正常。
五、实验结果与分析1. 实验现象:按下外部按钮,单片机进入外部中断服务程序,控制LED灯闪烁。
2. 分析:通过设置外部中断触发方式、优先级和使能,成功实现外部中断功能。
在服务程序中,完成相关处理逻辑,达到预期效果。
六、实训总结1. 通过本次实训,掌握了单片机外部中断的配置方法,学会了编写外部中断服务程序。
2. 熟悉了外部中断在实际应用中的重要作用,提高了单片机编程和调试能力。
3. 在实训过程中,遇到了一些问题,如外部中断响应不及时、LED灯闪烁不稳定等。
实验二外部中断实验一、实验目的1.掌握外部中断技术的基本使用方法2.掌握中断处理程序的编写方法二、实验原理1.外部中断的初始化设置的三项内容:中断总允许即EA=1,外部中断允许即EXi=1(i=0或1),中断方式设置。
中断方式设置一般有两种方式:电平方式和脉冲方式.2.中断服务的关键:(1)保护进入中断时的状态。
堆栈有保护断点和保护现场的功能使用PUSH,在转中断服务程序之前把单片机中有关寄存单元的内容保护起来。
注:中断程序自动保护PC,对其做入栈操作(2)用POP指令恢复中断时的现场。
(先进后出)3.中断控制原理:中断控制是提供给用户使用的中断控制手段。
实际上就是控制一些寄存器,51系列用于此目的的控制寄存器有四个:TCON 、IE 、SCON 及IP。
TCON格式SCON格式三、实验内容参考实验程序(主程序为P1口输出跑马灯程序),编写中断子程序使得发生外部中断0,且为下降沿触发时,LED灯全亮。
中断结束后LED继续接上次状态进行跑马灯闪烁。
注:注意保护现场。
且编译器不支持工作组寄存器名(R0-R7)入栈,需要对栈地址操作。
例:PUSH 06H ;把R6入栈等同 PHSHU R6四、实验步骤1.使用单片机最小应用系统1模块,P1接发光二极管,INTO接单次脉冲输出端。
2.用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。
3.打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加**.ASM源程序,进行编译,直到编译无误。
4.打开模块电源和总电源,点击开始调试按钮,点击RUN按钮运行程序。
五、参考程序ORG 0000HLJMP STARTORG 0030HSTART: MOV A, #0FEHOUTPUT: MOV P1,ARL AACALL DELAYLJMP OUTPUTDELAY: MOV R6,#0MOV R7,#0MOV R5#5DELAYLOOP: ;延时程序DJNZ R6,DELAYLOOPDJNZ R7,DELAYLOOPDJNZ R5,DELAYLOOP RETEND。
A VR学习笔记二、基本输入和外部中断实验-------基于LT_Mini_M162.1 利用按键控制发光二极管的亮灭2.1.1 实例功能在“点亮发光二极管”和“让发光二极管动起来”这两个例子中,都是通过单片机程序来控制发光二极管的亮灭。
如果想要控制发光二极管的亮灭,只有通过打开或者关闭电源来实现控制。
那么怎样实现人工参与控制呢?在有些应用场合,需要单片机对人工的开关信号作出相应的响应和处理,通过控制电源的通断会影响到单片机系统中的其他功能,所以通过控制电源的方法并不明智。
能不能通过按动一个按键来实现发光二极管的亮灭呢?当然可以,前面已经讲过,A VR单片机的I/O口都是双向的,也就是既能当作输出控制端口,也能当作输入检测端口。
既然我们可以通过控制端口输出不同的高低电平使发光二极管实现点亮和熄灭;那么为什么不能通过监测端口输入电平的状态来进行相应的处理呢。
在本例中,通过介绍利用按键开关控制发光二极管的亮灭来了解A VR单片机的端口检测外部信号的功能和方法。
本例中有3个功能模块,描述如下:●单片机系统:检测外界的按键开关信号,根据按键的开关状态控制发光二极管的亮灭状态。
●外围电路:首先是产生信号的按键电路,包括对按键去抖动电路的介绍;然后是发光二极管的控制电路。
●软件程序:通过读取AVR单片机相应端口的状态,编写相应的程序控制发光二极管的亮灭。
本例的目的在于希望读者完成本例后,能完成相关电路的设计和相应程序的编写,从而掌握以下知识点:◆了解AVR单片机端口输入功能,掌握使用AVR单片机端口输入功能检测外部信号的原理。
◆熟悉单片机端口输入输出功能的综合使用。
◆掌握AVR单片机按键的硬件去抖动的电路设计和原理。
◆掌握AVR单片机端口输入输出程序的编写。
◆掌握AVR单片机按键软件去抖动功能的实现。
2.1.2 器件和原理本例主要介绍A VR单片机外围电路中按键去抖电路的设计,分别介绍相应的软件和硬件解决方案。
AVR单片机外部中断0、1、2 详解中断基本包含:1.中断源2.中断向量(中断入口地址)3.中断优先级4.中断函数除此之外,在单片机中,中断的执行或者中断的触发必须符合以下的规则:中断触发|执行= 全局中断使能位AND 中断源使能位AND 中断源标志位单片机内部中断的触发必须完成,全局中断使能,中断源使能,中断源标志位置一等条件。
除此之外,如果是外部中断0,1,2(INT0,1,2),必须设置引脚触发的规则。
最后呢,就是需要在程序里建立处理中断的中断函数。
在编程的时候的步骤大致如下:(无视INT2)1. 初始化PD2,PD3 为输入状态。
DDRD|=BIT(2)|BIT(3);2. 设置INT0,1 引脚触发的规则,实验中为低电平触发。
MCUCR=0xF0;3. 设置INT0,1 中断源使能位为逻辑1。
GICR|BIT(7)|BIT(6);4. 清除INT0,1 的中断标志位(软件写入,逻辑1 为清除)。
GIFR|=BIT(7);BIT(6);5. 全局中断允许位使能。
SREG|=BIT(7);6. 编辑中断处理函数。
/*ATmega16提供3个外部中断,分别由INT0、INT1和INT2引脚触发。
需要注意的是,如果将ATmega16设置为允许外部中断,则即使把INT0、INT1和INT2引脚设置为输出方式,外部中断仍然会被触发。
外部中断可选择采用上升沿触发、下降沿触发和低电平触发(INT2中断只能采用沿触发方式。
*/#include;#include;#include "smg.h"/*1.状态寄存器SREGbit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0I T H S V N Z CI:全局中断使能位。
在I置位后,单独的中断使能由不同的中断寄存器控制。
若I为0,则禁止中断。
MCU 控制寄存器- MCUCR MCU 控制寄存器包含中断触发控制位与通用 MCU 功能Bit 7 6 5 4 3 2 1 0SM2 SE SM1 SM0 ISC11 ISC10 ISC01 ISC00外部中断 1 由引脚 INT1 激发,如果 SREG 寄存器的 I 标志位和相应的中断屏蔽位置位的话。
实验二外部中断实验一、实验目的1.学会使用Keil μVision3和Proteus软件进行单片机汇编语言和C语言程序设计与开发。
了解和掌握MCS-51单片机的中断组成、中断控制工作原理、中断处理过程、外部中断的中断触发方式, 掌握中断功能的编程方法。
二、实验内容1.单片机的P1.0引脚连接LED指示灯D0。
单片机的P3.2引脚(INT0)连接按键开关K, 作为中断源, 每次按键都会触发INT0中断。
在INT0中断服务程序中将P1.0端口的信号取反, 使LED指示灯D0在点亮和熄灭两种状态间切换, 产生LED指示灯由按键开关K控制的效果。
三、实验程序ORG 0000H ;MCS-51复位入口AJMP MAIN ;转入主程序ORG 0003H ;INTO中断入口AJMP EX_INTO ;转入中断服务程序ORG 0100H ;主程序入口MAIN: MOV SP,#40H ;中断初始化设置堆栈SETB IT0 ;中断请求信号设置为边沿触发方式 SETB EA ;开放总中断SETB EX0 ;允许INTO中断HERE: SJMP HERE ;原地踏步(处理其他事务)等待中断到来ORG 0200H ;中断服务程序EX_INTO:CPL P1.0 ;改变指示灯状态RETI ;中断返回END四、实验原理图五、实验仿真及结果当开关断开时,LED指示灯D1熄灭,如图1所示:图1当按键开关接通时, LED指示灯D1点亮, 如图2所示:图2六、实验总结通过本次实验, 进一步熟悉了对Keil μVision3软件的操作, 另外还接触到了Proteus软件。
掌握了中断功能的编程方法, 加上两个上述软件, 使得单片机汇编语言得以仿真。
进一步深化了解和掌握MCS-51单片机的中断的相关知识, 包括中断的组成、工作原理、处理过程以及外部中断的中断触发方式。
一、实验二: 中断实验二、实验目的:三、通过对P3.2、P3.3引脚的电平控制, 实现外部中断处理, 从而控制输出口P1的输出效果变化。
四、实验原理图实验参考电路图如下:五、参考实验程序/用外中断0的中断方式进行数据采集和处理#include<reg51.h> //包含51单片机寄存器定义的头文件sbit S=P3^2; //将S位定义为P3.2,/*******************************************函数功能: 主函数******************************************/void main(void){EA=1; //开放总中断EX0=1; //允许使用外中断IT0=1; //选择负跳变来触发外中断P1=0xff;while(1); //无限循环, 防止程序跑飞}/************************************************************** 函数功能: 外中断T0的中断服务程序**************************************************************/ void int0(void) interrupt 0 using 0 //外中断0的中断编号为0 {P1=~P1; //每产生一次中断请求, P1取反一次。
}实验思考题:(1) 根据指导书中提供的原理图, 自行设计一个外部中断实验, 要求:(2) 两个外部中断全部用上;(3) 实验能体现不同中断优先级的中断源的相应情况;(4) 不同中断处理程序能输出不同的响应效果//用外中断0的中断方式进行数据采集和处理00000000#include<reg51.h> //包含51单片机寄存器定义的头文件sbit S=P3^2; //将S位定义为P3.2,/*******************************************函数功能: 主函数******************************************/void main(void){EA=1; //开放总中断EX0=1; //允许使用外中断IT0=1; //选择负跳变来触发外中断P1=0xf0;PX0=1;// PX1=1;while(1); //无限循环, 防止程序跑飞}/************************************************************** 函数功能: 外中断T0的中断服务程序**************************************************************/ void int0(void) interrupt 0 using 0 //外中断0的中断编号为0 {//P1=~P1;P1=0x01;}void int1(void) interrupt 1 using 1{//P1=~P1;P1=0XFe; }。
AVR单片机外部中断范例1. 开发语言本范例使用WinAVR/GCC 20050214 版本开发2. 范例描述按下按键0,LED0亮。
直到松手,其他按键才能起作用按下按键1,LED1亮。
其他按键随时都能起作用按下按键2,LED0/1都熄灭。
直到松手,其他按键才能起作用3. 电路图设计:为简化线路设计。
.4. 代码设计与说明:/********************************************* ******** AVR 外部中断使用范例************** 策划、整理与测试:阿莫(armok) ******* 代码设计:HJJourAVR ******* 编译器:WINAVR20050214 ******* 2005.8.31************************************************* ***//*本程序简单的示范了如何使用A TMEGA16的外部中断中断的设置按键的简单延时防抖动中断的嵌套变量在中断中的应用---如果变量会在中断服务程序中被修改,须加volatile限定本范例可直接使出厂状态的新M16芯片,无需对芯片的熔丝位进行配置。
出于简化程序考虑,各种数据没有对外输出,学习时建议使用JTAG ICE硬件仿真器关于外部中断作唤醒源的条件:(将会在后面的电源管理和睡眠模式范例中应用)而INT0和INT1的边沿触发中断只能在空闲模式起作用,即CLKI/O不停止INT0和INT1的低电平中断,INT2在各种睡眠模式下都可以,因为这几种中断工作于异步模式,不需要时钟驱动官方的M16中文手册对外部中断的描叙存在多处错误,请参考英文原版。
*/#include <avr/io.h>#include <avr/delay.h>#include <avr/signal.h>#include <avr/interrupt.h>/*宏INTERRUPT 的用法与SIGNAL 类似,区别在于SIGNAL 执行时全局中断触发位被清除、其他中断被禁止INTERRUPT 执行时全局中断触发位被置位、其他中断可嵌套执行另外avr-libc 提供两个API 函数用于置位和清零全局中断触发位,它们是经常用到的。
一、实验目的1. 理解单片机外部中断的概念和工作原理。
2. 掌握MCS-51单片机外部中断的编程方法。
3. 通过实验验证外部中断在实际应用中的效果。
二、实验环境1. 实验设备:MCS-51单片机实验板、按键、LED灯、面包板、连接线等。
2. 开发环境:Keil uVision5软件。
三、实验原理外部中断是单片机的一个重要功能,用于响应外部事件。
当外部事件发生时,CPU可以暂停当前程序,转而执行中断服务程序,处理外部事件。
MCS-51单片机有两个外部中断源,即INT0和INT1。
四、实验内容1. 硬件连接将按键连接到单片机的INT0或INT1引脚,LED灯连接到单片机的某个I/O口。
具体连接方式如下:- 将按键的一端连接到单片机的INT0或INT1引脚,另一端连接到地。
- 将LED灯的正极连接到单片机的某个I/O口,负极连接到地。
2. 程序设计(1)初始化单片机```cvoid main() {EA = 1; // 开启总中断EX0 = 1; // 开启INT0中断IT0 = 1; // 设置INT0为下降沿触发P1 = 0xFF; // 初始化P1口为高电平,关闭LED灯 while(1) {// 主循环}}```(2)编写中断服务程序```cvoid ext0_isr() interrupt 0 {P1 = 0x00; // 点亮LED灯delay(500); // 延时0.5秒P1 = 0xFF; // 熄灭LED灯}```(3)编写延时函数```cvoid delay(unsigned int ms) {unsigned int i, j;for(i = 0; i < ms; i++)for(j = 0; j < 123; j++);}```3. 实验步骤1. 编写程序,并使用Keil uVision5软件进行编译和烧录。
2. 将程序烧录到单片机中,并连接好硬件电路。
3. 按下按键,观察LED灯是否闪烁。
一、实训目的本次外部中断实训旨在通过实际操作,加深对单片机外部中断原理和应用的了解,掌握外部中断的配置方法,提高在嵌入式系统设计中应用外部中断的能力。
二、实训环境1. 硬件环境:51单片机开发板、Keil5 for C51开发软件、Proteus 7 Professional仿真软件。
2. 软件环境:Keil5 for C51编译器、Proteus 7 Professional仿真软件。
三、实训原理外部中断是单片机与外部设备进行交互的重要方式之一。
当外部设备产生信号时,单片机可以通过外部中断来响应这些信号,从而实现与外部设备的同步处理。
51单片机提供了两个外部中断源:INT0和INT1,它们分别连接到P3.2和P3.3引脚。
四、实训过程1. 软件设计:- 使用Keil5 for C51编写程序,实现外部中断的基本功能。
- 定义外部中断函数,用于处理外部中断事件。
- 配置外部中断触发方式(上升沿触发或下降沿触发)。
- 设置外部中断优先级。
2. 硬件连接:- 将外部设备(如按钮)连接到单片机的INT0或INT1引脚。
- 根据需要配置外部中断的触发方式。
3. 程序下载与仿真:- 使用Keil5 for C51编译程序,生成HEX文件。
- 将HEX文件下载到单片机开发板。
- 使用Proteus 7 Professional进行仿真,观察外部中断的响应情况。
4. 结果分析:- 在仿真过程中,按下外部设备(如按钮),观察单片机是否能够正确响应外部中断。
- 分析中断处理函数的执行情况,确保外部中断能够正确处理。
五、实训结果1. 成功实现了外部中断的基本功能,包括中断触发、中断处理和中断优先级设置。
2. 通过仿真验证了外部中断的响应情况,确认单片机能够正确响应外部中断事件。
3. 通过实际操作,加深了对单片机外部中断原理和应用的理解。
六、实训总结1. 理论知识:通过本次实训,加深了对单片机外部中断原理的理解,掌握了外部中断的配置方法。
AVR单片机(C语言)项目开发实践教程90 2.看门狗定时器控制寄存器WDTCR位7 6 5 4 3 2 1 0 ———WDTOE WDE WDP2 WDP1 WDP0 读/写R/W R/W R/W R/W R/W R/W R/W R/W 复位值0 0 0 0 0 0 0 0① BIT4—WDTOE:看门狗修改使能。
清零WDE时必须置位WDTOE,否则不能禁止看门狗。
一旦置位,硬件将在紧接的4个时钟周期之后将其清零。
② BIT3—WDE:使能看门狗。
WDE为“1”时,看门狗使能,否则看门狗将被禁止。
只有在WDTOE为“1”时WDE才能清零。
③以下为关闭看门狗的步骤:在同一个指令内对WDTOE和WDE写“1”,即使WDE已经为“1”;在紧接的4个时钟周期之内对WDE写“0”。
④ BIT2:0—WDP2,WDP1,WDP0:看门狗定时器预分频器2,1和0。
这3位决定看门狗的预分频器,见表7-5。
表7-5 看门狗定时器预分频器配置WDP2 WDP1 WDP0看门狗振荡器周期V CC=3.0V时典型的溢出周期V CC=5.0V时典型的溢出周期0 0 0 16k(16 384)17.1ms 16.3ms0 0 1 32k(32 768)34.3ms 32.5ms0 1 0 64k(65 536)68.5ms 65ms0 1 1 128k(131 072)0.14s 0.13s1 0 0 256k(262 144)0.27s 0.26s1 0 1 512k(524 288)0.55s 0.52s1 1 01024k(1 048 576) 1.1s 1.0s1 1 12048k(2 097 152) 2.2s 2.1s 任务二 中断报警控制一、任务要求设计一个报警系统,利用ATmega16单片机的外部中断源,用开关模拟报警信号,当触发报警时,有蜂鸣器报警。
二、硬件设计由于使用中断触发报警的方式,需要使用外部中断引脚去检测电平的变化情况。