找回密码
 立即注册
查看: 343|回复: 2

【官网例子分析系列】例子06--中断

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:225
  • 最近打卡:2025-05-08 04:33:05

79

主题

631

回帖

1152

积分

金牌会员

积分
1152
发表于 2024-5-5 01:06:29 | 显示全部楼层 |阅读模式

注意事项:
       1.对于基本的IO相关概念可以看 前5集。

--------------------------------------------------------------------------------------
概念介绍:

IE中断使能寄存器
    EA:总中断允许控制位。EA 的作用是使中断允许形成多级控制。即各中断源首先受 EA 控制;其次还受各中断源自己的中断允许控制位控制。
        0:CPU 屏蔽所有的中断申请
        1:CPU 开放中断
    ELVD:低压检测中断允许位。
        0:禁止低压检测中断
        1:允许低压检测中断
    EADC:A/D 转换中断允许位。
        0:禁止 A/D 转换中断
        1:允许 A/D 转换中断
    ESn:串行口 n 中断允许位。
        0:禁止串行口 1 中断
        1:允许串行口 1 中断
    ETn:定时/计数器 Tn 的溢出中断允许位。
        0:禁止 T1 中断
        1:允许 T1 中断
    EXn:外部中断 n 中断允许位。
        0:禁止 INT1 中断
        1:允许 INT1 中断

IE2中断使能寄存器
    EUSB:USB 中断允许位。
        0:禁止 USB 中断
        1:允许 USB 中断
    ESPI:SPI 中断允许位。
        0:禁止 SPI 中断
        1:允许 SPI 中断
    ESn:串行口 n 中断允许位。
        0:禁止串行口 1 中断
        1:允许串行口 1 中断
    ETn:定时/计数器 Tn 的溢出中断允许位。
        0:禁止 T1 中断
        1:允许 T1 中断

TCON定时器控制寄存器
    TFn:定时器n溢出中断标志。中断服务程序中,硬件自动清零。
    IEn:外部中断n中断请求标志。中断服务程序中,硬件自动清零。
    TRn:
    ITn:

IP中断优先级控制寄存器
    PLVD:低压检测中断优先级控制位
        00:LVD 中断优先级为 0 级(最低级) 01:LVD 中断优先级为 1 级(较低级)
        10:LVD 中断优先级为 2 级(较高级) 11:LVD 中断优先级为 3 级(最高级)
    PADC: 中断优先级控制位
        00:ADC 中断优先级为 0 级(最低级) 01:ADC 中断优先级为 1 级(较低级)
        10:ADC 中断优先级为 2 级(较高级) 11:ADC 中断优先级为 3 级(最高级)
    PSn:串口n中断优先级控制位
        00:串口n 中断优先级为 0 级(最低级) 01:串口n 中断优先级为 1 级(较低级)
        10:串口n 中断优先级为 2 级(较高级) 11:串口n 中断优先级为 3 级(最高级)
    PTn:定时器1中断优先级控制位
        00:定时器n 中断优先级为 0 级(最低级) 01:定时器n 中断优先级为 1 级(较低级)
        10:定时器n 中断优先级为 2 级(较高级) 11:定时器n 中断优先级为 3 级(最高级)
    PXn:外部中断1中断优先级控制位
        00:INTn 中断优先级为 0 级(最低级) 01:INTn 中断优先级为 1 级(较低级)
        10:INTn 中断优先级为 2 级(较高级) 11:INTn 中断优先级为 3 级(最高级)

IP2中断优先级控制寄存器
    PSPI:SPI中断优先级控制位
        00:SPI 中断优先级为 0 级(最低级) 01:SPI 中断优先级为 1 级(较低级)
        10:SPI 中断优先级为 2 级(较高级) 11:SPI 中断优先级为 3 级(最高级)
    PPWMn:高级PWMn中断优先级控制位
        00:高级 PWMn 中断优先级为 0 级(最低级) 01:高级 PWMn 中断优先级为 1 级(较低级)
        10:高级 PWMn 中断优先级为 2 级(较高级) 11:高级 PWMn 中断优先级为 3 级(最高级)
    PCMP:比较器中断优先级控制位
        00:CMP 中断优先级为 0 级(最低级) 01:CMP 中断优先级为 1 级(较低级)
        10:CMP 中断优先级为 2 级(较高级) 11:CMP 中断优先级为 3 级(最高级)
    PI2C:I2C中断优先级控制位
        00:I2C 中断优先级为 0 级(最低级) 01:I2C 中断优先级为 1 级(较低级)
        10:I2C 中断优先级为 2 级(较高级) 11:I2C 中断优先级为 3 级(最高级)
    PUSB:USB中断优先级控制位
        00:USB 中断优先级为 0 级(最低级) 01:USB 中断优先级为 1 级(较低级)
        10:USB 中断优先级为 2 级(较高级) 11:USB 中断优先级为 3 级(最高级)

IP3中断优先级控制寄存器
    PRTC:RTC中断优先级控制位
        00:RTC 中断优先级为 0 级(最低级) 01:RTC 中断优先级为 1 级(较低级)
        10:RTC 中断优先级为 2 级(较高级) 11:RTC 中断优先级为 3 级(最高级)
    PI2S:I2S中断优先级控制位
        00:I2S 中断优先级为 0 级(最低级) 01:I2S 中断优先级为 1 级(较低级)
        10:I2S 中断优先级为 2 级(较高级) 11:I2S 中断优先级为 3 级(最高级)

ET0 : 中断相关寄存器 --> IE(中断允许寄存器)           --> ET0
PT0 : 中断相关寄存器 --> IP(中断优先级控制寄存器) --> PT0
TMOD: 特殊功能寄存器列表 --> TMOD(定时器模式寄存器)  --> GATE | C/T | M1 | M0 | GATE | C/T | M1 | M0
T0_CT: 定时器 0/1 模式寄存器(TMOD)--> T0_CT
T0CLKO: 特殊功能寄存器列表 --> INTCLKO(中断与时钟输出控制寄存器)  --> T0CLKO (定时器 0时钟分频输出)
T0x12: 定时器的相关寄存器 --> AUXR(辅助寄存器1)  -->  T0x12
    T0x12:定时器0速度控制位
        0:12T 模式,即 CPU 时钟 12 分频( FOSC/12 FOSC/12 FOSC/12)
        1:1T 模式,即 CPU 时钟不分频( FOSC/1 FOSC/1 )

TH0: 定时器的相关寄存器 --> TH0(定时器 0高 8位寄存器)
TL0: 定时器的相关寄存器 --> TL0(定时器 0低 8位寄存器)

---------------------------------------------------------------------------------------
例子分析:

    WTST = 0;  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
    EAXFR = 1; //扩展寄存器(XFR)访问使能
    CKCON = 0; //提高访问XRAM速度

    P0M1 = 0x30;   P0M0 = 0x30;   //设置P0.4、P0.5为漏极开路(实验箱加了上拉电阻到3.3V)
    P1M1 = 0x30;   P1M0 = 0x30;   //设置P1.4、P1.5为漏极开路(实验箱加了上拉电阻到3.3V)
    P2M1 = 0x3c;   P2M0 = 0x3c;   //设置P2.2~P2.5为漏极开路(实验箱加了上拉电阻到3.3V)
    P3M1 = 0x50;   P3M0 = 0x50;   //设置P3.4、P3.6为漏极开路(实验箱加了上拉电阻到3.3V)
    P4M1 = 0x3c;   P4M0 = 0x3c;   //设置P4.2~P4.5为漏极开路(实验箱加了上拉电阻到3.3V)
    P5M1 = 0x0c;   P5M0 = 0x0c;   //设置P5.2、P5.3为漏极开路(实验箱加了上拉电阻到3.3V)
    P6M1 = 0xff;   P6M0 = 0xff;   //设置为漏极开路(实验箱加了上拉电阻到3.3V)
    P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口

    display_index = 0;
    for(i=0; i<8; i++)  LED8[i] = DIS_BLACK;    //全部消隐
   
    INT0_cnt = 0;
    INT1_cnt = 0;

    /*
    TCON定时器控制寄存器
        TFn:定时器n溢出中断标志。中断服务程序中,硬件自动清零。
        IEn:外部中断n中断请求标志。中断服务程序中,硬件自动清零。
        TRn:
        ITn:
    */
    IE1  = 0;   //外中断1标志位         见TCON定时器控制寄存器
    IE0  = 0;   //外中断0标志位
    EX1 = 1;    //INT1 Enable
    EX0 = 1;    //INT0 Enable

    IT0 = 1;    //INT0 下降沿中断       见TCON定时器控制寄存器
//  IT0 = 0;    //INT0 上升,下降沿中断  
    IT1 = 1;    //INT1 下降沿中断      
//  IT1 = 0;    //INT1 上升,下降沿中断  

    //INT2, INT3, INT4 实验板上没有引出测试按键,供需要时参考使用
    /*IE中断使能寄存器
    ESn:串行口 n 中断允许位。
        0:禁止串行口 1 中断
        1:允许串行口 1 中断
    ETn:定时/计数器 Tn 的溢出中断允许位。
        0:禁止 T1 中断
        1:允许 T1 中断
    EXn:外部中断 n 中断允许位。
        0:禁止 INT1 中断
        1:允许 INT1 中断 */
    EX2 = 1;    //使能 INT2 下降沿中断  见IE中断使能寄存器
    EX3 = 1;    //使能 INT3 下降沿中断
    EX4 = 1;    //使能 INT4 下降沿中断

    EA = 1;     //允许总中断

    while(1)
    {
        delay_ms(1);    //延时1ms
        DisplayScan();
    }


回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:225
  • 最近打卡:2025-05-08 04:33:05

79

主题

631

回帖

1152

积分

金牌会员

积分
1152
发表于 2024-5-5 01:32:33 | 显示全部楼层
文档里对 TCON 定时器控制寄存器 的说明不全, TRn和ITn没有说明。

    TFn:定时器n溢出中断标志。中断服务程序中,硬件自动清零。
    IEn:外部中断n中断请求标志。中断服务程序中,硬件自动清零。
    TRn:
    ITn:
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:176
  • 最近打卡:2025-02-19 17:24:49

15

主题

265

回帖

1387

积分

金牌会员

积分
1387
发表于 2024-11-30 22:09:51 | 显示全部楼层
这个使能做得好
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-9 02:06 , Processed in 0.104509 second(s), 60 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表