STC8H系列—5.外部中断INT的控制教程

一、概述:

    STC8H的中断系统相对于传统的的C51单片机中断系统最大的区别的中断源增多,通常传统的c51系统中断源的数量一般小于32个,而STC8H的中断源编号到达了59个,以至于Keil编译过程出错,好在STC公司实力强通过修改补丁解决了这个问题。本教程以外部中断的INT0和INT3为例,实现中断的触发,中断优先级的改变等功能,stc8h的INT0、INT1与传统的c51相比较,放弃了低电平触发,增加了边缘触发即每个脉冲触发两次,这个功能的改进与STM32等单片机的外部中断功能相似,在处理计算脉宽上增加了不少的便利。

二、知识链接:

中断结构图

 以INT0为例,IT0=0时边缘触发,IT0=1时下降沿触发,IE0中断触发标志位,手动清除其状态,EX0=1开外部中断,EA=1开总中断,PX0和PX0H用来改变中断响应的优先级,其中组合11则是最高级响应级。

三、实验平台搭建:

   1、MCU:STC-打狗棒系列核心实验板 V2.3

   2、实验板平台:德飞莱LY-51s

   3、硬件连接表:

     K1------>P37    INT3的的入口

      K2------>P20    切换边缘触发与下降沿两种方式

      LED1----->P10   指示灯1,指示int0下降沿

      LED2----->P11   指示灯2,指示int0上升沿

      LED3----->P12   指示灯3,指示int3下降沿

四、测试源代码:

#include <STC8H.h>

#include "intrins.h"

sbit Led1=P0^0;

sbit Led2=P0^1;

sbit Led3=P0^2;

sbit Led4=P0^3;

#define EX3 0x20

#define INT3IF 0x20;

void Delay1ms(unsigned char x);//当主时钟频率为12M,1ms延时为基准

void init_IO();//初始化IO

void init_INT();

void main()

{

      P_SW2 |= 0x80;  //扩展寄存器XFR访问使能

      init_IO();

     init_INT();

   while(1)

    {

       }

}

void init_INT()

{

      //INT0 初始化

   if(P20==1)  //开机时按下K2时切换模式

      IT0=0;//INT0边缘触发

   else

      IT0=1;//INT0下降沿触发

      IE0=0;//清空标志位

      EX0=1;//开启INT0中断

      EA=1;//开总中断

      PX0=1;//PX0提高INT0的优先级

      IPH|=0x01;//设置PX0H=1

  

   //INT3 初始化

      AUXINTIF&=~INT3IF;//清除标志位

      INTCLKO|=  EX3;//开启INT3中断

      EA=1;//总中断

  

     

}

void init_IO()

{

   RSTCFG=0x50;  //开启RST键进入ISP模式

   P0M1 = 0x00;   P0M0 = 0x00;   //设置P0口为准双向口

   P2M1 = 0x00;   P2M0 = 0x00;   //设置P1口为准双向口

   P3M1 = 0x00;   P3M0 = 0x00;   //设置P3口为准双向口

  

}

void Delay1ms(unsigned char x)    //@12.000MHz

{

   unsigned char i, j;

   i = 16;

   j = 147;

   while(x--)

   {

      do

      {

        while (--j);

      } while (--i);

   } 

}

void INT0_isr() interrupt 0//INT0中断入口

{

   if(P32==0)

      Led1=~Led1;

   else

      Led2=~Led2;

}

void INT3_isr() interrupt 11//INT3中断入口,仅能下降沿触发

{

      Led3=~Led3;

}

猜你喜欢

转载自blog.csdn.net/qq_21082985/article/details/132037651