[STC单片机] 请教,Timer1为何不受TR1控制? IAP15W4K58S4

[复制链接]
120|6
 楼主 | 2018-6-13 11:45 | 显示全部楼层 |阅读模式
本帖最后由 小猪同学 于 2018-6-13 11:53 编辑

Timer0工作在模式3(不可屏蔽中断的16位自动重装模式), 如果同时启用了Timer1的中断,即ET1 =1, 即使TR1=0, Timer1也会启动
我迷失了,附上代码,请大家斧正
#include "stc/stc15.h"

sbit LED0 = P5^2;
sbit LED1 = P5^1;

void Timer0_ISR() interrupt 1 {
    static int times =0;
    if(times>100) {
        TR1=0;
        TR0=0;
    } else {
        times++;
    }
    LED0 = LED0 ? 0: 1;
}

void Timer1_ISR() interrupt 3 {
    LED1 = LED1 ? 0: 1;
}

void main() {

        P5M1=0;
        P5M0=0;                //灌电流驱动
        
        EA = 1;           
        
    TMOD |= 0x03;        //Timer0模式3运行(不可屏蔽16位自动重装)        
    TL0 = 0x00;               
    TH0 = 0x70;   
    ET0 = 1;                //启用Timer0中断
    TR0 = 1;                //启用Timer0
        
    TL1 = 0x00;               
    TH1 = 0x70;   
    ET1 = 1;                //启用Timer1中断
    TR1 = 0;                //禁止Timer1

    while(1);
}
 楼主 | 2018-6-13 11:46 | 显示全部楼层
  芯片出厂序列号 : F5698414533B8C
  单片机型号: IAP15W4K58S4
  固件版本号: 7.3.7T

  在Timer0溢出了100次以后,即便是再次设置TR1=0, Timer1仍然任性执行, 坚强的很
| 2018-6-13 14:50 | 显示全部楼层
标准51是这样的,

T0配置为模式3的时候会占用T1的很多资源,此时T1只能做波特率发生器
 楼主 | 2018-6-13 16:19 | 显示全部楼层
ayb_ice 发表于 2018-6-13 14:50
标准51是这样的,

T0配置为模式3的时候会占用T1的很多资源,此时T1只能做波特率发生器 ...

按照指点,我对比了传统51和STC改良版对模式3的处理, 搞清楚差异了, 谢谢您!
| 2018-6-13 17:18 | 显示全部楼层
那就不要使用模式3(不可屏蔽中断)的方式啊,使用模式0(16位自动重装)。
| 2018-6-13 20:44 | 显示全部楼层
记得传统 51 在 timer0 方式 3 时, 也是占用 TR1 的
 楼主 | 2018-6-13 21:52 | 显示全部楼层
coody 发表于 2018-6-13 17:18
那就不要使用模式3(不可屏蔽中断)的方式啊,使用模式0(16位自动重装)。 ...

在做单元测试,不巧碰到了
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

关闭

热门推荐上一条 /6 下一条

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