单片机c语言 oxfe,AVR单片机入门及C语言高效设计实践(五)

ATMEAGl6L的中断系统什么是“中断”?顾名思义中断就是中断某一工作过程去处理一些与本工作过程无关或间接相关或临时发生的事件,处理完后,则继续原工作过程。比如:你在看书,电话响了,你在书上做个记号后去接电话,接完后在原记号处继续往下看书。如有多个中断发生,依优先法则,中断还具有嵌套特性。又比如:看书时,电话响了,你在书上做个记号后去接电话,你拿起电话和对方通话,这时门铃响了,你让打电话的对方稍等一下,你去开门,并在门旁与来访者交谈,谈话结束,关好门,回到电话机旁,拿起电话,继续通话,通话完毕,挂上电话,从作记号的地方继续往下看书。由于一个人不可能同时完成多项任务,因此只好采用中断方法,一件一件地做。

类似的情况在单片机中也同样存在,通常单片机中只有一个CPU,但却要应付诸如运行程序、数据输入输出以及特殊情况处理等多项任务,为此也只能采用停下一个工作去处理另一个工作的中断方法。在单片机中,“中断”是一个很重要的概念。中断技术的进步使单片机的发展和应用大大地推进了一步。所以,中断功能的强弱已成为衡量单片机功能完善与否的重要指标。中断系统的引入解决了微处理器和外设之间数据传输速率的问题,提高了微处理器的实时性和处理能力。

当微处理器处于中断开放时,才能接受外部的中断申请。一个完整的中断处理过程包括中断请求、中断响应、中断处理和中断返回。

中断请求是中断源向微处理器发出的信号,要求微处理器暂停原来执行的程序并为之服务。中断请求可以是电平信号或者脉冲信号。中断请求信号一般保持到微处理器作出响应为止。微处理器在检测到中断请求信号之后,将中止当前正在执行的程序,并对断点实行保护,即将断点的地址(PC值)推入堆栈保护,以便在中断结束时从堆栈弹出断点地址,以便继续执行中断前的任务。然后,微处理器由中断地址表获取中断入口地址,并将此地址送入程序计数器(PC),从而开始执行中断服务程序。在中断服务程序里一般需要完成现场保护、开关中断、执行中断服务程序、现场恢复和中断返回等工作。

ATMEAG16L具有20个中断源和1个复位中断,在中断源中处于低地址的中断具有高的优先级。所有中断源都有独立的中断使能位,当相应的使能位和全局中断使能位(SREG寄存器的位I)都置1时,中断才可以发生,相应的中断服务程序才会执行。下表为ATMEAGl6L的中断源。

向量号

程序地

中断源

中断足义

1

0x000

RESET

外部引脚电平引发的复位,上电复位,掉电检测复位,看门狗复位,以及JTAGAVR复位

2

0x002

INT0

外部中断请求0

3

0x004

INT1

外部中断请求1

4

0x006

TIMER2COMP

定时器/计数器2比较匹配

5

0x008

TIMER2OVF

定时器/计数器2溢出

6

0x00A

TIMERlCAPT

定时器/计数器1事件捕捉

7

0x00C

TIMERlCOMPA

定时器/计数器1比较匹配A

8

0x00E

TIMER1COMPB

定时器/计数器1比较匹配B

9

0x010

TIMER1OVF

定时器/计数器1溢出

10

0x012

TIMER0OVF

定时器/计数器O溢出,

11

0x014

SPI.STC

SPI串行传输结束

12

0x016

USART.RXC

USART,Rx结束

13

0x018

USART.UDRE

USART数据寄存器空

14

0x01A

USART。TXC

USART,Tx结束

15

0x01C

ADC

ADC转换结束

16

0x01E

EERDY

EEPROM就绪

17

0x020

ANACOMP

模拟比较器

18

0x022

TWI

两线串行接口

19

0x024

INT2

外部中断请求2

20

0x026

TIMER0COMP

定时器/计数器0比较匹配

21

0x028

SPMRDY

保存程序存储器内容就绪

一个中断产生后,SREG寄存器的全局中断使能位I将被清零,后续中断被屏蔽。

用户可以在中断服务程序里对I置位从而再次开放中断。在中断返回后,全局中断位I将重新置位。当程序计数器指向中断向量开始执行相应的串断暇务程序时,对应中断标志位将被硬件清零。当一个符合条件的中断发生后,如果相应的中断使能位为0,中断标志位将挂起并一直保持到中断执行或者被软件清除。如果全局中断标志I被清零,则所有的中断都不会被执行直到I置位。然后,被挂起的各个中断按中断优先级依次被处理。

ATMEAG16L的外部中断编程实践ATMEAG16L具有多达20个中断源,这里我们首先进行外部中断的实验,其它的等到介绍到相关内容时再进行实验。

1.外部中断0外部中断0由引脚INT0(PIND2)触发。如果INT0引脚按照MCUCR寄存器中的ISC01、ISC00设置的方式发生跳变,则不管是否INTO中断使能,INTO中断标志位INTFO都将置位。如果SREG寄存器的全局中断位I和通用中断控制寄存器GICR中的lNT0中断使能位INTO置位,则开始执行中断程序。在进入中断服务程序时,INTF0被硬件清零。必须指出,不管INT0(PIND2)引脚方向位设置如何,只要INT0引脚发生规定的跳变,都会触发中断。中断标志位INTF0只在满足发生中断的条件时置位,一旦条件变化,INTF0被硬件清零。向INTF0位写“1”也会对其清零。

2.外部中断1外部中断1由引脚INTI(PIND3)触发。如果INTl引脚按照MCUCR寄存器中的ISC11、ISC10设置的方式发生跳变,则不管是否INT1中断使能,INT1中断标志位INTF1都将置位。如果SREG寄存器的全局中断位l和通用中断控制寄存器GICR中的INTl中断使能位INT1置位,则开始执行中断程序。在进入中断服务程序时,INTF1被硬件清零。必须指出,不管INT1(PIND3)引脚方向位设置如何,只要INT1引脚发生规定的跳变,都会触发中断。中断标志位INTF1只在满足发生中断的条件时置位,一旦条件变化,INTF1被硬件清零。向INTF1位写“1”,也会对其清零。

3.外部中断2外部中断2由引脚INT2(PINB2)触发。如果INT2引脚按照MCUCR寄存器中的ISC2设置的方式发生跳变,则不管是否INT2中断使能,INT2中断标志位INTF2都将置位。如果SREG寄存器的全局中断位I和通用中断控制寄存器GICR中的INT2中断使能位INT2置位,则开始执行中断程序。在进入中断服务程序时,INTF2被硬件清零。必须指出,不管INT2(PINB2)引脚方向位设置如何,只要INT2引脚发生规定的跳变,都会触发中断。中断标志位INTF2只在满足发生中断的条件时置位,一旦条件变化,INTF2被硬件清零。向INTF1位写“1”,也会对其清零。

INT1中断实验:平时8个LED闪烁,点亮/熄灭时间约500mS。一旦INT1触发中断后,蜂鸣器发出10秒的报警声。

在我的文档中新建一个ac6的文件夹。建立一个ac6.prj的工程项目,最后建立源程序文件ac6.C。输入下面的程序(程序1):

85f77f2bf5d7fda83de1f1555600e8a0.png

编译通过后,可在AVRStudio集成开发环境中进行INTO、INT1中断嵌套实验:平时8个LED闪烁,点亮/熄灭时间约500ms。INTl触发中断后,蜂鸣器发出1O秒的报警声。在INT1的中断服务子函数中,再置位总中断使能位I,这样INT1中断服务子函数中,即可进行INT0中断嵌套。当INT0触发中断时,进入INT0中断服务子函数,将8个LED的一半熄灭。

在我的文档中新建一个ac7的文件夹。建立一个JTAG在线仿真或进行软件模拟仿真。仿真完成后,将ac6.hex文件下载到AVR单片机综合试验板上。注意,标示“LED”及“INT1”的双排针应插上短路块。我们看到,D1-D8发光管闪亮,间隔约0.5秒。按下INT1键后,单片机进入中断,蜂鸣器发声10秒。

ac7.prj的工程项目,最后建立源程序文件ac7.C。输入下面的程序(程序2):

a7b1cdd632f77985127a79a8a8f15d95.png

编译通过后,可在AVRStudio集成开发环境中进行JTAG在线仿真或进行软件模拟仿真。仿真完成后,将ac7.hex文件下载到AVR单片机综合试验板上进行实际的中断操作。注意,标示“LED”、“BEEP”及“INT0”、“INT1”的双排针应插上短路块。

两路防盗报警器实验:平时一个数码管熄灭。当盗情发生时自动显示“1”或“2”,同时一个LED点亮(代表报警)。着两路同时产生盗情,则数码管每隔2秒轮流显示“1”、“2”。直到值班人员按下复位按钮后才解除报警。

在我的文档中新建一个ac8的文件夹。建立一个ac8.pd的工程项目,最后建立源程序文件ac8.C。输入下面的程序(程序3):

程序3)

#include    //包含头文件

#define uchar unsigned char  ∥变量类型的宏定

#define uint unsigned int

uchar const SEG7f [10]={0X3f,0x06.0x5b,∥共阴极数

码管0-9的字形码

0x4f,Ox66;Ox6d,0x7d,Ox07,0x7f,0x6f};

#define ALM_ON(PORTB=PORTB&0xfe)//报警

器启动

uchar aim_flag1,alm_flag2;//第1、2路盗情标志

//**********************************

void delay_ms(uint k)//定义毫秒级的延时子函数

{

uint i,j;

for(=O:i

{

for(j=0;j<1140;j++)

}

}

//========================

void main(void)∥定义主函数

{    ∥主函数开始

DDRA=0xff;  ∥将PA端口设为输出

DDRC=0xff;    ∥将PC端口设为输出

PORTA=0x00;#PA端口初始化输出00000000

PORTC=0xff;  //PC端口初始化输出1 1 11 1 1 1 1

PORTB=0xff; //PB端口初始化输出11 11 1 1 1 1

DDRB=0xff:  //将PB端口设为输出

PORTD=0xff;  #PD端口初始化输出1 111111 1

DDRD=0xf3;  //将PIND2、3设为输入

MCUCR=0x0A;//INT0、1为下降沿触发

GICR:0xC0;//使能INT0、1中断

SREG=0x80;//使能总中断

while(1)    //无限循环

{    ∥无限循环语句开始

if(alm_flag1==1)//如果第1路产生盗情

{PORTA=SEG7[1];∥数码管显示为1

PORTC=Oxfe;//点亮最右的数码管

ALM_ON://报警器启动

delay_ms(2000);#延时2秒

}

if(alm_flag2==1)∥如果第2路产生盗情

{PORTA=SEG7[2];∥数码管显示为2

PORTC=0xfe;//点亮最右的数码管

ALM_ON;//报警器启动

delay_ms(2000);//延时2秒

}

}    ////无限循环语句结束

}    ////主函数结束

∥****************************************

*

#pragma interrupt_handler intO_isr:2#INTO中断服

务子函数

void intO_isr(void)

{

aim_flagl=1:    //置第1路盗情标志为

1

#pragma interrupt_handler int1_isr:3//INT1

务子函数

中断服

void int1_isr(void)

{

alm_flag2=1;    //置第2路盗情标志为1

}

}

//****************************************

编译通过后,可将ac8.hex文件下载到AVR单片机综合试验板上进行实际的操作演示。注意,标示“LED”、“LEDMOD_DISP”、“LED-MOD_COM”及“INT0”、“INT1”的双排针应插上短路块。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566859.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python中property魔法方法原理_Python类中的魔法方法之 __slots__原理解析

在类中每次实例化一个对象都会生产一个字典来保存一个对象的所有的实例属性&#xff0c;这样非常的有用处&#xff0c;可以使我们任意的去设置新的属性。每次实例化一个对象python都会分配一个固定大小内存的字典来保存属性&#xff0c;如果对象很多的情况下会浪费内存空间。可…

c语言 4则运算符,C语言学习之路之四-----------C语言的运算符与表达式

C语言的运算符与表达式运算符与表达式C语言的运算符又称为操作符&#xff0c;是数据间进行运算的符号。C语言的运算符按运算类型可分为赋值运算符、算术运算符、逻辑运算符、关系运算符、位运算符、指针运算符和取成员运算符等&#xff1b;按运算对象(又称为操作数)的个数又可分…

python中if控制语句_Python中流程控制语句之IF语句

生活中经常遇到的各种选择和判断在程序中也会遇到&#xff0c;比如玩色子&#xff0c;猜大小&#xff0c;比如选择哪条路回家&#xff1f;Python程序中同样也会遇到。IF语句就是用作条件判断的控制语句。语法一&#xff1a;if 条件:  # 引号是将条件与结果分开结果1 #tab键&a…

android 生成 资源文件,SVG-Android开源库——SVG生成Vector资源文件的编辑预览工具...

Vector矢量图在Android项目中的利用愈来愈广泛&#xff0c;但是如果你想用Android Studio自带的工具将SVG图片转化成Vector资源文件却是相当麻烦&#xff0c;首先能支持的SVG规范较少&#xff0c;其次操作流程麻烦。而另外一种方式就是通过http://inloop.github.io/svg2android…

python常用序列类型_Python基础-序列类型的常用方法

python 是一门编程语言&#xff0c;是一门完全面向对象的编程语言。各序列类型的自带方法序列的常用方法元组的常用方法字符串的常用方法①列表的常用方法L.append(obj)>>>在列表末尾添加新的对象L.clear()>>>清空整个列表L.copy()>>>复制列表L.cou…

android 内存占用工具,Android系统检测程序内存占用各种方法

1.检查系统总内存liuhxuc ~ $ adb shell cat /proc/meminfoMemTotal: 840868 kBMemFree: 457344 kBBuffers: 1744 kBCached: 203064 kBSwapCached: 0 kBActive: 234932 kBInactive: 129644 kBActive(anon)…

android微信朋友圈相册背景,Android 仿微信朋友圈图片拖拽返回

目前的app的动画效果是越来越炫了&#xff0c;很多主流app的图片预览返回都有类似功能&#xff0c;比较常见的是ios自带相册&#xff0c;微信朋友圈等等。自己项目中也有类似功能&#xff0c;最近整理了一下这个功能的代码&#xff0c;做个笔记记录&#xff0c;有兴趣的朋友可以…

python文本筛选html_python 正则表达式过滤文本中的html标签 源代码解析

#py2.7#coding:utf-8import reimport osimport chardetdef filter_tag(htmlstr):re_cdata re.compile(^>]*>, re.I)re_script re.compile(]*>[^, re.I) #过滤脚本re_style re.compile(]*>[^, re.I) #过滤stylere_br re.compile()re_h re.compile(?\w[^>]*…

erp采购总监个人总结_《用友 ERP 培训教程:财务核算/供应链管理/物料需求计划》ERP概述 : ERP基础知识...

第1章 ERP概述本章重点_- _ERP概要_- _ERP实施成功的必要条件_- _ERP几个重要的名词解释用友ERP-U8&#xff08;V8 .72&#xff09;简介及功能按钮说明1.1 ERP基础知识1.1.1 ERP基本概念ERP&#xff08;Enterprise Resources Planning&#xff09;中文叫做企业资源规划&…

android studio1.5 for mac,适用于Mac的Android Studio 1.5.x随机崩溃

适用于Mac的Android Studio 1.5(AI-141.2456560)经常随机崩溃.我正在使用Macbook Pro 15“Retina(2105年中期)和Mac OS X 10.11.1真的很烦人.你有过这些崩溃的经历吗&#xff1f;你知道任何解决方法吗&#xff1f;提前致谢.这是崩溃日志的标题&#xff1a;Process: studio [425…

python 八大排序_八大排序算法的 Python 实现

1、插入排序def insert_sort(lists):# 插入排序count len(lists)for i in range(1, count):key lists[i]j i - 1while j > 0:if lists[j] > key:lists[j 1] lists[j]lists[j] keyj - 1return lists2、希尔排序def shell_sort(lists):# 希尔排序count len(lists)st…

soc 设计soc设计 uml实务手册_企业内训“软件需求设计建模方法学全程实例剖析”训练方案(2020年)...

※训练介绍※利润需求-设计。软件开发中&#xff0c;需求是解决“系统怎样好卖”的问题&#xff0c;设计是解决“降低开发成本”的问题。要迈向“低成本制造好卖的产品”的境界&#xff0c;并非喊喊口号就能达到。口号&#xff1a;我们只做最重要的需求&#xff0c;尽快把系统推…

鸿蒙分布式通讯子系统,【鸿蒙】分布式通信子系统--让华为手机发现Hi3861开发板...

目录&#xff1a;工具步骤运行结果工具&#xff1a;1. 华为手机&#xff0c;需要有多设备协同功能。在设置->更多连接->多设备协同&#xff0c;查看是否有多设备协同功能&#xff0c;此功能使用的就是coap协议。2. Hi3861开发板步骤&#xff1a;1. 修改源码&#xff0c;…

python2.7 pyqt4创建qtapp_python-2.7 – 向TabWidget pyqt4添加加号按钮

以下代码提供了一个可以动态添加选项卡的选项卡界面import sys,randomfrom PyQt4 import QtCore,QtGuiclass TabContainer(QtGui.QWidget):def __init__(self):super(TabContainer,self).__init__()self.next_item_is_table Falseself.initUI()def initUI(self):self.setGeome…

html怎样在一张图片里写字,用HTML代码在图片上写字

效果一&#xff1a;文字居中cellSpacing0 cellPadding0 width410 aligncenterbackgroundhttp://bbs.guqu.net/UploadFile/2005-1/200512211045825.gifborder0> type"vertical" spacer>size7>百年爱情文字在图片中的位置。由中的aligncenter决定。center&…

winform 统计大量数据重复的元素个数_DAY10——推断统计之概率与概率分布:常见的离散型概率分布...

「数学期望——某件事情大量发生之后的平均结果」----------------分割又分割----------------------昨天文章排版出了问题&#xff0c;今天重新排版。数据的三个统计维度&#xff1a;集中程度、离散程度、分布情况。集中程度&#xff1a;期望离散程度&#xff1a;方差、标准差…

数组转换为html,如何将多维PHP数组转换为html表

我正在尝试使用多维数组变量制作一个HTML表&#xff0c;该变量$array2是一个查询(来自mysql数据库PHP查询而不是一个自制查询)&#xff0c;如下所示&#xff1b;Array([0] > Array([0] > M2TYEE[1] > Jean[2] > Harvey[3] > London[4] > 0314686334)[1] >…

xss跨站脚本攻击_常见攻击之xss跨站脚本攻击

前言随着互联网的不断发展&#xff0c;web应用的互动性也越来越强。相应的&#xff0c;在用户体验提升的同时安全风险也会跟着有所增加。今天&#xff0c;我们就来讲一讲web渗透中常见的攻击方式之一&#xff0c;XSS攻击。首先需要了解他是如何工作的&#xff0c;以及我们如何利…

android dropbox切换账户,android – 如何获取我的APP_KEY和SECRET_KEY的Dropbox同步?

我正在努力构建将应用程序的* .csv文件与理想的保管箱帐户同步的机会.我到目前为止做了什么>清单中的权限和com.dropbox.client2.android.AuthActivity>使用我的发行商店签署了我的应用程序>执行一些代码来检查保管箱服务问题是我不明白我在哪里可以得到APP_KEY和SECR…

缺陷调研报告_质量零缺陷 | 打造极致产品的质量管理之道

质量是政治质量是生命质量是效益为强化全员“零缺陷”质量意识&#xff0c;坚决打赢质量提升攻坚战&#xff0c;现开设“质量零缺陷”专栏&#xff0c;着力宣传全院各单位在加强质量管理&#xff0c;落实零缺陷理念等方面的典型做法和质量故事。今天为大家带来的是曾获得“全国…