找回密码
 注册
关于网站域名变更的通知
查看: 396|回复: 5
打印 上一主题 下一主题

STC15W4K56S4单片机定时器0中断问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-12-1 10:25 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
很简单的使用定时器0定时两秒,控制PWM波,发现没有进入定时器0中断,一直没有发现问题出在哪一步,哪位大哥帮忙看看!
0 \, T% m8 x) t; \) }void main()
, n! A& C8 K" ^6 [  ]{6 u" ?6 S3 K+ N1 i9 E; A
        IO_Config();                          //将所有的IO口配置为准双向口
, r1 i) \% ?: b, L3 g: S& _  N        Uart_Init();        //初始化串口
. g+ P3 C/ C) s" ?# {/ b, u- o# m        timer0_Init();
4 K0 _$ _# A6 V. _" }4 N. o5 \2 [        ADC_Init();         //初始化ADC
; A, Z' S8 [, ?( c& m        PWM_Init();. a  m/ A  \$ c) K$ Y
        EA = 1;                                      //打开总中断
  x" m, w3 z' c) g- ?5 ]        Start_PWM(CYCLE1M);' i: \4 C* \6 k9 k: d  B1 J
        while(1)
3 u( t2 k' T8 e! M3 H; F        {        1 A3 }- P& h. O
        }6 Y( T1 W0 l  a: P/ @* \
}+ ^3 ]) S9 F* c3 m8 Z

- ?2 k5 I8 Q4 d$ p
! T# Y1 g- X4 G2 }* S: X0 _# f
. ]" `- f! r' ebit Delay_Status = 0;+ }6 v3 [& H0 D6 q
volatile u8 cnt = 0;  F& d9 ^' ?8 K  v, D  n% U

# G; `. h' y% g
) m/ F% T0 u& b/ D- g& ^void Timer0_Init(void)                //20毫秒@24.000MHz
7 O9 B: y2 K' Y) M" L# [, o6 Z{- b; k, ~* H0 t7 Y% `  @
        AUXR &= 0x7F;                //定时器时钟12T模式3 M9 E( u5 r* I( m+ q2 ^
        TMOD &= 0xF0;                //设置定时器模式5 e. e) X$ T! K) O5 H
        TL0 = 0xC0;                //设置定时初始值0 o: e0 l' q: K1 A; ?9 s
        TH0 = 0x63;                //设置定时初始值
; S& o9 }* `4 R% [& o& f        TR0 = 1;                //打开定时器
; O4 b+ C7 `: @4 n* ^        ET0 = 1;
  D9 E1 r  s$ a$ h$ |7 s, w}# i( q8 u7 V) l; C5 P

7 h, R  d6 k& _# D$ W0 m# ~% H! a9 q, L- f7 n
void PWM_Init(void)
9 N' {& ^9 t$ I/ s$ k2 c{        
9 I& R$ F9 i, j" I! x* W( B        P_SW2 |= 0x80;  //使能访问XSFR,否则无法访问以下特殊寄存器5 C" w) e+ I5 g% E: b
        
5 |2 d3 }  P  R% ]6 V4 m        PWMCFG |= PWM1A_SET_0;  //设置端口的初始电平1 m8 x4 B. E% s  D( v, l
        PWMCFG |= PWM1B_SET_0;3 p7 W5 l. k9 Z- C' n, f  J
        PWMCFG |= PWM2A_SET_0;
( y. \5 n9 n; Q) d        PWMCFG |= PWM2B_SET_0;
4 H# e  p9 N& c        
" O7 f; `7 p7 Y  n        PWMCKS = 0x00;   //选择PWM时钟为Fosc/(0+1)
7 O- L, d$ Q4 G, k. Y2 v2 D        //PWMC = CYCLE;    //设置PWM周期
: c7 S% m( O+ D  e' X" r        
& e; }& ~7 _' ?" k. w7 k3 k        PWM4T1 = 1;                                   
4 E3 T2 n# S+ B5 Y        PWM4T2 = 0x00;                & z, i5 L' ^0 \8 K' X/ d
        PWM4CR = 0x00;   //PWM4输出到P2.2,使能PWM4T2翻转中断
) u/ N- T6 [9 K- T$ y% z0 A7 u9 r: B+ y" n
. i' G" K4 R' y2 H, ^/ c0 I
  PWMCR |= 0x84;    //使能PWM发生器,使能PWM计数器归零中断
- v# U9 r  E7 w  P_SW2 &= ~0x80;2 T  t) G. V2 T1 F: b& A& k
}
5 L) H! I, \7 z$ I( t" v6 Q- T* [  k* x  F/ V) L8 v

( H( _2 ?" {' @- n' D//起始频率工作,振幅比
; t4 S8 S5 p, |8 Fvoid Start_PWM(u16 CYCLE)6 T9 E1 L: J% I2 |
{! _" x3 v4 J: B5 k1 s# |) G# R
        P_SW2 |= 0x80;
; ]) A6 g1 F: k        if(Delay_Status == 1)
" @) e/ L, W+ _        {9 n' |1 ^  e& F/ w- ?) |" D
                PWMCR &= ~0x84; 9 P. Q  D4 A- `0 ~! w: P
                PWM2A = 0;
' l5 s# g% z- Y: z: H        }5 K9 A7 D6 L1 M' m* m: Y
        else
3 T+ v+ c$ \$ H, g        {$ g6 U+ g3 o5 F  L. [/ \
                PWMC = CYCLE;   //设置pwm周期
% m+ F$ _1 D5 X
! V: o+ B4 ^) W; t
4 J+ O8 J7 t( S0 t9 a                PWM4T1 = 1;
8 n) e: Y1 v+ t# C/ e- U8 |                PWM4T2 = CYCLE*DUTY/100+1;, l4 _3 p' t% @/ Z, l: A
                * Z1 H  j4 D/ ?
                PWMCR |= 0x84;     //使能PWM信号输出
" Y! y$ C3 _5 K) h1 k) ^3 D* c        }
- `7 e; ^( F; M" p; m        P_SW2 &= ~0x80;& A  P1 A: Q  k/ ^& h  I
}" K  k7 `5 {  l  D7 i! Q) a
        
- q2 Y6 |0 n/ j0 A$ R0 Hvoid Timer0_Isr(void) interrupt 1
1 S5 Q  P; s, y2 v) t/ d1 b! H7 y% e{        # u: s: p9 x8 I5 b7 y% }
        cnt++;
# V0 b7 Z* R; U- A+ X. R        if(cnt >= 100)  //100*20ms=2s% F( n6 v# b- W3 n1 L
        {0 a! u; D/ r/ `3 @, K
                cnt = 0;+ J0 _+ z2 Q2 v7 z: I* X4 u* L
                Delay_Status = !Delay_Status;
$ G% l! x8 F( W: y5 E9 g        }
8 V3 y" o* K7 W# A( r}. F3 ^' Y4 W# }) s7 v6 V
2 J- H- h8 ]. s9 X9 k

该用户从未签到

2#
发表于 2022-12-1 11:03 | 只看该作者
定时器中断无法进入,请查看数据手册中断服务程序是否写对,手册602/1473请查看下。

点评

中断服务程序没有发现问题啊  详情 回复 发表于 2022-12-1 13:51
头像被屏蔽
  • TA的每日心情
    奋斗
    2022-11-8 15:10
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    3#
    发表于 2022-12-1 12:38 | 只看该作者
    提示: 作者被禁止或删除 内容自动屏蔽

    该用户从未签到

    4#
    发表于 2022-12-1 13:51 | 只看该作者
    Dollche 发表于 2022-12-1 11:03
    8 f! P- T! G3 K  _3 s! m! O定时器中断无法进入,请查看数据手册中断服务程序是否写对,手册602/1473请查看下。
    0 N2 W- ?/ n% _: N: U  A
    中断服务程序没有发现问题啊
    6 f. P  d. |8 b3 D; A9 n+ J' B8 [# g

    该用户从未签到

    5#
    发表于 2022-12-1 14:12 | 只看该作者
    是仿真发现没有进入定时器中断吗?可以尝试把其他处理全部屏蔽,只留下定时器初始化和定时器中断,做个引脚翻转用示波器测试下,如果没问题,再慢慢加入其他功能测试。这样看上去是没什么问题,得调试才能知道。

    该用户从未签到

    6#
    发表于 2022-12-1 14:20 | 只看该作者
    ADC部分导致进不去中断,注释掉就可以了。看看吧!
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-8-3 13:34 , Processed in 0.140625 second(s), 30 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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