AVR学习-外部中断INT0实验

合集下载

外部中断计数实验报告

外部中断计数实验报告

一、实验目的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)用单次脉冲申请中断INT0,在中断处理程序中对输出信号进行反转。

ORG 0000HLJMP STARTORG 0003HLJMP INT0START:CLR P1.0MOV TCON, #01HMOV IE, #81HLJMP $INT0:PUSH PSWCPL P1.0POP PSWRETIEND结果:按一下单脉冲小灯亮,再按一下,小灯灭接线:INT0接单脉冲P1.0接个小灯2)用单次脉冲申请中断INT1,在中断处理程序中实现8个小灯左移点亮1次。

ORG 0000HLJMP STARTORG 0013HLJMP INT1START:MOV TCON,#04HMOV IE,#84HCLR PX1MOV A,#01HSJMP $INT1:MOV R1,#8LOOP:MOV P1,ALCALL DELAYRL ADJNZ R1,LOOPRETIDELAY:MOV R6,#200DELAY1:MOV R7,#125DELAY2:DJNZ R7,DELAY2DJNZ R6,DELAY1RETEND结果:按一下单脉冲,8个小灯左移点亮一次接线:INT1接单脉冲P1口接8个小灯3)将8051计数器T0,按计数器模式和方式1工作,对P3.4(T0)引脚进行单脉冲计数,并将其数值按二进制在P1口驱动LED灯上显示出来。

ORG 0000HSTART:MOV TMOD,#05HMOV TH0,#0MOV TL0,#0SETB TR0LOOP:MOV P1,TL0LJMP LOOPEND结果:P1口与四个小灯相连,按单脉冲的次数在四个小灯上显示接线:(P3.4)T0接单脉冲P1.0到P1.4接4个小灯4)用CPU内部定时器T0中断方式计时,实现每1秒钟输出状态发生一次反转。

ORG 0000HLJMP STARTORG 000BHLJMP INTSTART: MOV TMOD,#01HMOV B,#0AH;即10,设循环次数10次。

单片机中断实验实训报告

单片机中断实验实训报告

一、实验背景随着电子技术的飞速发展,单片机因其体积小、成本低、功能强大等优点,在各个领域得到了广泛应用。

中断技术是单片机设计中非常重要的一部分,它允许单片机在执行程序的过程中,能够及时响应外部事件,从而提高系统的实时性和效率。

本实训旨在通过实验,加深对单片机中断系统的理解,掌握中断系统的使用方法,并学会在实际应用中灵活运用中断技术。

二、实验目的1. 熟悉单片机中断系统的基本概念和原理。

2. 掌握中断源、中断优先级、中断服务程序等基本概念。

3. 学会使用单片机的中断系统实现实时响应外部事件。

4. 培养动手实践能力和问题解决能力。

三、实验器材1. 单片机实验板2. 示波器3. 电源4. 连接线5. 逻辑分析仪(可选)四、实验内容1. 实验一:外部中断实验(1)实验目的:验证外部中断功能,实现按键控制LED灯的点亮和熄灭。

(2)实验步骤:a. 将外部中断0(INT0)引脚连接到按键,按键按下时产生低电平信号。

b. 编写中断服务程序,实现按键按下时点亮LED灯,按键释放时熄灭LED灯。

c. 编译程序,下载到单片机实验板上。

d. 测试实验效果,观察LED灯的点亮和熄灭情况。

2. 实验二:定时器中断实验(1)实验目的:验证定时器中断功能,实现LED灯的定时闪烁。

(2)实验步骤:a. 配置定时器T0为模式1,设置定时器初值,使定时器溢出时间为1秒。

b. 开启定时器中断,编写定时器中断服务程序,实现LED灯的定时闪烁。

c. 编译程序,下载到单片机实验板上。

d. 测试实验效果,观察LED灯的闪烁情况。

3. 实验三:中断嵌套实验(1)实验目的:验证中断嵌套功能,实现定时器中断和外部中断的嵌套。

(2)实验步骤:a. 配置定时器T0为模式1,设置定时器初值,使定时器溢出时间为1秒。

b. 开启定时器中断和外部中断,设置中断优先级。

c. 编写定时器中断服务程序和外部中断服务程序,实现中断嵌套。

d. 编译程序,下载到单片机实验板上。

AVR外设汇总之中断

AVR外设汇总之中断
中断 //PD2 位发生下降沿,触发的中断函数 ISR(INT0_vect) { } //PD3 位发生下降沿,触发的中断函数 ISR(INT1_vect) { } int main(void){ //设置 PD2、PD3 为输出 DDRD=_BV(PD2)|_BV(PD3); //置 PD2、PD3 位都为高电平 PORTD=0xFF; //ISC01 位置 1,表示设置 INT0(PD2)为下降沿中断 //ISC11 位置 1,表示设置 INT1(PD3)降沿触发一个外部中断 INT0 INT1 //INT0 位置 1,表示打开 INT0 的外部中断使能 //INT1 位置 1,表示打开 INT1 的外部中断使能 GICR= _BV(INT0)|_BV(INT1); sei();//cli();打开/关闭全局中断 while(){ //设置 PD2 位为输出 DDRD|=_BV(PD2); //置 PD2 位为低电平产生一个下降沿,触发 INT0 的中断函数 PORTD&=~_BV(PD2); _delay_ms(1); //置 PD2 位为高电平 PORTD|=_BV(PD2); //置 PD2 位为输入,等待硬件中断(全局等待 SW18 按键被按下) DDRD&=~_BV(PD2); //设置 PD3 位为输出 DDRD|=_BV(PD3); //置 PD3 位为低电平产生一个下降沿,触发 INT1 的中断函数 PORTD&=~_BV(PD3); _delay_ms(1); //置 PD3 位为高电平 PORTD|=_BV(PD3); //置 PD3 位为输入,等待硬件中断(全局等待 SW17 按键被按下) DDRD&=~_BV(PD3); } }

单片机外部中断实训报告

单片机外部中断实训报告

一、实训目的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灯闪烁不稳定等。

实验七 外部中断0 INT0中断实验

实验七 外部中断0 INT0中断实验

实验七外部中断0(/INT0)中断实验一实验目的1掌握MSC-51单片机中断原理以及编程使用方法。

2 理解下降沿中断和低电平中断的区别。

二实验器材1.实验板一块;2. +5V 电源一台;3. 编程器一台;4. 紫外线擦除器一个;5万用表一块。

三实验原理MCS-51单片机有5个中断源,其中两个是由/INT0、/INT1引脚输入的外部中断源;另外三个是内部中断源即由T0、T1的溢出引起中断和串行口发送完一个字节或接收到一个字节数据引起中断。

触发外部中断有两种方式,即下降沿引起中断或低电平引起中断,当编程TCON中的ITi为1时,则引起触发的方式为边沿触发方式,反之为低电平触发方式。

每个中断源的中断请求能否得到响应要受两级“开关”的控制,即一个总“开关”EA和五个分“开关”ES、EXT1、EX1、ET0和EX0的控制,只有当EA为1,且对应的分“开关”也为1时,对应中断源的中断请求才能被响应。

5个中断源可编程为两个优先级,同一优先级内以/INT0的优先级最高,然后是T0中断、/INT1中断、T1中断和串行口中断。

5个中断源对应5个固定的中断服务程序入口地址。

CPU在每个机器周期顺序采样每个中断源,如查询到某个中断源的中断标志为1,中断系统通过硬件自动将相应的中断矢量装入PC,进入中断服务程序。

实验线路如下图所示,图中的开关TR3 为一按钮,通常状态下接A,C点为高电平,当按下按钮时B接地,这时就会在C点输出为低电平,当松开按钮时,C点重新变成高电平,实验时要求短接J3的1、2,J6的3、4。

四实验内容与要求1 编写主程序,读取图中开关SW1的状态,当其闭合时(P1.3为低电平)初始化为下降沿中断,反之,初始化为低电平中断,且黄色发光管灭;编写中断服务程序,使图中的发光管闪烁5次,间隔250MS,即中断服务程序的执行时间为2.5秒,退出中断程序时,使发光管灭。

实验分两步进行:首先将SW1闭合,按按钮TR3,时间小于2.5秒,即在中断服务程序执行结束之前,图中C点变成高电平;数秒后再按按钮TR3,时间大于2.5秒,即在中断服务程序执行结束之前,图中C点仍为低电平;观察发光管的闪烁情况。

中断及定时器实验报告

中断及定时器实验报告

一、实验目的1. 理解中断和定时器的基本概念及工作原理。

2. 掌握51单片机中断系统和定时器的配置方法。

3. 学会使用中断和定时器实现特定功能,如延时、计数等。

4. 培养动手实践能力和问题解决能力。

二、实验原理中断是计算机系统中的一种机制,允许CPU在执行程序过程中,暂停当前程序,转去执行另一个具有更高优先级的程序。

51单片机具有5个中断源,包括两个外部中断(INT0、INT1)、两个定时器中断(定时器0、定时器1)和一个串行口中断。

定时器是51单片机内部的一种计数器,可以用于产生定时中断或实现定时功能。

51单片机有两个定时器,即定时器0和定时器1。

定时器可以工作在模式0、模式1、模式2和模式3。

三、实验内容及步骤1. 实验内容一:外部中断实验(1)实验目的:掌握外部中断的使用方法,实现按键控制LED灯的亮灭。

(2)实验步骤:- 使用Keil for 8051编译器创建项目。

- 根据电路原理图连接电路。

- 编写程序,配置外部中断,实现按键控制LED灯的亮灭。

2. 实验内容二:定时器中断实验(1)实验目的:掌握定时器中断的使用方法,实现LED灯闪烁。

(2)实验步骤:- 使用Keil for 8051编译器创建项目。

- 根据电路原理图连接电路。

- 编写程序,配置定时器中断,实现LED灯闪烁。

3. 实验内容三:定时器与外部中断结合实验(1)实验目的:掌握定时器与外部中断结合使用的方法,实现按键控制LED灯闪烁频率。

(2)实验步骤:- 使用Keil for 8051编译器创建项目。

- 根据电路原理图连接电路。

- 编写程序,配置定时器中断和外部中断,实现按键控制LED灯闪烁频率。

四、实验结果与分析1. 外部中断实验:成功实现了按键控制LED灯的亮灭。

当按下按键时,LED灯亮;松开按键时,LED灯灭。

2. 定时器中断实验:成功实现了LED灯闪烁。

LED灯每隔一定时间闪烁一次,闪烁频率可调。

3. 定时器与外部中断结合实验:成功实现了按键控制LED灯闪烁频率。

单片机外部中断实验报告

单片机外部中断实验报告

单片机外部中断实验报告实验目的:1、理解单片机外部中断的原理和用途;2、掌握单片机外部中断的配置和使用方法。

实验器材:1、STC15W408AS单片机开发板;2、简单的电路连接器;3、按钮开关。

实验原理:单片机外部中断是通过外部硬件信号触发单片机的中断请求,在单片机运行过程中,当外部信号满足特定条件时,会触发中断,并暂停当前的运行程序,转而执行中断服务程序。

通过外部中断,可以实现对外部事件的实时处理。

实验步骤:1、将按钮开关与单片机开发板连接,将按钮开关的一端与单片机的INT0引脚连接,另一端与GND连接。

2、在开发板上连接好电源并供电。

3、打开Keil软件,新建一个工程,并选择合适的单片机型号。

4、配置单片机的外部中断功能,设置INT0引脚为中断输入。

5、编写中断服务程序,当INT0引脚检测到边沿信号时,执行中断服务程序,并在其中加入相应的处理代码。

6、编写主程序,配置相关的引脚和寄存器,使单片机进入中断模式,接受外部中断信号,并执行中断服务程序。

7、下载程序到单片机开发板上,运行程序。

8、按下按钮开关,触发外部中断,并查看实验结果。

实验结果:当按下按钮开关时,实时触发外部中断,单片机停止当前程序的运行,进入中断模式,并执行中断服务程序中的相应代码。

实验总结:通过这次实验,我对单片机的外部中断有了更深入的理解,并学会了如何使用外部中断实现对外部事件的及时处理。

外部中断广泛应用于各种实时系统和设备中,具有很大的实用价值。

在以后的学习和实践中,我会进一步掌握和应用单片机的外部中断功能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ARM-AVR 嵌入式开发论坛
2、GCC 中无参数的函数需要写为 void,否则编译时会有警告产生。如:void LED_off(void)
void LED_01(char i) { PORTB = ~_BV(i); _delay_ms(100); } void LED_02(char i) { PORTB=~(_BV(i)|_BV(i-2)); _delay_ms(100); }
Version : 08.12.06 Author:linxiyiran E_mail:605987969@ ※转载请注明出处
/
Updata : 09.02.26 模块化 09.05.03 增加 proteus 仿真模型,仿真通过 09.07.21 WinAVR-20071221 环境下编译通过 comments:
//LED 亮灭控制
//输出低电平 //调用延时程序
//间隔点亮
void LED_03(char i) { PORTB=~(_BV(i)|_BV(i-1)); _delay_ms(100); } //端口初始化程序 void port_init(void) { DDRA = 0x00; PORTA = 0xFF; DDRB = 0xFF; PORTB = 0xFF; DDRC = 0x00; PORTC = 0xFF; DDRD = 0x00; PORTD = 0xFF; } /*方向输入*/ /*打开上拉*/ /*方向输出*/ /*电平设置*/
ARM-AVR 嵌入式开发论坛
//输出高电平,LED 熄灭
for(l=0;l<2;l++) { for (i = 0; i < 8; i++) LED_01(i);
//模式 1:顺序点亮
//顺序单个点亮 LED
for (i = 6; i > 0; i--) LED_01(i); } LED_off();
for(n=0;n<2;n++) { for (i = 2; i < 8; i++) LED_02(i);
//模式 3:间隔点亮
//间隔顺序同时点亮
for (i = 6; i > 2; i--) //间隔逆序同时点亮 LED_02(i); } LED_off(); Author:linxiyiran E_mail:605987969@ ※转载请注明出处
//逆序单个点亮 LED
for(m=0;m<2;m++) {
//模式 2:顺序单个间隔点亮
for (i = 0; i < 8; i += 2) //顺序间隔点亮 LED LED_01(i); for (i = 7; i > 1; i -= 2) //逆序间隔点亮 LED(note1:当改为 i>0 时,程序异常, 原因为循环被破坏) LED_01(i); } LED_off();
ARM-AVR 嵌入式开发论坛
}
4、functions.h void LED_off(void); void LED_01(char i); void LED_02(char i); void LED_03(char i); void port_init(void);
四、完整项目文件下载 /thread-800-1-1.html
int main(void) { port_init(); GICR |= (1 << INT0); sei(); while (1) { PORTB = 0XFE; _delay_ms(500); PORTB = 0XFF; _delay_ms(500); } } //PB0 置高,熄灭 LED0 //PB0 置低,点亮 LED0 //使能外部中断请求 0 //全局中断使能
//相临点亮
//~后内容需用括号括起来
Author:linxiyiran
E_mail:605987969@
※转载请注明出处
/
3、int0_interrupt.c #include <avr/io.h> #include <avr/interrupt.h> #include "functions.h" #define uint unsigned int //INT0 中断函数,与 ICCAVR 写法不同,中断向量名称也不相同 ISR(INT0_vect) { uint i,l,m,n,o; DDRB =0xFF; PORTB=0xFF; //端口输出
2、functions.c /******************************* Platform : AVR mega16 学习板() function :功能函数集 Clock F : 3.6864M
Software : WinAVR-20071221+Proteus7.4 Author Version : 林夕依然 : 09.07.21
Author:linxiyiran
E_mail:605987969@
※转载请注明出处
comments : 1、使用 GCC 自带延时函数,需包含"util/delay.h" Author:linxiyiran E***************************/ #include <avr/io.h> #include <util/delay.h> void LED_off(void) { PORTB = 0xFF; _delay_ms(1); } //关闭所有 LED
ARM-AVR 嵌入式开发论坛
1、以学习板流水灯和 INT0 键为硬件电路,练习 INT0 中断函数的编写 2、电路板上电后 LED0 进入无限闪烁状态,当按下 INT0 键后,程序进入四种模式流水灯, 流水灯后程序返回 LED0 无限闪烁状态 3、使用 GCC 自带延时函数 4、同 ICC 比较,中断函数写法不同,中断向量名称也不相同,均需更改。 *******************************************************************************/ #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include "functions.h"
/
for(o=0;o<2;o++) { for (i = 1; i < 8; i++) LED_03(i); for (i = 6; i > 1; i--) //相临逆序同时点亮 LED_03(i); } LED_off(); //相临顺序同时点亮 //模式 4:相临点亮
/
ARM-AVR 嵌入式开发论坛
实验 7:外部中断 INT0 实验(GCC)
更多笔记:/ 一、程序结构
二、仿真效果
三、程序源码 1、main.c /******************************************************************************* Platform : AVR mega16 学习板() Project : 实验七:外部中断 INT0 实验(GCC) Clock F : 3.6864M Software: WinAVR-20071221+Proteus7.4 Author : 林夕依然
相关文档
最新文档