MC9S12G128 外部中断

发布者:幸福时光最新更新时间:2021-08-11 来源: eefocus关键字:外部中断  中断方式 手机看文章 扫描二维码
随时随地手机看文章

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

**    程序名:MC9S12G128 按键检测(中断方式)

**    参  数:无

**    功  能:当按下按键后LED关闭0.1秒  

**    注  意:LED位于G128 PD0口,按键位于G128 PP0口

**    作  者:赵露露

**    版  本:v1.0

**    时  间:2012.5.7   

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

#include             /* common defines and macros */

#include "derivative.h"       /* derivative-specific definitions */

 

 

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

**    函数名: delayms()

**    参  数:xms

**    功  能:在16MHz总线时钟下大约延时xms毫秒  

**    注  意:    

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

void delayms(uint xms)

{

  uint z,j;

for(z=xms;z>0;z--)

    for(j=1600;j>0;j--);

}

//中断函数

#pragma CODE_SEG __NEAR_SEG NON_BANKED//将中断函数置于非分页区内,地址空间超过了16位的寻址空间64K,但是它的中断向量地址只有16位,所以中断程序要执行,就得在它16位的寻址空间也即非分页区内,这就是为什么会将S12的中断函数置于非分页区的原因。

interrupt 56 void IRQ_ISR(void)       //56为PP口中断向量号,它是由文件"mc9s12g128.h"中定义的宏,可在这个文件中搜索"VectorNumber"查找各个中断的中断向量号

  DisableInterrupts;                  //关闭中断                  

  PIFP_PIFP0 = 1;                     //清除PP0的中断标志位

  PORTD_PD0 = 1;                      //关闭LED

  delayms(100);                       //延时以至于可以观察到效果

  EnableInterrupts;                   //打开中断

}

#pragma CODE_SEG DEFAULT              //将后续代码置于默认区域内

 

void main(void) 

{

  

  DDRD = 0xFF;                //设置PD(0-7)方向为输出

  PORTD = 0xFF;               //设置PD(0-7)输出高电平

  

  DDRP_DDRP0 = 0;             //设置PP0口方向为输入

  PERP_PERP0 = 1;             //设置PP0口拉设备启用

  PPSP_PPSP0 = 1;             //打开PP0口上拉

  PIEP_PIEP0 = 1;             //设置PP0口中断使能

                              

  EnableInterrupts;           //打开中断

 while(1)

  {

    PORTD_PD0 = 0;            //打开LED

  }            

 

}

注:G128可作为中断口的有PP,PJ,AD,其使用方法与其类似,程序中使用的寄存器介绍如下:




附:G128中断向量号

#define VectorNumber_Vsi                  63U

#define VectorNumber_Vportad             62U

#define VectorNumber_Vatdcompare         61U

#define VectorNumber_VReserved60         60U

#define VectorNumber_Vapi               59U

#define VectorNumber_Vlvi               58U

#define VectorNumber_VReserved57         57U

#define VectorNumber_Vportp             56U

#define VectorNumber_VReserved55        55U

#define VectorNumber_VReserved54        54U

#define VectorNumber_VReserved53        53U

#define VectorNumber_VReserved52        52U

#define VectorNumber_VReserved51        51U

#define VectorNumber_VReserved50        50U

#define VectorNumber_VReserved49        49U

#define VectorNumber_VReserved48        48U

#define VectorNumber_VReserved47        47U

#define VectorNumber_VReserved46        46U

#define VectorNumber_VReserved45        45U

#define VectorNumber_VReserved44        44U

#define VectorNumber_VReserved43        43U

#define VectorNumber_VReserved42        42U

#define VectorNumber_VReserved41        41U

#define VectorNumber_VReserved40        40U

#define VectorNumber_Vcantx             39U

#define VectorNumber_Vcanrx             38U

#define VectorNumber_Vcanerr             37U

#define VectorNumber_Vcanwkup           36U

#define VectorNumber_Vflash             35U

#define VectorNumber_Vflashfd           34U

#define VectorNumber_Vspi2               33U

#define VectorNumber_Vspi1              32U

#define VectorNumber_VReserved31         31U

#define VectorNumber_Vsci2               30U

#define VectorNumber_VReserved29         29U

#define VectorNumber_Vcpmuplllck         28U

#define VectorNumber_Vcpmuocsns         27U

#define VectorNumber_VReserved26         26U

#define VectorNumber_VReserved25        25U

#define VectorNumber_Vportj             24U

#define VectorNumber_VReserved23         23U

#define VectorNumber_Vatd               22U

#define VectorNumber_Vsci1               21U

#define VectorNumber_Vsci0               20U

#define VectorNumber_Vspi0               19U

#define VectorNumber_Vtimpaie           18U

#define VectorNumber_Vtimpaaovf         17U

#define VectorNumber_Vtimovf             16U

#define VectorNumber_Vtimch7             15U

#define VectorNumber_Vtimch6             14U

#define VectorNumber_Vtimch5             13U

#define VectorNumber_Vtimch4             12U

#define VectorNumber_Vtimch3             11U

#define VectorNumber_Vtimch2             10U

#define VectorNumber_Vtimch1             9U

#define VectorNumber_Vtimch0             8U

#define VectorNumber_Vrti               7U

#define VectorNumber_Virq               6U

#define VectorNumber_Vxirq               5U

#define VectorNumber_Vswi               4U

#define VectorNumber_Vtrap               3U

#define VectorNumber_Vcop               2U

#define VectorNumber_Vclkmon             1U

#define VectorNumber_Vreset             0U

关键字:外部中断  中断方式 引用地址:MC9S12G128 外部中断

上一篇:MC9S12G128 PLL锁相环
下一篇:MC9S12XDP512串口使用笔记(中断方式)

推荐阅读最新更新时间:2024-11-10 16:05

STM32裸机开发—外部中断
a. 初始化IO口作为输入 这一步需要设置你要作为外部中断输入的IO口的状态,可以设置为上拉/下拉输入,也可以设置为浮空输入,但浮空的时候外部硬件一定要上拉或下拉。否则可能导致中断不停地被触发。在干扰较大的地方,就算使用了上拉/下拉,也建议在外部硬件上设置上拉/下拉,这样可以在一定程度上防止外部干扰带来的影响。 *RCC_APB2ENR=0x00000019;//打开portb和portc的时钟和复用时钟 *PORTA_CRL=0x44444844;//设置PA2口为上拉/下拉输入模式 由于还需要驱动液晶屏所以同时打开了PORTB和PORTC的时钟。 b. 开启IO口复用时钟,设置IO口与中断线的映射关系
[单片机]
STM32裸机开发—<font color='red'>外部中断</font>
STC8单片机OLED通过SPI硬件中断方式驱动(下)
到这里基本就写完了,我们来看看修改例程中的代码,先看看中景园给的 void OLED_WR_Byte(uint8_t dat, uint8_t cmd) { register uint8_t i = 0; OLED_DC = cmd; for(;i 8;i++) { OLED_SCL_Clr(); if(dat&0x80) { OLED_SDA_Set(); } else { OLED_SDA_Clr(); } OLED_SCL_Set(); dat =1; } OLED_CS_Set(); OLED_DC_Set
[单片机]
定时器0和外部中断0的嵌套,分别实现流水灯和按键
#include STC12C5A60S2.h typedef unsigned char u8; typedef enum { Tim0_L_Int0_H = 1, Tim0_L_Int0_L, Tim0_H_Int0_L, }EnumCase; sbit LED1 = P2 ^ 4; sbit LED2 = P2 ^ 5; sbit LED3 = P2 ^ 6; sbit LED4 = P2 ^ 7; sbit BEEP = P1 ^ 0; sbit KEY1 = P3 ^ 2; sbit KEY2 = P3 ^ 4; //----------------------------
[单片机]
stm32f407之外部中断使用流程
1.初始化 1.初始化相关结构体 NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; 2.打开SYSCFG SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0); 3.配置EXTI EXTI_InitStructure.EXTI_Line = EXTI_Line0; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrup
[单片机]
51外部中断测试
#include #include #define GPIO_LED P2 //外部中断的IO sbit K3=P3^2; sbit K4=P3^3; void IntConfiguration(); void Delay(unsigned int n); unsigned char KeyValue=0; void main(void) { GPIO_LED=0Xfe; IntConfiguration(); while(1) { if(KeyValue) GPIO_LED=_crol_(GPIO_LED,1); else GPIO_LED=_cror_(GPIO_LED,1); Delay(2000); } } voi
[单片机]
stm32 外部中断库函数实现全程分析
前题:   闭门造车,两周了,经过各种的思考和求问,反复阅读了 M3权威指南 和 stm32不完全手册 的相关章节,以及开发板厂商的实验例程,对stm32这块中断终有所悟,是以记之。   至于中断的什么优先级,什么优先级分组,使能之类的原理,就不再赘述。这里主要是记载以下如何使用中断,以及中断配置函数的实现过程,其中并叙述我曾经的疑惑和感悟。   我的开发板里的中断例程是用按键控制一个灯亮和灭的两个状态。   这个例程的实现过程如下描述: 第一步,将一个I/O口配置成中断输入模式。      这里需要注意的是,GPIO本身是没有中断功能神马的。如果硬要使他产生中断输入方式,就得将相应的端口映射到相应的外部事件上去。而
[单片机]
stm32 <font color='red'>外部中断</font>库函数实现全程分析
51单片机实验——按键外部中断实现四进制计数器
1.实验题目: 设计一个通过触发外部中断INT1实现的在0-3之间计数(四进制)的计数器,并通过P1.6和P1.7端口上的LED,显示计数的值。 2.KEIL代码 #include reg51.h sbit P16=P1^6; sbit P17=P1^7; void INT1_Init();//声明中断初始化函数 void main() { INT1_Init();//调用中断初始化函数 while(1); } void INT1_Init() //编写中断初始化函数 { EA=1;//开启中断总开关 EX1=1;//开启外部中断1 IT1=1;//设定为下降沿触发 IE1=0;//清
[单片机]
51单片机实验——按键<font color='red'>外部中断</font>实现四进制计数器
51单片机入门——定时器与外部中断
1. 定时器 1.1. 定时器的初步认识 在认识定时器之前我们先了解两个基本概念。 时钟周期:时钟周期 T 是时序中最小的时间单位,具体计算方法就是 1 / 时钟源频率,一般情况下单片机的晶振都是 11.0592 MHz 的,对于这个单片机系统来说时钟周期就是 1 / 11059200 秒。 机器周期:我们的单片机完成一个操作的最短的时间。机器周期主要针对于汇编语言,在汇编语言下程序的每一条语句所使用的时间都是机器语言的整数倍,而且语句占用的时间是可以计算出来的,而 C 语言一条语句所占用的时间是不确定的,受诸多因数的影响。51 单片机系列,在其标准架构下一个机器语言是 12 个时钟周期,也就是 12 / 11059200
[单片机]
51单片机入门——定时器与<font color='red'>外部中断</font>
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved