/*****************************************************************
** 程序名:MC9S12G128 按键检测(中断方式)
** 参 数:无
** 功 能:当按下按键后LED关闭0.1秒
** 注 意:LED位于G128 PD0口,按键位于G128 PP0口
** 作 者:赵露露
** 版 本:v1.0
** 时 间:2012.5.7
******************************************************************/
#include #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 PLL锁相环
下一篇:MC9S12XDP512串口使用笔记(中断方式)
推荐阅读最新更新时间:2024-11-10 16:05
设计资源 培训 开发板 精华推荐
- LT1765-5,通过最佳电容器连接降低正负 DC/DC 转换器的输出电压纹波
- DS21401C,基于 TC647B PWM 风扇电机控制器的演示板
- 计时,BBS 为 PCF2127AT TCXO 提供微控制器应用
- LM358DMR2G 函数发生器运算放大器的典型应用
- 【物联网】HM开关
- EV-ADUCM320QSPZ,基于 ADuCM320 双芯片堆栈片上系统的开发系统,专为固定波长激光光学模块应用的诊断控制而设计
- LX24132ILQ 32 端口显示器背光 LED 控制器低压 LX24132ILQ 和 LX23108LILQ 的典型应用
- AD9684-500EBZ,基于 AD9684 14 位、500 MSPS、双 ADC、IF 分集接收器的评估板
- DN308F、±5V 模拟放大参考设计
- 电子竞赛基础1