找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1676|回复: 11
收起左侧

STC8G单片机定时器2无法进入,请教一下大家

[复制链接]
ID:706724 发表于 2023-8-17 22:51 | 显示全部楼层 |阅读模式
STC8G定时器2无法进入,一直无法中断,用示波器测试P3^3脚,一直是高电平,实在没弄明白哪里出错了?向大家请教一下,谢谢!

单片机源程序如下:
  1. #include <STC8xxxx.h>
  2. #include <stdio.h>
  3. #define ET2    0x04

  4. bit  TIM_10MS_Flag;        

  5. void main()
  6. {
  7.           P0M0 = 0x00; P0M1 = 0x00;
  8.     P1M0 = 0x00; P1M1 = 0x00;
  9.     P2M0 = 0x00; P2M1 = 0x00;
  10.     P3M0 = 0x00; P3M1 = 0x00;
  11.     P4M0 = 0x00; P4M1 = 0x00;
  12.     P5M0 = 0x00; P5M1 = 0x00;
  13.     P6M0 = 0x00; P6M1 = 0x00;
  14.     P7M0 = 0x00; P7M1 = 0x00;

  15.         AUXR |= 0xFB;                        //定时器时钟12T模式 24MHZ 1MS
  16. //        TMOD &= 0x05;                        //设置定时器模式
  17.         T2L = 0x30;                                //设置定时初始值
  18.         T2H = 0xF8;                                //设置定时初始值
  19.         
  20.         AUXR |= 0x10;                        //定时器2开始计时
  21. //        PCON &=~0x20;
  22.         IE2=ET2;
  23.         EA=1;

  24.         while(1);
  25. }



  26. void Timer2_Isr() interrupt 12
  27. {
  28.         static timcount = 0;
  29.         timcount++;                                       //1ms+1
  30.         if( timcount>=10 )                //如果这个变量大于等于10,10ms计数到达
  31.         {
  32.                 timcount = 0;
  33.                 TIM_10MS_Flag = 1;        //10ms时间到了
  34.                 P33=~P33;
  35.         }
  36. }
复制代码





回复

使用道具 举报

ID:929517 发表于 2023-8-18 02:36 来自手机 | 显示全部楼层
void Timer2_Init(void)                //10毫秒@24.000MHz {         AUXR &= 0xFB;                        //定时器时钟12T模式         T2L = 0xE0;                                //设置定时初始值         T2H = 0xB1;                                //设置定时初始值         AUXR |= 0x10;                        //定时器2开始计时 }
回复

使用道具 举报

ID:929517 发表于 2023-8-18 02:37 来自手机 | 显示全部楼层
你用stc自带的软件算一下
回复

使用道具 举报

ID:929517 发表于 2023-8-18 03:44 来自手机 | 显示全部楼层
这是我在stc isp上自带软件生成的 void Timer2_Init(void)                //10毫秒@24.000MHz {         AUXR &= 0xFB;                        //定时器时钟12T模式         T2L = 0xE0;                                //设置定时初始值         T2H = 0xB1;                                //设置定时初始值         AUXR |= 0x10;                        //定时器2开始计时 }
回复

使用道具 举报

ID:427868 发表于 2023-8-18 06:55 | 显示全部楼层
8脚的STC8G只有定时器0和定时器1,没有定时器2,如果你用的是8脚的,那就不会进入定时器中断了。
回复

使用道具 举报

ID:213173 发表于 2023-8-18 06:58 | 显示全部楼层
void main()
{
        P0M0 = 0x00; P0M1 = 0x00;
        P1M0 = 0x00; P1M1 = 0x00;
        P2M0 = 0x00; P2M1 = 0x00;
        P3M0 = 0x00; P3M1 = 0x00;
        P4M0 = 0x00; P4M1 = 0x00;
        P5M0 = 0x00; P5M1 = 0x00;
        P6M0 = 0x00; P6M1 = 0x00;
        P7M0 = 0x00; P7M1 = 0x00;
       
        AUXR &= 0xFB;                        //定时器时钟12T模式
        T2L = 0x30;                                //设置定时初始值
        T2H = 0xF8;                                //设置定时初始值
        AUXR |= 0x10;                        //定时器2开始计时
       
        IE2=ET2;
        EA=1;
       
        while(1);
}

回复

使用道具 举报

ID:427868 发表于 2023-8-18 09:10 | 显示全部楼层
    刚才看看手册,确实是6楼看的仔细,楼主设置AUXR |= 0xFB,就把AUXR的B3位T2_CT置1,后来的 AUXR |= 0x10也没有更改B3位,意即B3位始终为1,定时器2被设置为计数器模式,不是定时器模式。
回复

使用道具 举报

ID:706724 发表于 2023-8-18 12:03 | 显示全部楼层
刘佑红 发表于 2023-8-18 06:55
8脚的STC8G只有定时器0和定时器1,没有定时器2,如果你用的是8脚的,那就不会进入定时器中断了。

你好,是8脚的STC8G1K08A,但试了一下定时器1,也没有反映,不知问题在哪里
回复

使用道具 举报

ID:161164 发表于 2023-8-18 14:10 | 显示全部楼层
木示 发表于 2023-8-18 12:03
你好,是8脚的STC8G1K08A,但试了一下定时器1,也没有反映,不知问题在哪里

贴代码
回复

使用道具 举报

ID:427868 发表于 2023-8-18 18:27 | 显示全部楼层
木示 发表于 2023-8-18 12:03
你好,是8脚的STC8G1K08A,但试了一下定时器1,也没有反映,不知问题在哪里

参考以下我的设置(STC8G1K08-8PIN):
       P3M0 = 0x00;        P3M1 = 0x00;                 //设置为准双向口        P5M0 = 0x00;        P5M1 = 0x00;                 //设置为准双向口
               
        ET0        =        1;                                        //开启定时器0中断
        ET1        =        1;                                        //开启定时器1中断
        EA        =        1;                                        //开启总中断
                                               
        PT0        =        0;                                        //设置Tim0中断为高级2 PT0=0
        IPH |=        0x02;                                //0x02=00000010           PT0H=1
        PT1        =        0;                                        //设置Tim1中断为低级0  PT1=0
        IPH &= 0xF7;                                        //0xF7=11110111           PT1H=0       
                                                                                                                                       
        AUXR &=        0x3F;                                //00111111=0x3F,定时器0和定时器1为12T模式       
        TMOD = 0x01;                                          //00000001,定时器0为16位不自动重装,定时器1为16位自动重装,
        TH0        =        0xFC;                                //
        TL0        =        0x18;                                //
        TR0        =        0;                                        //定时器0由INT0中断启动       
        TH1 = 0xD8;                                           //Tim1定时器初始时值0xD8F0=55536,10ms
        TL1 = 0xF0;
        TR1 = 1;                                                    //定时器1开始计时

回复

使用道具 举报

ID:1091365 发表于 2023-8-21 14:50 | 显示全部楼层
以STC8G单片机为例,存在4个中断优先级,最高优先级(3)>较高优先级(2)>较低优先级(1)>最低优先级(0)。

4个中断优先级则代表着STC8G可以实现4级中断嵌套。

例如:设置外部中断0为优先级3,定时器0为优先级2,串口1为优先级1,定时器1为优先级0

则当中断同时到来时,以最高优先级排序依此进入中断服务函数中。

当定时器1中断到来,进入中断服务函数之后,串口1中断来了,则会从当前的中断服务函数跳转到串口1的中断服务函数中,只有当串口1的中断服务函数执行完成后,才会再次返回定时器1中断服务函数,定时器1中断服务函数执行完成后返回主循环。

在该优先级设置下,外部中断0可打断定时器0,定时器0可打断串口1,串口1可打断定时器1;此时即为4级中断嵌套。

但如果中断同级时怎么办?

此时需要引入一个中断查询优先级的概念,查看MCU手册,可以看到中断号。

中断号就对应着中断查询优先级。
回复

使用道具 举报

ID:140489 发表于 2023-8-23 11:00 | 显示全部楼层
木示 发表于 2023-8-18 12:03
你好,是8脚的STC8G1K08A,但试了一下定时器1,也没有反映,不知问题在哪里

中断
 提供13 个中断源:INT0(支持上升沿和下降沿中断)、INT1(支持上升沿和下降沿中断)、INT2(只支
持下降沿中断)、INT3(只支持下降沿中断)、INT4(只支持下降沿中断)、定时器0、定时器1、串口
1、ADC 模数转换、LVD 低压检测、SPI、I2C、PCA/CCP/PWM,8脚的就没有定时器2
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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