XS128外部H7口J0口中断例程

------------------------------------
Code Warrior 5.0
Target : MC9S12XS128
Crystal: 16.000Mhz
busclock:16.000MHz
pllclock:32.000MHz   
 
使用说明:
H7,J0外部中断演示,分别亮灭PB0和PB2。
============================================*/
#i nclude "derivative.h"
#i nclude <stdio.h>
#i nclude <string.h>  

#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 24 PORTJ_ISR(void)
{        
  PORTB_PB0=~PORTB_PB0;
  PIFJ_PIFJ0=1;   //清除中断标志位
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 25 PORTH_ISR(void)
{
  PORTB_PB2=~PORTB_PB2;
  PIFH_PIFH7=1;   //清除中断标志位       
}
static void Port_Init(void)

    DDRA = 0xff;  //LCD1100,PA0--4,PA67 D1D2
    PORTA= 0x00;  
      
    DDRB = 0xff;  //LED  PTB0--7,
    PORTB= 0xff;  //LEDs on 
  
    DDRE = 0xFF;  //MOTOR CONTROL
    PORTE= 0x00;  //P     
   
    DDRH = 0x00; // PORTH input
    PTIH = 0X00; // KEY,PH0--5
    PERH = 0xff; // PORTH pull up 
    PPSH = 0x00; // Port H Polarity Select Register-falling edge
    PIEH = 0x80; // PORTH interrut disable,
                 // PH7判断奇偶场换场信号
   
    DDRJ = 0X00; // PJ0判断行同步脉冲到达
    //PPSJ = 0x01; // Port J Polarity Select Register-rising EDGE
    PPSJ = 0x00; // Port J Polarity Select Register-falling EDGE  
    PIEJ = 0X01; // VIDEO SYNC INTERRUPT DISABLED,BUT NOT IN MAIN()
    PERJ = 0xff;
   
    DDRM = 0XFF; // motor2的驱动模块MC33886的初始化子程序
    PTIM = 0X01; // EN:PM0=0,operating run;
    PERM = 0xff; // EN:PM0=1,full run;
   
    DDR1AD0=0xF8;
    PT1AD0 =0xFF;
}
void SetBusCLK_32M(void)
{  
    CLKSEL=0X00;    // disengage PLL to system
    PLLCTL_PLLON=1;   // turn on PLL
    SYNR =0x40 | 0x03;  // pllclock=2*osc*(1+SYNR)/(1+REFDV)=64MHz;                     
    REFDV=0xc0 | 0x01;
    POSTDIV=0x00; 
    _asm(nop);          // BUS CLOCK=32M
    _asm(nop);
    while(!(CRGFLG_LOCK==1));   //when pll is steady ,then use it;
    CLKSEL_PLLSEL =1;          //engage PLL to system; 
}
void Dly_ms(int ms)
{
   int ii,jj;
   if (ms<1) ms=1;
   for(ii=0;ii<ms;ii++)
     //for(jj=0;jj<1335;jj++);  //16MHz--1ms
     for(jj=0;jj<2770;jj++);  //32MHz--1ms
     //for(jj=0;jj<4006;jj++);  //48MHz--1ms
     //for(jj=0;jj<5341;jj++);    //64MHz--1ms 
}

//============================MAIN()===========================
void main(void)
{
  /* put your own code here */
  byte i=0;
 
  Port_Init();            // initial board
  SetBusCLK_32M(); 
  PORTB=0XFF;
  EnableInterrupts;
  for(;;)
  {
     Dly_ms(500);
     PORTB_PB1=~PORTB_PB1;
  }
  /* please make sure that you never leave this */
}
 
// ----------------------

转载于:https://www.cnblogs.com/my-life/archive/2012/11/04/2753632.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个基于STM32的外部中断按键例程,用于检测按键输入并触发中断处理程序: ```c #include "stm32f10x.h" void EXTI0_IRQHandler(void) // 定义外部中断0的中断处理程序 { if (EXTI_GetITStatus(EXTI_Line0) != RESET) // 判断是否是按键0触发中断 { // 在这里编写按键0被按下后的处理代码 // ... EXTI_ClearITPendingBit(EXTI_Line0); // 清除中断挂起标志位 } } void GPIO_Configuration(void) // 配置GPIO模式和中断触发方式 { GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); // 使能GPIOA和AFIO时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // 配置PA0为输入模式 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); // 将GPIOA的第0位引脚映射到中断线0 EXTI_InitStructure.EXTI_Line = EXTI_Line0; // 配置中断线0为外部中断 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; // 配置上升沿触发 EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; // 配置外部中断0的中断向量 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00; // 抢占优先级为0 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; // 响应优先级为0 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } int main(void) { GPIO_Configuration(); // 配置GPIO中断触发方式 while (1) { // 在这里编写其他代码 // ... } } ``` 在上面的例程中,我们首先定义了一个名为`EXTI0_IRQHandler()`的中断处理程序,用于检测按键0输入并触发中断。然后,在`GPIO_Configuration()`函数中,我们配置了GPIO模式和中断触发方式。具体来说,我们将PA0引脚配置为输入模式,并将其映射到中断线0。然后,我们将中断线0配置为外部中断,并设置为上升沿触发。最后,我们还配置了外部中断0的中断向量,并将其抢占优先级和响应优先级都设置为0。 在`main()`函数中,我们调用了`GPIO_Configuration()`函数进行GPIO中断触发方式的配置。然后,我们在`while`循环中可以编写其他代码,例如控制LED灯等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值