飞思卡尔8位单片机-第6章- 中断系统
飞思卡尔单片机中断
在CW4.6环境下,中断编程主要有两种方式: 第一种是使用“interrupt‖关键字,―interrupt‖关键字是一个非标准ANSI-C的关键字,因此,它不能被所有ANSI-C编译器厂商所支持 。同样,对不同的编译器,interrupt‖关键字的用法可能会改变。“interrupt‖关键字同样会提示编译器下面的函数是一个中断服务例程。 例: void interrupt 20 SCI0_ISR(void); 其中,interrupt表示该函数为终端服务程序,后面的20表示中断号20,在这里SCI0的中断向量号就是20. 这种方法写起来非常简单,但是,在S12单片机实际使用中,中断号并没有在手册中给出,通常需要自己在中断向量表中从上往下 数出来,或者根据中断向量计算得到,很容易出错。 于是有了第二种方法: 在ISR程序之前,使用符号“#pragma TRAP_PROC‖,TRAP_PROC 提示编译器下面的函数是中断服务例程。编译器会用一个特 殊的中断返回指令来结束这个函数。 此时,中断函数的书写如下所示: #pragma TRAP_PROC void SCI0_ISR(void){ ...} 这时候编译器不知道这个ISR指向那个中断向量,我们需要在链接文件即:prm文件中指定之。 使用 VECTOR命令来实现中断向量与ISR程序的连接。 例:VECTOR 0 _Startup //这是系统默认prm文件中自带的,即复位后0号中断即复位中断的ISR为_Startup() 我们可以这样写: VECTOR 20 SCI0_ISR //指定中断号 或者 VECTOR ADDRESS 0xFFD6 SCI0_ISR //直接指定中断向量地址 注:使用#pragma TRAP_PROC与修改prm文件的方法,在中断服务子程序的结尾处必须要手动加入返回主程序的指令,包括取 出堆栈、中断返回两个步骤。 在S12单片机中,可以写作 asm { pula; rti;} 尾注: 两种方法所写的中断服务子程序必须被放在非分页存储区内,即non_blanked code seg. 其中一种常用的方法是在服务子程序前声明://下面代码放在NON_BANKED区 #pragma CODE_SEG NON_BANKED 在中断程序后声明://下面内容按默认放置 #pragma CODE_SEG DEFAULT Freescale Semiconductor Confidential and Proprietary Information. Freescale™ and the Freescale logo are trademarks of Freescale
飞思卡尔8位单片机—飞思卡尔8位单片机基础知识
2.2、单片机的命名规则及选择
2.2.1、单片机选型需要关心的事项
供电电压、速度及功耗 管脚数量、并口与串口、功能复用、外扩能力 存储器资源:ROM、RAM、是否分页 外设接口 定时器数量、PWM、捕捉、比较 SPI、IIC、UART、CAN、USB、YITAI 中断源 模拟量处理 特殊接口:VGA、LCD、MOTOR 封装
选型要学会查找资源差异表
Freescale的08系列单片机型号有一百多种。在 这些不同型号的单片机中,资源各不相同,即使 是同一种型号的单片机,也有多种封装形式,其 I/O引脚数目也不相同。如MC68HC908JB8就有 20脚的DIP、28脚的SOIC、44脚的QFP和20脚 的SOIC四种封装形式。
7〉 管脚的复用
注意: 0、管脚功能复用时的优先 级见右表,高优先级接管管 脚时,对低优先级模块会产 生杂乱信号,因此切换前应 先停止不使用的功能。 1、PTA5作为只能输入管脚 而言,输入电压不能超过 VDD。 2、IIC使用的端口可以通过 设置SOPT2 寄存器中的 IICPS位重新定位到PTB6和 PTB7,复位时缺省使用 PTA2 and PTA3。 3、如果ACMP和ADC被同 时使能,管脚PTA0和PTA1 可同时使用。
第二章 飞思卡尔8位单片机基础知识
2.1、飞思卡尔8位单片机系列简介 2.2、飞思卡尔单片机命名规则与单片机选型 2.3、 MC9S08QG8硬件结构
8bit 单片机的Core type
HC08系列、HCS08系列、RS08系列。 HC08是1999年开始推出的产品,种类多,针对不同场合 的应用都可以选到合适的型号。 HCS08是2004年左右推出的8位MCU,资源丰富,功耗 低,性价比高,是08系列单片机的发展趋势。HC08与 HCS08的最大区别是调试方法不同与最高频率的变化 。 RS08是HCS08架构的简化版本,2006年推出,其内核体 积比传统的内核小30%,带有精简指令集,满足用户对 体积更小、更加经济高效的解决方案的需求。RAM及 Flash空间大小差异、封装形式不同、温度范围不同、 频率不同、I/O资源差异等形成了不同型号,为嵌入式 应用产品的开发提供了丰富的选型。
飞思卡尔单片机中断
中断嵌套与中断返回
中断嵌套处理
在中断处理过程中,如果再次触发其他中断,需要进行嵌套处理,确保每个中断都能得到及时响应。
中断返回
中断处理完成后,需要返回被中断的程序,继续执行后续操作。在返回过程中,需要注意恢复被中断 程序的现场状态。
04
中断应用实例
定时器中断
定时器中断概述
定时器中断的配置
定时器中断是由单片机内部的定时器产生 的中断,用于在设定的时间间隔内执行特 定的任务。
中断使能与中断屏蔽
中断使能
通过设置中断使能位,可以启用或禁用某个中断源的中断处理功能。
中断屏蔽
通过设置中断屏蔽位,可以禁止某些不希望处理的中断源产生中断。
03
中断处理程序
中断处理程序的编写
初始化中断向量表
根据需要,在程序中初始化中断向量表,以确定不同 中断源对应的处理函数。
编写中断处理函数
根据中断源的不同,编写相应的中断处理函数,实现 中断响应和处理。
硬件结构
01
02
03
中断控制器
中断控制器是单片机中断 系统的核心部件,负责管 理中断的响应、优先级和 向量。
中断源
中断源是指能够触发中断 的信号源,如定时器溢出 、串行通信接收到数据等 。
中断优先级和向量
中断优先级决定了中断的 优先级,而向量则是指中 断处理程序的入口地址。
中断源
定时器溢出
当定时器计数达到最大值时,会触发一个中断,用于定时器 溢出处理。
THANKS。
解决方法
解决中断丢失问题需要从以下几个方面入手:首先,检查中断优先级设置,确保优先级 正确且没有重叠;其次,优化ISR的编写,避免在ISR中执行耗时的操作,确保ISR简洁 高效;最后,如果问题依然存在,可以尝试在外部硬件上加装抗干扰措施,如滤波电容
飞思卡尔8位单片机—飞思卡尔8位单片机基础知识
7〉 管脚的复用
注意: 0、管脚功能复用时的优先 级见右表,高优先级接管管 脚时,对低优先级模块会产 生杂乱信号,因此切换前应 先停止不使用的功能。 1、PTA5作为只能输入管脚 而言,输入电压不能超过 VDD。 2、IIC使用的端口可以通过 设置SOPT2 寄存器中的 IICPS位重新定位到PTB6和 PTB7,复位时缺省使用 PTA2 and PTA3。 3、如果ACMP和ADC被同 时使能,管脚PTA0和PTA1 可同时使用。
管脚及其功能
6〉 管脚控制寄存器
位于高页面的管脚控制寄存器,可以独立设置每个管 脚的输出驱动强度、输出信号变化速度、输入脚的内部 上拉允许等。内部上拉的设置有些时候自动失效,比如 管脚设为输出、管脚被外设使用、管脚作为模拟电路使 用等。如果管脚被用于键盘中断KBI模块,,并设置上升 沿触发,则允许上拉时实际是配置了下拉电阻。 对输出管脚设置了输出变化速度控制后,可以减少 EMC辐射,变化速度控制对输入脚无效。 输出管脚的输出驱动强度控制,可以选择更大的驱 动电流,虽然每个输出管脚都可以设置成大电流驱动, 但总电流不能超出芯片的工作范围。同时大驱动电流对 EMC辐射也会有一定影响。
• EPROM
EPROM(Erasable Programmable ROM,可擦除可编 程ROM)芯片可重复擦除和写入,。EPROM芯片在其正 面的陶瓷封装上,开有一个玻璃窗口,透过该窗口,可以 看到其内部的集成电路, 紫外线透过该孔照射内部芯片 就可以擦除其内的数据,完成芯片擦除的操作要用到 EPROM擦除器。EPROM内资料的写入要用专用的编程 器,并且往芯片中写 内容时必须要加一定的编程电压( VPP=12—24V,随不同的芯片型号而定)。EPROM的型 号是以27开头的,如27C020(8*256K)是一片 2M Bits容 量的EPROM芯片。EPROM芯片在写入资料后,还要以 不透光的贴纸或胶布把窗口封住,以免受到周围的紫外线 照射而使资料受损
(整理)飞思卡尔8位单片机MC9S08JM60开发板实践教程
第一章搭建实验环境系统时钟设置#include "App\Include\App.h"#ifndef _MCG_C#define _MCG_C//oscillator 12MHZ 倍频为24MHZ()先8分频后16倍频void S_MCGInit(void){/* the MCG is default set to FEI mode, it should be change to FBE mode*//************************************************************************** ***********MCGC2[7:6] BDIV总线频率分频因子–选择由MCGC1寄存器中CLKS位决定的时钟源的分频。
这控制总线频率。
00 编码0 –时钟1分频01 编码1 –时钟2分频(复位后默认)10 编码2 –时钟4分频11 编码3 –时钟8分频[5] RANGE频率范围选择–选择外部振荡器或者外部时钟源的频率范围。
1 选择1MHz到16MHz外部振荡器的频率范围。
(1MHz到40MHz的外部时钟电源)的高频率范围0 选择32kHz到100kHz外部振荡器的频率范围。
(32kHz到1MHz的外部时钟电源)的低频率范围[4] HGO高增益振荡器选择–控制外部振荡器操作模式。
1 配置外部振荡器为高增益运行0 配置外部振荡器为低功耗运行[3] LP低功耗选择–控制在忽略模式中FLL(或者PLL)是否为无效1 FLL(或PLL)在忽略模式(低功耗)中为无效的。
0 FLL(或PLL)在忽略模式中为无效的。
[2] EREFS外部参考时钟选择–为外部参考选择时钟源1 选择振荡器0 选择外部时钟源[1] ERCLKEN外部参考时钟使能–使能外部参考时钟作为MCGERCLK1 MCGERCLK激活0 MCGERCLK 无效[0] EREFSTEN外部参考时钟停止使能MCGC2 0b0011 0110 激发外部时钟(晶振)(没有使能)*************************************************************************** ***********/MCGC2=MCGC2_RANGE_MASK|MCGC2_HGO_MASK|MCGC2_EREFS_MASK|MCGC2_ERCLK EN_MASK;while(!MCGSC_OSCINIT);//MCGSC寄存器中OSCINIT(第1位)为1,表示由EREFS位选择的晶振被初始化。
06 第六章 中断系统 单片机 华中科技大学
6.2.1 8051单片机的中断源
二、内部中断:
(1)定时器溢出中断 )定时器溢出中断TF0、TF1: 、 : 当定时器T0、T1产生溢出时发出的中断请求,中断标志位 TF0、TF1置1,请求中断处理;响应中断后,自动清0。 (2)串行口中断 或TI: )串行口中断RI或 : 当串行口接收或发送完一帧数据时发出的中断请求,中断标 志位RI或TI置1,请求中断处理。响应中断后,由用户清0。
6.2.2 中断允许和禁止
特殊功能寄存器IE为中断允许寄存器 中断允许寄存器,通过向IE 中断允许寄存器 写入中断控制字,控制CPU对中断源的开放或屏蔽。 2级控制:一个总控制位, 每个中断源有一个分控制位
6.2.2 特殊功能寄存器IE
0:关INT0中断 1:开INT0中断 0:关T0中断 1:开T0中断 0:关INT1中断 1:开INT1中断 0:关T1中断 1:开T1中断 0:关串行口中断 1:开串行口中断
6.2.3.2 中断处理和中断返回
CLR EA PUSH A PUSH R1 … SETB EA … … CLR EA … POP R1 POP A SETB EA RETI ;关中断 ;保护现场 ; ;开中断,可响应更高级中断 ;中断服务 ; ;关中断 ;恢复现场 ; ;开中断 ;中断返回
6.2.3.3 中断请求的撤除
中断系统应用举例
初始化程序 SETB EA ;CPU开中断 ;允许INT0中断 SETB EX0
SETB IT0 ;置为电平触发方式 SETB PX0 中断服务程序 LOOP1: JNB P3.2, LOOP1 ;检测引脚是否出现高电平 ;若是低电平,则原地踏步 LOOP2: JB P3.2, LOOP2 RETI ;检测引脚是否出现低电平 ;若是高电平,则原地踏步 ;中断返回 ;置为高中断优先级
飞思卡尔8位单片机-第6章- 指令系统与汇编程序设计
存储器 OP
低地址
45 0A
高地址
直接寻址模式 (DIR)
• 地址:指令中给出的8位操作数 地址:指令中给出的 位操作数 • 寻址空间:$0000~$00FF 寻址空间: • 如:LDA $08; ;
A 0A
存储器 OP
低地址
45 0A
08H
高地址
扩展寻址模式 (EXT)
• 地址:指令中给出16位操作数 地址:指令中给出 位操作数 • 大多数扩展寻址指令为 字节 大多数扩展寻址指令为3字节 • 寻址空间:$0000~$FFFF,64KB 寻址空间: , 注意:在某些编译器中,在单字节地址前加符号“<”表示直 接寻址,否则,编译时会在该地址前加上一个$00字节,这样 就成了扩展寻址。例如: LDA <$50 ;属于直接寻址 LDA $50 ;汇编时将自动生成两字节操作数$0050,就成了 扩展寻址 而有的编译器遇到地址高8位为0的情况会自动按直接寻址处 理,不需要直接寻址符号“<”
7 V
二进制补码溢出标志—当发生一个二进制补码溢出, 二进制补码溢出标志 当发生一个二进制补码溢出, 当发生一个二进制补码溢出 CPU置这位为 。符号分支指令 置这位为1。符号分支指令BGT,BGE, BLE 置这位为 , , 将会用到溢出标志位。 和BLT将会用到溢出标志位。 将会用到溢出标志位 0 没有溢出 1 有溢出
(1). 无偏移量变址寻址 无偏移量变址寻址(IX) 地址:变址寄存器 中的值。 地址:变址寄存器(H:X)中的值。 中的值 单字节指令。 单字节指令。
例如: 例如: (H:X)=$0089, ($0089)=$A0 CLR X ;把以变址寄存器(H:X)为地址的存储单元的 把以变址寄存器( : ) 内容清零, 内容清零 即($0089)=$0, (H:X)不变 : )
飞思卡尔8位单片机实用教程说明书
图书基本信息书名:《飞思卡尔8位单片机实用教程》13位ISBN编号:978712108999210位ISBN编号:7121089998出版时间:2009-6出版社:曾周末、李刚、陈世利、 周鑫玲 电子工业出版社 (2009-06出版)页数:222版权说明:本站所提供下载的PDF图书仅提供预览和简介以及在线试读,请支持正版图书。
更多资源请访问:前言飞思卡尔原是全球领先的半导体公司,为汽车、消费电子、工业控制、网络和无线市场设计并制造嵌入式半导体产品。
飞思卡尔系列单片机由于其低成本和高性能的特点越来越受到用户的青睐。
本书介绍的MC9S08QG8单片机采用高性能、低功耗HCS208飞思卡尔8位微控制器为内核,是一款集成度很高、功能丰富、适用于各种应用的低价位单片机。
本书将给大家介绍它的一些主要功能及特性,包括灵活多样的低功耗模式、3.3V电压下的Flash编程、片内调试仿真器、高速ADC、IC总线、片内比较器等。
本书共12章,深入浅出地从一般单片机的基础知识人手,引出飞思卡尔8位单片机基础知识、最小系统设计,进而有步骤地、详略得当地介绍飞思卡尔8位单片机的寄存器与片内存储器、指令系统与汇编程序设计、中断系统等基本功能,并在之后的章节中,详细而又有针对性地一一介绍了集成在这款单片机内部的其他功能模块,比如定时器和比较器、异步串行通信、SPI、IC、模/数转换等功能模块。
本书还介绍了飞思卡尔单片机与MCS51单片机的区别,学过5l单片机的人会很快掌握其要点。
在本书最后一章里,有针对性地介绍了S08系列单片机c语言编程,并详细介绍了Code Warrior IDE调试软件的使用方法。
本书给出的所有例题都在实验板上运行验证过。
总之,本书力求通过最简洁的语言和表述方式、最通俗易懂的应用举例,向广大读者全面地介绍MC9S080G8单片机的功能及特性,以求能够为大专院校的学生及各相关领域的工作者提供一些帮助。
参加本书编写的还有天津大学精仪学院的薛彬、汤其剑、刘世廷、高雅彪、叶德超、黄邦奎、孙晔等研究生。
飞思卡尔中断设置方式
中断的关闭与开放开放MC56F8257中某个模块中断,通常需要开放总中断及模块中断来实现。
这两部分缺一不可,并且开放总中断在前,开放模块中断在后。
同理,关闭MC56F8257中某个模块中断,需要关闭总中断及模块中断来实现,先关闭模块中断,再关闭总中断;如果允许中断嵌套情况,不需关闭总中断。
开放MC56F8257总中断,通过清中断控制寄存器(INTC_CTRL)的INT_DIS位;关闭总中断,需置该位即可,具体代码如下:#define EnableInterrupt() INTC_CTRL&=~INTC_CTRL_INT_DIS_MASK#define DisableInterrupt() INTC_CTRL|=INTC_CTRL_INT_DIS_MASK开放或关闭模块中断,需设置模块内部的控制寄存器的相应位。
如开放QSCI模块的接收中断0,需置位QSCI控制寄存器1(QSCIx_CTRL1)中的RFIE位;关闭该中断,清RFIE 位即可,具体代码如下:#define EnableQSCIReInt(0) QSCI_C1(0)|=(QSCI1_CTRL1_RFIE_MASK)#define DisableQSCIReInt(0) QSCI_C1(0)&=(QSCI1_CTRL1_RFIE_MASK)中断优先级的设置DSP56800E内核支持5级中断:LP、0、1、2和3,其优先级别依次升高。
最低优先级LP只能由系统SWILP指令产生;0~2优先级用户可以编程设置,主要用于外设和外部中断请求;级别3是最高优先级且不可屏蔽。
具体设置某个中断源的中断优先级,可通过设置中断优先级寄存器(INTC_IPR0~INTC_IPR7)中的相应位。
如设置QSCI中断优先级,通过设置中断优先级寄存器(INTC_IPR2)中的QSCI0_RCV位实现,该位具体含义见表1所示。
从表1看出,QSCI中断可配置三个不同级别,即优先级0、1和2。
单片机中断系统ppt课件
DJNZ R7 MOV P1,#0
CLR EA
SJMP $ ;结束
INT1: INC R0 ;中断次数加1
MOV A,R0
MOV DPTR,#TAB ;DPTR
MOVC A,@A+DPTR
POP DPH
POP DPL
MOV DPTR,#AL1
PUSH DPL
PUSH DPH ;修改中断返回点,AL1压入堆栈
第6章 MCS-51单片机的中断系统
本章介绍的主要内容 ★中断的基本概念 ★中断的系统结构 ★中断的响应过程 ★中断的的应用编程
在CPU和外设交换信息时,存在着快速CPU和慢速外 设间的矛盾,机器内部有时也可能出现突发事件,为此, 计算机中通常采用中断技术。 中断
CPU和外设并行工作,当外设数据准备好( 或有某种突 发事件发生)时向CPU提出请求,CPU暂停正在执行的程序 转而为该外设服务(或处理紧急事件),处理完毕再回到原断 点继续执行原程序。 中断源
例1. 在图6.3中P1.4~P1.7接有四个发光二极管,P1.0~ P1.3接有四个开关,消抖电路用于 产生中断请求信号,当 消抖电路的开关来回拔动一次将产生一个下降沿信号,通 过INT0向CPU申请中断,要求:初时发光二极管全黑,每 中断一次,P1.0~P1.3所接的开关状态反映到发光二极管 上,且要求开关断开的对应发光二极管亮,电路和现象如 下:
以上中断在AL1或AL2两指令处发生,究竟是哪一指 令处中断是随机的,为保证返回到AL1显示‘F ’ ,这里 采用修改中断返回点的办法, 即先从栈中弹出中断响应 时压入的 断点弹到DPTR中,修改DPTR为用户需要的返 回点,并将其压 入堆栈,再通过执行RETI指令弹出栈中 内容到PC、弹出的即为修改后的地址,从而返回到主 程
飞思卡尔单片机中断(一)2024
飞思卡尔单片机中断(一)引言:飞思卡尔单片机中断是一种重要的编程技术,它允许在程序执行过程中暂停当前任务,响应外部事件或触发条件,并执行预定的中断服务程序。
本文将介绍飞思卡尔单片机中断的基本概念和使用方法。
正文:一、中断的基本概念1. 中断的定义和作用2. 中断向量表的概念和作用3. 中断优先级的设置方法4. 中断服务程序的编写规范5. 中断相关的特殊寄存器和标志位二、中断的种类和触发方式1. 内部中断和外部中断的区别2. 边沿触发和电平触发的区别3. 外部中断的触发源选择方法4. 外部中断的初始化配置5. 中断使能和禁止的控制方法三、中断的编程方法1. 中断源的初始化与配置2. 中断服务程序的编写和触发3. 中断嵌套和优先级的处理方法4. 保存和恢复现场的操作5. 中断的屏蔽和清除方法四、中断应用实例1. 外部中断的按键检测与响应2. 定时器中断的使用与定时任务处理3. 串口通信中断的接收和发送处理4. ADC采样中断的数据处理与转换5. PWM输出中断的周期控制和占空比调节五、中断的注意事项和常见问题1. 中断与任务之间的协作与竞争关系2. 中断响应时间和延迟的优化方法3. 中断嵌套引起的问题和解决方案4. 中断服务程序的限制和要求5. 中断与低功耗模式的关系和影响总结:飞思卡尔单片机中断是一种强大的编程技术,它可以提高单片机系统的实时性和响应能力。
通过本文的介绍,我们了解到了中断的基本概念和使用方法,以及中断在各种应用场景中的应用实例。
在使用中断时,我们需要注意一些常见问题和注意事项,以确保系统的稳定性和可靠性。
飞思卡尔单片机中断(两篇)
引言概述飞思卡尔单片机中断是指在特定的条件下,单片机的运行被打断,转而执行特定的处理程序。
在飞思卡尔单片机的开发中,中断是非常重要的一部分,它可以提高系统的响应速度和实时性。
本文将详细介绍飞思卡尔单片机中断的相关知识。
正文内容一、中断的基本概念和原理1. 中断的定义:中断是指在特定的条件下,程序的执行被打断,转而执行事先定义好的处理程序。
2. 中断的分类:外部中断和内部中断。
外部中断是由外部设备引发的,例如按键、定时器等;内部中断是由单片机内部的某个事件引发的,例如指令执行完成、通信完成等。
3. 中断的触发方式:电平触发和边沿触发。
电平触发是指当外部信号保持一定电平时触发中断;边沿触发是指在信号的上升沿或下降沿触发中断。
二、飞思卡尔单片机中断的使用方法1. 中断的初始化:对中断控制寄存器进行设置,使能相应的中断源。
2. 中断的优先级设置:多个中断源同时触发时,可以通过设置优先级来确定执行顺序。
3. 中断服务程序的编写:根据不同的中断源,编写相应的中断服务程序,完成特定的处理。
4. 中断的开启和关闭:根据需要,可以在程序中开启或关闭特定的中断。
三、飞思卡尔单片机中断优化技巧1. 中断嵌套:可以在一个中断中触发另一个中断,提高系统的实时性和处理效率。
2. 临界区保护:在关键代码段加入关中断代码,保护临界区避免竞态条件的发生。
3. 中断延时处理:在某些特定情况下,需要延时处理中断,可以使用延时函数或软件延时方式实现。
四、飞思卡尔单片机中断的常见问题和解决方法1. 中断误触发问题:可能是由于外部干扰、软件错误等原因导致中断被误触发,可以通过加入滤波电路、改进软件设计等方式解决。
2. 中断处理时间过长问题:中断处理程序执行时间过长会导致系统响应变慢,可以通过优化中断程序、减少中断次数等方式解决。
3. 中断嵌套问题:如果中断嵌套层次太多,可能会导致系统死锁或无法预测的结果,可以通过合理设计中断嵌套层次、减少中断嵌套次数来解决。
飞思卡尔中断处理方法
飞思卡尔智能车总结之中断的处理方法对于我这个学计算机软件的人,来写单片机的程序,还真的是由不少困难。
最近一直在看freescale的程序规范,真的是很纠结。
我全部的硬件编程经验不过是去年硬件小学期的vhdl 程序,在试验箱上捣鼓捣鼓程序逻辑,就这点。
本来就忘的差不多了,况且它与单片机的模式还有很多区别。
所以啊``忍之,忍之,全当自我挑战了。
机械部分和电路部分完成,接下来该做的软件调试和综合测试。
我得累了。
今天遇到了一个关于中断怎么写的问题,纠结了很久,总结一下:标准的程序段是这样的格式:[c-sharp]view plaincopyprint?1. #pragma CODE_SEG __NEAR_SEG NON_BANKED //中断函数置于非分页区内2. interrupt VectorNumber_Vtimch7 void ICU_Ch7Int(void)3. {4. TFLG1_C7F = 1; //清中断标志位5. }6. #pragma CODE_SEG DEFAULT //后续代码置于默认区域内一般是用上述方式声明中断函数。
由于飞思卡尔16位单片机的中断向量是16位,所以中断函数只有被置于非分页区内才能被寻址到,这就是第一行的作用。
第二行中“VectorNumber_Vtimch7”是中断号,它是由文件“MC9S12XS128.h”中定义的宏,这个中断号在它的技术手册中找到,但是我建议你采用这种宏的形式,因为这个宏不容易出错,可读性较高,比如“VectorNumber_Vtimch7”即为定时器(TIM)通道7(CH7)所对应的中断号。
中断函数名“ICU_Ch7Int”可任意取,没有影响。
由于单片机内部非分页区大小有限,非中断函数一般置于分页区内,最后一行即为此作用。
令:MC9S12XS128.h中的宏定义是这样的:[cpp]view plaincopyprint?1. /**************** interrupt vector numbers ****************/2. #define VectorNumber_Vsi 1193. #define VectorNumber_Vsyscall 1184. #define VectorNumber_VReserved118 1175. #define VectorNumber_VReserved117 1166. #define VectorNumber_VReserved116 1157. #define VectorNumber_VReserved115 1148. #define VectorNumber_VReserved114 1139. #define VectorNumber_VReserved113 11210. #define VectorNumber_VReserved112 11111. #define VectorNumber_VReserved111 11012. #define VectorNumber_VReserved110 10913. #define VectorNumber_VReserved109 10814. #define VectorNumber_VReserved108 10715. #define VectorNumber_VReserved107 10616. #define VectorNumber_VReserved106 10517. #define VectorNumber_VReserved105 10418. #define VectorNumber_VReserved104 10319. #define VectorNumber_VReserved103 10220. #define VectorNumber_VReserved102 10121. #define VectorNumber_VReserved101 10022. #define VectorNumber_VReserved100 9923. #define VectorNumber_VReserved99 9824. #define VectorNumber_VReserved98 9725. #define VectorNumber_Vatd0compare 9626. #define VectorNumber_VReserved96 9527. #define VectorNumber_VReserved95 9428. #define VectorNumber_VReserved94 9329. #define VectorNumber_VReserved93 9230. #define VectorNumber_VReserved92 9131. #define VectorNumber_VReserved91 9032. #define VectorNumber_VReserved90 8934. #define VectorNumber_VReserved88 8735. #define VectorNumber_VReserved87 8636. #define VectorNumber_VReserved86 8537. #define VectorNumber_VReserved85 8438. #define VectorNumber_VReserved84 8339. #define VectorNumber_VReserved83 8240. #define VectorNumber_VReserved82 8141. #define VectorNumber_VReserved81 8042. #define VectorNumber_VReserved79 7943. #define VectorNumber_VReserved78 7844. #define VectorNumber_VReserved77 7745. #define VectorNumber_VReserved76 7646. #define VectorNumber_VReserved75 7547. #define VectorNumber_VReserved74 7448. #define VectorNumber_VReserved73 7349. #define VectorNumber_VReserved72 7250. #define VectorNumber_VReserved71 7151. #define VectorNumber_VReserved70 7052. #define VectorNumber_Vpit3 6953. #define VectorNumber_Vpit2 6854. #define VectorNumber_Vpit1 6755. #define VectorNumber_Vpit0 6656. #define VectorNumber_Vhti 6557. #define VectorNumber_Vapi 6458. #define VectorNumber_Vlvi 6359. #define VectorNumber_VReserved62 6260. #define VectorNumber_VReserved61 6161. #define VectorNumber_VReserved60 6062. #define VectorNumber_VReserved59 5963. #define VectorNumber_VReserved58 5864. #define VectorNumber_Vpwmesdn 5765. #define VectorNumber_Vportp 5666. #define VectorNumber_VReserved55 5567. #define VectorNumber_VReserved54 5469. #define VectorNumber_VReserved52 5270. #define VectorNumber_VReserved51 5171. #define VectorNumber_VReserved50 5072. #define VectorNumber_VReserved49 4973. #define VectorNumber_VReserved48 4874. #define VectorNumber_VReserved47 4775. #define VectorNumber_VReserved46 4676. #define VectorNumber_VReserved45 4577. #define VectorNumber_VReserved44 4478. #define VectorNumber_VReserved43 4379. #define VectorNumber_VReserved42 4280. #define VectorNumber_VReserved41 4181. #define VectorNumber_VReserved40 4082. #define VectorNumber_Vcan0tx 3983. #define VectorNumber_Vcan0rx 3884. #define VectorNumber_Vcan0err 3785. #define VectorNumber_Vcan0wkup 3686. #define VectorNumber_Vflash 3587. #define VectorNumber_Vflashfd 3488. #define VectorNumber_VReserved33 3389. #define VectorNumber_VReserved32 3290. #define VectorNumber_VReserved31 3191. #define VectorNumber_VReserved30 3092. #define VectorNumber_Vcrgscm 2993. #define VectorNumber_Vcrgplllck 2894. #define VectorNumber_VReserved27 2795. #define VectorNumber_VReserved26 2696. #define VectorNumber_Vporth 2597. #define VectorNumber_Vportj 2498. #define VectorNumber_VReserved23 2399. #define VectorNumber_Vatd0 22 100. #define VectorNumber_Vsci1 21 101. #define VectorNumber_Vsci0 20 102. #define VectorNumber_Vspi0 19103. #define VectorNumber_Vtimpaie 18104. #define VectorNumber_Vtimpaaovf 17105. #define VectorNumber_Vtimovf 16106. #define VectorNumber_Vtimch7 15107. #define VectorNumber_Vtimch6 14108. #define VectorNumber_Vtimch5 13109. #define VectorNumber_Vtimch4 12110. #define VectorNumber_Vtimch3 11111. #define VectorNumber_Vtimch2 10112. #define VectorNumber_Vtimch1 9113. #define VectorNumber_Vtimch0 8114. #define VectorNumber_Vrti 7115. #define VectorNumber_Virq 6116. #define VectorNumber_Vxirq 5117. #define VectorNumber_Vswi 4118. #define VectorNumber_Vtrap 3119. #define VectorNumber_Vcop 2120. #define VectorNumber_Vclkmon 1121. #define VectorNumber_Vreset 0122.123. /**************** interrupt vector table ****************/ 124. #define Vsi 0x0000FF10125. #define Vsyscall 0x0000FF12126. #define VReserved118 0x0000FF14 127. #define VReserved117 0x0000FF16 128. #define VReserved116 0x0000FF18 129. #define VReserved115 0x0000FF1A 130. #define VReserved114 0x0000FF1C 131. #define VReserved113 0x0000FF1E 132. #define VReserved112 0x0000FF20 133. #define VReserved111 0x0000FF22 134. #define VReserved110 0x0000FF24 135. #define VReserved109 0x0000FF26 136. #define VReserved108 0x0000FF28 137. #define VReserved107 0x0000FF2A139. #define VReserved105 0x0000FF2E 140. #define VReserved104 0x0000FF30 141. #define VReserved103 0x0000FF32 142. #define VReserved102 0x0000FF34 143. #define VReserved101 0x0000FF36 144. #define VReserved100 0x0000FF38 145. #define VReserved99 0x0000FF3A 146. #define VReserved98 0x0000FF3C 147. #define Vatd0compare 0x0000FF3E 148. #define VReserved96 0x0000FF40 149. #define VReserved95 0x0000FF42 150. #define VReserved94 0x0000FF44 151. #define VReserved93 0x0000FF46 152. #define VReserved92 0x0000FF48 153. #define VReserved91 0x0000FF4A 154. #define VReserved90 0x0000FF4C 155. #define VReserved89 0x0000FF4E 156. #define VReserved88 0x0000FF50 157. #define VReserved87 0x0000FF52 158. #define VReserved86 0x0000FF54 159. #define VReserved85 0x0000FF56 160. #define VReserved84 0x0000FF58 161. #define VReserved83 0x0000FF5A 162. #define VReserved82 0x0000FF5C 163. #define VReserved81 0x0000FF5E 164. #define VReserved79 0x0000FF60 165. #define VReserved78 0x0000FF62 166. #define VReserved77 0x0000FF64 167. #define VReserved76 0x0000FF66 168. #define VReserved75 0x0000FF68 169. #define VReserved74 0x0000FF6A 170. #define VReserved73 0x0000FF6C 171. #define VReserved72 0x0000FF6E 172. #define VReserved71 0x0000FF70174. #define Vpit3 0x0000FF74 175. #define Vpit2 0x0000FF76 176. #define Vpit1 0x0000FF78 177. #define Vpit0 0x0000FF7A 178. #define Vhti 0x0000FF7C 179. #define Vapi 0x0000FF7E 180. #define Vlvi 0x0000FF80 181. #define VReserved62 0x0000FF82 182. #define VReserved61 0x0000FF84 183. #define VReserved60 0x0000FF86 184. #define VReserved59 0x0000FF88 185. #define VReserved58 0x0000FF8A 186. #define Vpwmesdn 0x0000FF8C 187. #define Vportp 0x0000FF8E 188. #define VReserved55 0x0000FF90 189. #define VReserved54 0x0000FF92 190. #define VReserved53 0x0000FF94 191. #define VReserved52 0x0000FF96 192. #define VReserved51 0x0000FF98 193. #define VReserved50 0x0000FF9A 194. #define VReserved49 0x0000FF9C 195. #define VReserved48 0x0000FF9E 196. #define VReserved47 0x0000FFA0 197. #define VReserved46 0x0000FFA2 198. #define VReserved45 0x0000FFA4 199. #define VReserved44 0x0000FFA6 200. #define VReserved43 0x0000FFA8 201. #define VReserved42 0x0000FFAA 202. #define VReserved41 0x0000FFAC 203. #define VReserved40 0x0000FFAE 204. #define Vcan0tx 0x0000FFB0 205. #define Vcan0rx 0x0000FFB2 206. #define Vcan0err 0x0000FFB4 207. #define Vcan0wkup 0x0000FFB6209. #define Vflashfd 0x0000FFBA 210. #define VReserved33 0x0000FFBC 211. #define VReserved32 0x0000FFBE 212. #define VReserved31 0x0000FFC0 213. #define VReserved30 0x0000FFC2 214. #define Vcrgscm 0x0000FFC4 215. #define Vcrgplllck 0x0000FFC6 216. #define VReserved27 0x0000FFC8 217. #define VReserved26 0x0000FFCA 218. #define Vporth 0x0000FFCC 219. #define Vportj 0x0000FFCE 220. #define VReserved23 0x0000FFD0 221. #define Vatd0 0x0000FFD2 222. #define Vsci1 0x0000FFD4 223. #define Vsci0 0x0000FFD6 224. #define Vspi0 0x0000FFD8 225. #define Vtimpaie 0x0000FFDA 226. #define Vtimpaaovf 0x0000FFDC 227. #define Vtimovf 0x0000FFDE 228. #define Vtimch7 0x0000FFE0 229. #define Vtimch6 0x0000FFE2 230. #define Vtimch5 0x0000FFE4 231. #define Vtimch4 0x0000FFE6 232. #define Vtimch3 0x0000FFE8 233. #define Vtimch2 0x0000FFEA 234. #define Vtimch1 0x0000FFEC 235. #define Vtimch0 0x0000FFEE 236. #define Vrti 0x0000FFF0 237. #define Virq 0x0000FFF2 238. #define Vxirq 0x0000FFF4 239. #define Vswi 0x0000FFF6 240. #define Vtrap 0x0000FFF8 241. #define Vcop 0x0000FFFA 242. #define Vclkmon 0x0000FFFC。
飞思卡尔8位单片机MC9S08第6章 通用IO与第一个汇编程序
(4)主程序
主程序一般包括初始化与主循环两大部分。初始化包括堆栈初始化、 系统初始化、内存变量初始化、I/O端口初始化、中断初始化等。主循 环是程序的工作循环,根据实际需要安排程序段,但一般不宜过长, 建议不要超过200行,具体功能可通过调用子程序来实现,或由中断 程序实现。不带操作系统的MCU程序总有一个主循环,表示程序周而 复始地执行。
6.2 汇编程序编程框架
(3)内存变量
如果程序中使用到内存变量,需在此定义。实际上,这里是对内 存变量的声明,通常称为“开辟内存变量”,内存变量的初始化在主 程序开始部分完成。第一个内存变量需用“ORG”语句定位,随后, 按地址从小到大顺序存放。每个内存变量都有固定的内存地址。借用 C语言术语,这里所开辟的所有内存变量都是“全局变量”。对应于C 语言中的“局部变量”将在讲解子程序规范时说明。
第六章 通用I/O与第一个汇编程序
主要内容
MC68HC908GP32的普通I/O 汇编程序编程框架 08汇编语言编译过程所涉及的文件 SD-HC08嵌入式MCU在线编程集成开发系统
6.1 MC68HC908GP32的普通I/O
所谓普通I/O,即基本的输入/输出,有时也称为并行I/O。作为普 通输入引脚,MCU内部程序可以读取该引脚,知道该引脚是“1”(高 电平)或“0”(低电平),即开关量输入。作为普通输出引脚,MCU 内部程序向该引脚输出“1”(高电平)或“0”(低电平),即开关量 输出。MC68HC908GP32单片机有5个普通I/O口,分别是A口、B口、 C口、D口、E口。它们中的大部分具有双功能,本节仅讨论它们作为 普通I/O功能时的编程方法。
6.1 MC68HC908GP32的普通I/O
① C口数据方向寄存器(Data Direction Register C,DDRC) C口数据方向寄存器(DDRC)的地址是:$0006,由于对应引脚只 有7根,最高位没有意义。DDRC的第6~0位分别记为DDRC6~DDRC0, 这些位分别控制着C口引脚PTC6~PTC0是输入还是输出,含义参考A口 说明。复位时DDRC为$00。 ② C口数据寄存器(Port C Data Register,PTC) C口数据寄存器(PTC)的地址是:$0002,PTC的第6~0位分别记 为PTC6~PTC0。含义请类比A口、B口的相应说明。 ③ C口上拉电阻允许寄存器(Port C Input Pullup Enable Register,PTCPUE) C口上拉电阻允许寄存器(PTCPUE)的地址是:$000E。PTCPUE 的第6~0位分别记为PTCPUE6~PTAPUE0。含义请类比A口的相应说明。
飞思卡尔单片机教学课件
THANKS
具体实现方法:首先需要将LED灯连接到单片机的某个I/O端口上,然后在程序 中配置该I/O端口的输出模式,通过循环语句控制LED灯的亮灭状态,从而实现 LED闪烁的效果。
按键输入程序
按键输入程序是单片机编程中常见的应用之一,通过编实现方法:首先需要将按键连接到单片机的某个I/O端口 上,然后在程序中配置该I/O端口的输入模式,通过检测该 I/O端口的电平变化来判断按键是否被按下,从而实现按键输 入的功能。
随着物联网和嵌入式系统 的发展,对单片机的功耗 要求越来越高,低功耗设 计成为未来的重要趋势。
多核处理器
为了提高处理能力和效率, 单片机将向多核处理器方 向发展,实现更复杂的功 能和更高的性能。
无线连接
无线连接技术的发展,使 得单片机能够更好地与外 部设备进行通信和控制, 扩展了应用范围。
飞思卡尔单片机的未来
IAR Embedded Workbench: 另一款流行的单片机开发软件,
提供丰富的工具链。
MPLAB X IDE:适用于XC8和 XC16系列单片机的开发环境,
由Microchip公司出品。
03 飞思卡尔单片机编程实 践
LED闪烁程序
LED闪烁程序是单片机编程的基础实践之一,通过编写程序控制LED灯的亮灭, 可以帮助学生理解单片机的I/O端口操作和程序执行流程。
更高效的生产工艺
更智能的算法支持
随着半导体技术的不断发展,飞思卡 尔单片机的生产工艺将更加高效,性 能和集成度更高。
随着人工智能和机器学习技术的发展, 飞思卡尔单片机将集成更智能的算法, 实现更高级的功能和应用。
更丰富的外设接口
为了满足各种应用需求,飞思卡尔单 片机将提供更丰富的外设接口,如 USB、HDMI等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二.查询传送方式(条件传送方式)
查询(读状态端口)— 等待(准备好) — 数据传送
例1.输入某8位A/D转换器的转换结果。设A/D的数据线 接到PTB口,“转换结束”信号接到PTA0(1表示转换 结束),“启动A/D”信号接到PTA1(从0→1为启动) BCLR 1,PTAD BSET 1, PTAD LDA PTBD ; PTA1清0 ;启动A/D ;读A/D
3、中断处理 、 (1)、保护现场 、
SP基准地址 基准地址=0x00ff+所有定义变量所占的字节数。 基准地址 所有定义变量所占的字节数。 栈底地址不能超出RAM的末地址 的末地址0x025f。 栈底地址不能超出 的末地址 。
3、中断处理 、
(2)关中断 ) (3)查找中断源转向相应的中断服务程序。 )查找中断源转向相应的中断服务程序。 (4)关闭中断。使恢复现场的工作不受干扰。 )关闭中断。使恢复现场的工作不受干扰。 (5)恢复现场。 )恢复现场。
三、直接存储器存储(DMA)方式 直接存储器存储( )
外设
存储器
不经过CPU,由DMA控制器控制三总线 , 不经过 控制器控制三总线
特点:传送数据量大, 特点:传送数据量大,外设速度高
四、中断
中断: 中断:计算机暂时停止原程 序的执行,转而为外设服务, 序的执行,转而为外设服务, 并在服务完成后自动返回原 程序
三、中断源概述
中断号
低 23
入口地址 0xFFD0:FFD1 0xFFD6:FFD7 0xFFD8:FFD9 0xFFDA:FFDB 0xFFDC:FFDD 0xFFDE:FFDF 0xFFE0:FFE1 0xFFE2:FFE3 0xFFE4:FFE5 0xFFE6:FFE7 0xFFF0:FFF1 0xFFF2:FFF3 0xFFF4:FFF5 0xFFF8:FFF9 0xFFFA:FFFB 0xFFFC:FFFD 0xFFFE:FFFF
SPIC1 MTIMSC TPMSC
TPMC1SC TPMC0SC
MTIM TOF TOF CH1F CH0F LVDF IRQF SWI指令
TOIE TOIE CH1IE CHI0IE LVDIE IRQIE -
SPMSC1 IRQSC
高
2 1 0
COP,LVD,RST,POR,非法指令等。
6.3 中断应用
void delay(unsigned int ms) { unsigned int i; unsigned int j; for(j= 0;j<ms;j++) { for(i = 0;i<200; i++){ } } }
WAIT: BRCLR 0,PTAD, WAIT ;查询
例2.向打印机输出一个‘C’字符。打印机数据线接PTB口,“忙” 信号接到PTA1(1表示忙),“写”信号接到PTA2(0→1为写入) LDA #’C’ WAIT: BRSET 1,PTAD, WAIT STA PTBD BCLR 2,PTAD BSET 2, PTAD ;发“写”脉冲 *当外设的准备时间为已知时,也可用延时代替查询。 如已知A/D转换时间最大为1ms,则读A/D的程序中可用BSR D1ms(延迟1ms子程)代替WAIT:BRSET 1,PTAD, WAIT 查询式传送的优点:通用性强,硬件结构简单。 缺点:查询时占用CPU,效率低。 ;‘C’→A ;查询 ;‘C’→PTB口
第6章 中断系统 章
6.1 输入/输出控制方式 输入/ 1、无条件传送方式 、 2、条件传送方式 、 3、DMA方式 、 方式 4、中断控制方式 6.2 中断机制 1、中断源及中断矢量 、 2、中断控制及相关寄存器 、 6.3 键盘中断 6.4 其他
§6.1 微机的输入/输出方式
CPU与外设的信息交换: 与外设的信息交换: 与外设的信息交换 数据、状态、 数据、状态、控制 CPU与外设的信息交换方式: 与外设的信息交换方式: 与外设的信息交换方式 无条件传送方式 查询传送方式 直接存储器存取( 直接存储器存取(DMA)方式 ) 中断传送
一、中断处理过程 中断返回
1、中断请求 、 (1). 有中断请求 (2). 条件状态寄存器中I=0 条件状态寄存器中 (3). 提中断申请的中断源未被屏蔽 2、中断响应 、 (1).当前指令结束 当前指令结束 (2). I自动置 。 自动置1。 自动置
3〉添加中断服务子程序、延时子程序 〉添加中断服务子程序、
interrupt 2 void IRQ_ISR() { unsigned char i; for(i=0;i<200;i++){;} //延时,去抖动 延时, 延时 while(!PTAD_PTAD5){;} //等待按键释放 等待按键释放 PTBD_PTBD6 = 0; delay(500); PTBD_PTBD6 = 1; delay(500); PTBD_PTBD6 = 0; delay(500); PTBD_PTBD6 = 1; //LED亮 亮 //延时 延时 //LED灭 灭 //亮、灭两次 亮
模块 系统 ADC KBI IIC SCI SCI SCI SPI TPM TPM TPM 系统 IRQ CPU 系统
标记、状态位 RTIF COCO KBF IICIF TDRE、TC IDLE、RDRF OR,NF,FE,PF
SPIF,MODF,SPTEF
允许位 RTIE ACIE AIEN KBIE
主 中断 程 中 序 断 服 务 断 继 序 续 执 行 主 程 返 回 主 程 序 程
中断
:
中断功
的
序
6.2
中断技术的功能特点: 中断技术的功能特点:
中断机制
⑴.分时操作:CPU与外设可各自工作,提高CPU的效率。 分时操作:CPU与外设可各自工作,提高CPU的效率。 与外设可各自工作 CPU的效率 ⑵.实时处理:可及时响应外设要求的服务。 实时处理:可及时响应外设要求的服务。 ⑶.故障处理:可及时处理各种软硬件故障。 故障处理:可及时处理各种软硬件故障。
一.无条件传送方式: 无条件传送方式:
外设在任何时刻均处于“准备好”的状态, 外设在任何时刻均处于“准备好”的状态,CPU可随时用 可随时用 指令读写外设。 指令读写外设。 输入——读,输出——写 读 输出 输入 写 例1.从PTB端口输入8个开关S0-S7的状态: LDA PTBD (LDA $0002) 例2.用PTB端口控制8个LED灯的点亮(低电平点亮)。 MOV #$0F, PTBD; 点亮高4位LED
寄存器 SRTISC ACMPSC ADCSC1 KBISC
20
19 18
ACMP ACF
1〉 优 先 中 级 断 入 口
17 16 15 14 13 12 7 6 5 3
IICIE IICC,IICS TIE、TCIE SCIC2 ILIE、RIE SCIS1 ORIE…… SCIC3
SPIE,SPTIE
(6)开中断 )
二、中断识别和中断优先级
1.中断优先权 优先权排队:多个中断源同时提中断时, 优先权排队:多个中断源同时提中断时,按其优先权的高 低,优先响应高级中断。 优先响应高级中断。 查询中断:CPU接到中断申请时, 查询中断:CPU接到中断申请时,用指令逐个查询各中断 接到中断申请时 源(优先级高的先被查询)按顺序服务。 优先级高的先被查询)按顺序服务。 矢量中断: 响应中断后, 矢量中断:CPU响应中断后,要求中断源提供一个地址信 响应中断后 页表6-1 息,该地址信息称为中断向量(中断矢量)。82页表 该地址信息称为中断向量(中断矢量) 页表
IRQ管脚的使用 管脚的使用——中断应用范例(1) 中断应用范例( ) 管脚的使用 中断应用范例
IRQSC (0x000F) 0F)
6 IRQPDD 4 IRQPE 3 IRQF 2 IRQACK
内部上拉电阻使能控制位,必须 该位才有意义。 内部上拉电阻使能控制位,必须IRQPE=1该位才有意义。 该位才有意义 0-上拉允许; 1-上拉禁止,可使用外部上拉。 上拉允许; 上拉禁止,可使用外部上拉。 上拉允许 置位该位使管脚当IRQ用。 用 置位该位使管脚当 IRQ事件标志位 该只读位为“1”时表示检测到 事件标志位—该只读位为 时表示检测到IRQ事件。 事件。 事件标志位 该只读位为“ 时表示检测到 事件 IRQ应答位 给这个只写位写“1”清除 应答位—给这个只写位写 清除IRQF,如果中断模式选择的是 应答位 给这个只写位写“ 清除 , 边沿和电平” 管脚保持低电平时,写该位也 “边沿和电平” (即IRQMOD=1),当IRQ管脚保持低电平时 写该位也 当 管脚保持低电平时 不能清除IRQF。 不能清除 。 IRQ 中断使能 给该位写“1”将允许 中断使能—给该位写 给该位写“ 将允许 将允许IRQF=1时产生硬件中断,该位写 时产生硬件中断, 时产生硬件中断 “0”时,只能采用查询的方式。 时 只能采用查询的方式。 IRQ触发模式 即选择 “边沿”触发或者“边沿和电平” 触发。 触发模式—即选择 边沿”触发或者“边沿和电平” 触发。 触发模式 0-IRQ事件只在下降沿触发; 1-IRQ事件在下降沿和低电平都能触发。 事件只在下降沿触发; 事件在下降沿和低电平都能触发。 事件只在下降沿触发 事件在下降沿和低电平都能触发
1 IRQIE
0 IRQMOD
IRQ管脚的使用,结合开发板,采用 语言编程。 管脚的使用,结合开发板 采用 语言编程。 采用C语言编程 管脚的使用 1〉新建一个c工程; 〉新建一个 工程; 工程 2〉在打开中断允许之前添加 行初始化: 行初始化: 〉在打开中断允许之前添加4行初始化 SOPT1 = 0x02; IRQSC = 0x16; PTBDD = 0xFF; PTBD = 0xFF; EnableInterrupts; // 禁止 COP、STOP and RST,45页 、 , 页 // 允许 允许IRQ管脚,允许 管脚, 中断, 管脚 允许IRQ中断,下降沿触发 中断 // PTB输出 输出 // 关闭 关闭LED /* enable interrupts */