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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
很简单的使用定时器0定时两秒,控制PWM波,发现没有进入定时器0中断,一直没有发现问题出在哪一步,哪位大哥帮忙看看!( f! {1 M. z2 m# T  a% f, F
void main()
: |8 g2 {) k3 l' v{7 u% v: n; i, q' _( `
        IO_Config();                          //将所有的IO口配置为准双向口6 s, j0 ^) m  b! b! g5 B
        Uart_Init();        //初始化串口
3 b" I: ]4 k2 g9 p  y, G) U" e        timer0_Init();
6 o# h$ l# p; P+ k. o! u        ADC_Init();         //初始化ADC# A3 U9 z( e, ?% _' @* `
        PWM_Init();
6 }1 D% r) q1 K$ n$ F* y2 ~        EA = 1;                                      //打开总中断
. W- s/ L) v- {' p9 ^        Start_PWM(CYCLE1M);7 {! C/ P6 ]8 v
        while(1)! j. b3 c( q0 Y
        {        
( D' x7 I" N; R! m* f( a" Q2 T        }
. `8 T' t/ [, Q  C: t# p, S2 a, o}
3 r; V+ p) n" A, O. D; d; r( d" e) e+ p* d* @

7 _7 @- b7 a+ u2 c
0 |1 H$ `# M; X$ Mbit Delay_Status = 0;
( `3 j( y9 x0 z1 [* {! o* v7 }volatile u8 cnt = 0;# q# |6 `" Z3 Q# V. y9 A

+ H" b7 O6 O! G) P/ X$ I0 J& ~% Q' g+ s0 m
void Timer0_Init(void)                //20毫秒@24.000MHz
) V! N" A* O) e" e# e) y2 H0 G) `{1 W. i+ [" H% A" u  T4 u1 c) w
        AUXR &= 0x7F;                //定时器时钟12T模式* ~) K, ^5 O+ P! B
        TMOD &= 0xF0;                //设置定时器模式
8 e) ]5 i/ d7 k. q" m        TL0 = 0xC0;                //设置定时初始值! a7 T  j+ R; I, r3 W* ]
        TH0 = 0x63;                //设置定时初始值& e# t3 ^! a3 b/ {% z7 w+ g( H
        TR0 = 1;                //打开定时器5 j: D: I$ H  f  H6 j
        ET0 = 1;
0 t/ S+ D+ h" W& g9 T( ?( h}
' B5 a6 N4 e/ z0 v9 ?6 w# L9 _$ ]* }3 m, n
, w, w6 y7 G" O, R0 E# k, F
void PWM_Init(void)+ M1 r1 F. a1 \7 ]' k2 Q
{        & R! X2 M3 O/ B3 q) h6 }6 K) j' A. B
        P_SW2 |= 0x80;  //使能访问XSFR,否则无法访问以下特殊寄存器  ?: A/ ?6 K" ^( T4 ~
        ; |/ Z: ]5 I- u, R/ d9 P. S( E
        PWMCFG |= PWM1A_SET_0;  //设置端口的初始电平
! B: X  |. K& R+ }        PWMCFG |= PWM1B_SET_0;
: i* J& a, V8 v2 D& t8 g3 R; {. o        PWMCFG |= PWM2A_SET_0;
1 {3 `9 ^. p3 y8 J& X# n' {6 M        PWMCFG |= PWM2B_SET_0;
3 a: r- ]. Z% a1 S* n1 ^7 F! n        " W) t. q; y, g: i) F
        PWMCKS = 0x00;   //选择PWM时钟为Fosc/(0+1)4 @. m- W: T; m# y0 e) ?
        //PWMC = CYCLE;    //设置PWM周期0 @9 C5 ~8 ^- H; h- j' I/ u
        
. t0 i/ z- e9 x2 E9 x! v- k! ^3 g* H        PWM4T1 = 1;                                   * E( ~1 U: |2 P" F
        PWM4T2 = 0x00;               
  k7 v. G! [2 h# [. P        PWM4CR = 0x00;   //PWM4输出到P2.2,使能PWM4T2翻转中断
6 N+ j! W" z" g) f' ~. k2 d
/ Q$ Y. e6 F5 T9 R% y
) x, ]; c3 _. F. T% h7 j  PWMCR |= 0x84;    //使能PWM发生器,使能PWM计数器归零中断0 \9 b% C! d& s; H( d% x  c
  P_SW2 &= ~0x80;8 X' D+ o% [, C
}/ g! L* @: F1 D. {2 u8 P  k* o) y) ?
" |& R& x4 f, g, M% o
/ x  j! K+ ^) C% c) u0 D$ L* l
//起始频率工作,振幅比" [, c6 _( b% O8 r
void Start_PWM(u16 CYCLE)2 h& `. F& M: S# o1 T# p& O5 C+ U
{
$ f8 n1 S0 ]) e1 i% i8 s3 `        P_SW2 |= 0x80;
! r2 a- p1 y# ~( Q+ L        if(Delay_Status == 1)2 H+ U8 X3 R( W9 O# V
        {+ b5 c/ W1 G" X# J
                PWMCR &= ~0x84;
0 G% K8 m  i% M. w                PWM2A = 0;
+ e) |, |+ v0 W. J" Q* d# H& L# @        }6 a" P9 k7 ]' T" @# z& b- b1 P) W
        else1 T" \. ], p2 ^% O  O+ `6 d4 v& w
        {' @( x  R6 ?3 @) C! D  a
                PWMC = CYCLE;   //设置pwm周期
* Y) u1 c+ \) l$ V2 D
1 b0 n0 M, q; R( X! M7 w; O
1 i$ }- ^4 ~$ p$ _0 z. E4 r5 W" w1 a                PWM4T1 = 1;4 p6 Z5 o0 d) u: S: J3 f
                PWM4T2 = CYCLE*DUTY/100+1;+ k/ ?7 X+ a; _& m& o) U: _
               
" ^. k' o* _) h' V9 \                PWMCR |= 0x84;     //使能PWM信号输出
$ O, z7 Y/ c9 W8 Q+ ^$ U        }7 J0 s& g2 L: @2 `: T6 _
        P_SW2 &= ~0x80;
9 E0 u7 r4 Y$ O2 v}
8 f6 E2 j7 P$ c- h5 j7 D        
  m" g7 Z* W. Z4 b- G6 Q. Bvoid Timer0_Isr(void) interrupt 1 8 d& r# B1 j" u0 O, {5 M: p! G
{        / Z! `" a; O2 f
        cnt++;- A/ T% ~- j& T0 _
        if(cnt >= 100)  //100*20ms=2s
' @4 A+ ?4 s6 l  I* J8 |% `        {
2 Q2 Q" l/ G: K/ G                cnt = 0;# e8 Y7 D. G6 m+ X1 |
                Delay_Status = !Delay_Status;
7 O5 f6 i0 X) I7 o6 [        }5 e6 n6 j  K; ?
}
) d; r/ @4 c( E8 Q3 M3 [" o( m8 i' z

该用户从未签到

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
    ( i. J& s# k5 m% ~- ~% |6 \定时器中断无法进入,请查看数据手册中断服务程序是否写对,手册602/1473请查看下。

      R" x$ z- T7 g中断服务程序没有发现问题啊
    0 S- N' ^, C* ]* V5 N

    该用户从未签到

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

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-9-10 19:36 , Processed in 0.125000 second(s), 27 queries , Gzip On.

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

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

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