[通用8051核FLASH系列] 【HC89S003P套件试用】5、外部中断INT2测试

[复制链接]
1115|1
 楼主| tlled 发表于 2019-3-17 17:15 | 显示全部楼层 |阅读模式
本帖最后由 芯圣电子官方QQ 于 2023-7-24 15:04 编辑

    上一篇使用外部中断1做了测试,HC89S003P还有其他14个外部中断可以使用,2-7共用一个中断地址,8-15共用一个中断地址,下面使用INT2来测试下外部中断

    一、手册里相关的寄存器设置

     1.1、芯片引脚
        INT2使用的引脚是P0.2。
    0317-9.png
    1.2、外部中断电平选择寄存器选择
    0317-10.png
    1.3、外部中断2使能
    0317-11.png
    1.4、外部中断标志位,进入中断后要清除此标志位
    0317-12.png

    二、程序部分


  1. //main.c
  2. #define ALLOCATE_EXTERN

  3. #include "config.h"

  4. //系统初始化
  5. void SystemInit(void)
  6. {
  7.         /************************************系统初始化****************************************/
  8.         WDTCCR = 0x00;                                                //关闭看门狗
  9.         while((CLKCON&0x20)!=0x20);                        //等待内部高频RC起振
  10.         CLKSWR = 0x51;                                                //选择内部高频时钟为主时钟,内部高频RC2分频,Fosc=16MHz
  11.         while((CLKSWR&0xC0)!=0x40);                        //等待内部高频切换完成
  12.         CLKDIV = 0x01;                                                //Fosc1分频得到Fcpu,Fcpu=16MHz
  13. }

  14. void main(void)
  15. {
  16. //        uint i;
  17.         SystemInit();                //系统初始化
  18.         Init_Port();                //端口初始化
  19.         //EintInit();                        //外部中断初始化
  20.         INT2_7_Init();        //外部中断2-7初始化
  21.         //CCO_Init();                //CCO输出
  22.         
  23.         while(1)
  24.         {
  25.         }
  26. }


  27. #include "config.h"

  28. //外部中断初始化
  29. void EintInit(void)
  30. {
  31.         //外部中断0设置
  32.         PITS0 =PITS0&0xf3;                                
  33.         PITS0 |=0x04;                                                //INT1下将沿中断
  34.         INT01_PINS = 0x00;                        //INT1选择P01端口                                
  35.         EX1=1;                                                                        //打开INT1中断
  36.         EA = 1;                                                                        //打开总中断
  37. }

  38. //外部中断1入口
  39. void Eint1()interrupt INT1_VECTOR
  40. {
  41.         PINTF0 &= ~0x02;                        //清除INT1中断标志位
  42.         P0_0 =~P0_0;
  43. }


  44. //外部中断2_7中断初始化
  45. void INT2_7_Init(void)
  46. {
  47.         PITS0  &= 0xcf;                                                                        
  48.         PITS0  |= 0x30;                                                                        //INT2上下升沿中断
  49.         PINTE0 |= 0x04;                                                                        //使能INT2
  50.         IE1 |= 0x40;                                                                                //打开INT2-7中断
  51.         EA = 1;                                                                                                        //打开总中断
  52. }

  53. //外部中断2-7入口
  54. void INT2_7() interrupt INT2_7_VECTOR
  55. {
  56.                 if(PINTF0&0x04)
  57.                 {
  58.                         PINTF0 &= ~0x04;                        //清除INT2中断标志位
  59.                         P0_0 =~P0_0;
  60.                 }        
  61. }

    程序源码: HC89S003F4_TEST-INT2.rar (89.12 KB, 下载次数: 6)

    三、执行结果

    P0.2上升和下降沿进入中断,触发LED反转,这里测试了INT2,其他的中断使用和这个方法一样 。



零三翟邢止胃 发表于 2019-3-18 09:44 | 显示全部楼层
赞一个啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

132

主题

701

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部