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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
很简单的使用定时器0定时两秒,控制PWM波,发现没有进入定时器0中断,一直没有发现问题出在哪一步,哪位大哥帮忙看看!) H' m; o& d% l9 t; m, M
void main()% n; J% T  X6 R% ^+ d+ L& O' l% H  y- {
{" j" U: R1 d8 J/ J: l- S5 n; P
        IO_Config();                          //将所有的IO口配置为准双向口" a7 B  `0 p1 M
        Uart_Init();        //初始化串口/ J7 b5 u# r( G, _8 H$ {/ e
        timer0_Init();9 X% k) k) u; o8 U
        ADC_Init();         //初始化ADC
6 a" y# N8 _9 h6 h        PWM_Init();
0 h) m/ k4 E0 E        EA = 1;                                      //打开总中断. m! h2 Y- u6 M9 A  Y
        Start_PWM(CYCLE1M);
) M! {3 u5 `; F0 {# x5 V; s        while(1)
7 c9 f- Z1 e4 o5 L        {        
- L' w" [! l5 k- a        }1 T6 w/ _4 O. r8 \: \! n& H
}
0 H8 l+ n7 U1 q/ w4 N+ X: U3 [
: [6 p! y7 A$ c1 L
2 f' w( B! x, Y9 q7 E5 ]
5 M8 x  B& M6 |6 o  Gbit Delay_Status = 0;/ v/ `) \+ s8 r2 q/ M
volatile u8 cnt = 0;. q0 i# M  W) R
" w, w0 H/ K1 j8 {* ^9 U+ \
; B  j; B; V2 j8 s% t: I
void Timer0_Init(void)                //20毫秒@24.000MHz
! C2 Z5 u6 ]# J0 w3 ~{6 h1 v& y0 x+ }2 P2 Z2 a
        AUXR &= 0x7F;                //定时器时钟12T模式
$ b& C) ^  u% i/ _        TMOD &= 0xF0;                //设置定时器模式' _0 D$ ^& s/ U0 B
        TL0 = 0xC0;                //设置定时初始值
  d2 l  h8 R8 F) u! E) r$ h        TH0 = 0x63;                //设置定时初始值# }  u) |9 |9 d$ _
        TR0 = 1;                //打开定时器
7 Q3 j2 Z) {" m        ET0 = 1;
/ k" S6 h' ^8 Z0 ?( y}
, o* L- {8 t: A$ N1 p
' ~$ ^3 q" s( r3 J. c. f2 [6 b/ C3 w5 m* ]- q
void PWM_Init(void)3 U5 R4 ~# v8 u) }
{        5 O3 P* D! M8 q& m, v
        P_SW2 |= 0x80;  //使能访问XSFR,否则无法访问以下特殊寄存器
% |& s2 a% w" F! C9 M- y/ F        1 ], z( ~) ^- d6 ~9 `/ n
        PWMCFG |= PWM1A_SET_0;  //设置端口的初始电平
( R% g- O- c# ]9 ^/ }5 t        PWMCFG |= PWM1B_SET_0;
0 X! ?% B+ L# R2 p. _        PWMCFG |= PWM2A_SET_0;
) V' J& p8 v) I8 j& u. Y        PWMCFG |= PWM2B_SET_0;. F7 f( X0 W  o! Z
        3 v2 t1 o% C% \/ |7 e: g
        PWMCKS = 0x00;   //选择PWM时钟为Fosc/(0+1)5 R' c6 ?: c; w8 i/ @/ C
        //PWMC = CYCLE;    //设置PWM周期: s# j( V# M3 R- e
        
7 M- g1 a0 T" J. c. U- Q        PWM4T1 = 1;                                   
+ Q% Y, c% m) u+ }        PWM4T2 = 0x00;                6 J; {$ o5 q" |' r% B) z, h
        PWM4CR = 0x00;   //PWM4输出到P2.2,使能PWM4T2翻转中断1 Y- o1 B; U6 {0 E9 O* ]3 }9 R
& v0 L' g: L, g/ C" o+ E

( ^$ j. R  c8 U9 O9 Z  PWMCR |= 0x84;    //使能PWM发生器,使能PWM计数器归零中断
1 U+ h% p9 ]8 m8 c9 W! i  P_SW2 &= ~0x80;/ i" X& g( |5 b; i  Z; S
}8 A; C+ O$ O8 M! R+ @: [; b+ Q# \

: }' }6 I3 ~* {: ]  A, s, ]" g% G+ ~1 H
//起始频率工作,振幅比
5 x8 `1 ]! T7 svoid Start_PWM(u16 CYCLE)7 I- L6 |3 V( R
{) g% s# s+ l5 w5 q3 O1 C- T
        P_SW2 |= 0x80;# U7 V3 ^7 _6 y5 B* \* K' o+ U0 V0 ~
        if(Delay_Status == 1)1 K, p5 s1 Y7 R2 I
        {
4 }; _; b7 ^' t# h                PWMCR &= ~0x84; $ N$ `, L' c. r3 C2 y2 Z
                PWM2A = 0;# z* V$ {; a2 t4 ~6 i. e
        }
/ U) m. z! G! a4 a        else
/ T$ N, O1 u  d2 F$ A# s        {
' b9 l0 d3 @: {$ w3 G8 L, H                PWMC = CYCLE;   //设置pwm周期
" p, {" K! }' M
% [8 U3 `, b" i" D( |0 q( ~! C) z
                PWM4T1 = 1;
7 M2 ?3 O7 {9 [# F                PWM4T2 = CYCLE*DUTY/100+1;, ^/ }( @* n" j5 S% x
               
8 w& y3 G3 V' @3 G' v                PWMCR |= 0x84;     //使能PWM信号输出9 U: b2 @  P2 k) @) k" o" ]
        }
4 y/ B: k0 V( _        P_SW2 &= ~0x80;$ S( E7 n8 E* d. I" a2 ^
}
7 `: c: w1 O2 Q' F' m3 U' A& b  Y        " K; H" H& T. O0 O4 ]+ i
void Timer0_Isr(void) interrupt 1 ; Z( K; X' g7 e0 y6 E( i3 X
{        
+ |. F& q# n! J9 B! g- q; D        cnt++;
) q2 u2 D" N2 E5 K        if(cnt >= 100)  //100*20ms=2s, d9 y0 Z0 M' y( V& @; u- }
        {& y7 N1 ^2 b$ e1 t
                cnt = 0;
, a  _; F/ s1 @% g, Z( Q                Delay_Status = !Delay_Status;
' m0 O, S' ~- |% F4 ?( s, J        }
( K( M9 P$ a  A* `2 Y2 _: r}
5 T. M) v# `  {5 S( y8 a
8 S' _4 b$ m7 u8 b

该用户从未签到

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! z9 ^/ s( v+ Z7 a6 r
    定时器中断无法进入,请查看数据手册中断服务程序是否写对,手册602/1473请查看下。
      J2 I) h, p# Z( i
    中断服务程序没有发现问题啊
    ; c& a7 G) M4 o' e0 p

    该用户从未签到

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

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-29 06:14 , Processed in 0.125000 second(s), 27 queries , Gzip On.

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

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

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