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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
很简单的使用定时器0定时两秒,控制PWM波,发现没有进入定时器0中断,一直没有发现问题出在哪一步,哪位大哥帮忙看看!% `! v3 Z; L( X1 R$ H- a# U6 Y8 n6 ^
void main()
% c" l' x3 K/ i! [$ p- t{: N& [2 g/ O4 Z" i4 h; ~
        IO_Config();                          //将所有的IO口配置为准双向口3 f* E- e. w, w- u( k
        Uart_Init();        //初始化串口2 Q' D& R2 q1 m/ u7 j# Q/ }
        timer0_Init();4 [  P' x( }" ^" l% Z8 |% V
        ADC_Init();         //初始化ADC" t5 |5 H2 C- [2 [( Z
        PWM_Init();( m" r8 r9 I  L& }% A, j( D* l; l# n
        EA = 1;                                      //打开总中断% x1 ~& x, _; T7 b* P, P
        Start_PWM(CYCLE1M);
  b. E' O2 m$ ~) a        while(1)
, k. }' o8 c1 @6 N        {        
+ ~! [4 M% y! F- |9 t! c6 W        }" R- a# k" l1 J3 f: z
}# V3 S0 L2 D/ l4 n5 W+ N

% ]- g0 F8 ]+ ^7 {/ l( J
0 Q  P0 ^. G0 s2 j( |
% A! p; P7 G# J1 d" s( _3 obit Delay_Status = 0;
9 q  O# d  S& R) q/ g( r$ Q: L" Hvolatile u8 cnt = 0;
! ^% H; V6 c* T5 f9 U: g1 J( a% q# r2 g; F. E
% D; y2 A  c; ?$ q
void Timer0_Init(void)                //20毫秒@24.000MHz
+ f$ U  E( X* ^% Z. l{6 D- R: e6 ]9 n3 i- z
        AUXR &= 0x7F;                //定时器时钟12T模式1 k: c2 l. a! o) g& `
        TMOD &= 0xF0;                //设置定时器模式4 m; z; D$ o, M8 A6 Q
        TL0 = 0xC0;                //设置定时初始值
0 _& D! a# Y2 k  R% e        TH0 = 0x63;                //设置定时初始值
, F" n* E: i) z7 q        TR0 = 1;                //打开定时器5 I+ x" @0 r# G; \
        ET0 = 1;. c. h! b* W) S. u  P
}
2 D3 M, ~# V! |* [& @5 M. n/ b( V1 @9 ~/ n4 p1 E
8 u) A4 W! Z2 Y& y, H5 r! J/ w
void PWM_Init(void)
. `5 b# e+ U; ?; l' c5 _3 c0 _{        
+ f, a3 [" A9 u# Y        P_SW2 |= 0x80;  //使能访问XSFR,否则无法访问以下特殊寄存器
8 L* m# e2 Z3 w: T        3 l6 `8 y9 ]' {' q
        PWMCFG |= PWM1A_SET_0;  //设置端口的初始电平% _% z- Z7 Z' i0 q% }
        PWMCFG |= PWM1B_SET_0;! B% b7 B6 l4 j' B' S* T, S
        PWMCFG |= PWM2A_SET_0;
3 e; W1 N3 o0 x        PWMCFG |= PWM2B_SET_0;
( H9 Y; y9 c: z        ; ]# J/ d% R. U4 `( U4 F& d
        PWMCKS = 0x00;   //选择PWM时钟为Fosc/(0+1), T$ v. X. H, h# M- Z1 J: a
        //PWMC = CYCLE;    //设置PWM周期& A3 v+ d5 n# ]! r1 @
        
6 e& f8 Q  J1 M7 r/ p( a        PWM4T1 = 1;                                   
2 P2 M: {7 E  o: I5 p1 {* Z3 o4 k        PWM4T2 = 0x00;               
0 D% ?" H3 J. h& D) O        PWM4CR = 0x00;   //PWM4输出到P2.2,使能PWM4T2翻转中断) a7 I* [/ |$ x& A' s$ H: [
# t% P; o+ L, w6 K9 Y# G
: r- B. d2 d( G
  PWMCR |= 0x84;    //使能PWM发生器,使能PWM计数器归零中断, Z* q1 Y% L  K
  P_SW2 &= ~0x80;
. ]3 A4 k  i7 D* `* x}9 E! w5 b9 |  n# |3 _& q

' v; M. \  h6 P- i
8 A, S' i3 w4 x  L* Q+ j2 i//起始频率工作,振幅比) S+ Z+ H/ P/ z. Q
void Start_PWM(u16 CYCLE)# u. p6 t# N% K+ y4 p! h; N
{
/ g# X( b+ l5 }2 l        P_SW2 |= 0x80;
" f) z% |  U2 l" E2 P        if(Delay_Status == 1). ]" s  t  _( ?. a% j; y
        {
6 J6 P$ d3 m; W                PWMCR &= ~0x84;
3 c3 N4 J4 w. |                PWM2A = 0;/ e5 ]# _4 ]# E+ a8 N& o
        }
1 `. Y7 h+ ?. J. v        else
! c" x$ x; M* t# m& e        {
" Y, P! Z8 v# H2 Z: O: o# z                PWMC = CYCLE;   //设置pwm周期
) o- Q- F' V* f$ A8 u2 r
3 A3 _2 r& q% t/ p
7 F8 j) d. s6 d) R8 `9 n3 d                PWM4T1 = 1;
0 d( i, R: r" z7 f% D; Q8 E8 J* u                PWM4T2 = CYCLE*DUTY/100+1;
- H: |; ~* G( X/ e7 ^/ y               
" Z. @" {2 |: a# e5 U' Y- l9 I                PWMCR |= 0x84;     //使能PWM信号输出1 H! r; `. k! n" O
        }
- i3 B6 F2 x& Z. J4 i3 w        P_SW2 &= ~0x80;7 Y" _; R# H/ o% j. w& y
}
% \( k0 _* r9 v% ]) B# o        
6 L" ^( ~4 R/ J# o( O) D; u8 wvoid Timer0_Isr(void) interrupt 1 3 \: d& P" u: p: p! {
{        
9 W: e/ D' Z6 S: y        cnt++;
/ U+ W. k; ?$ S! {9 P- q        if(cnt >= 100)  //100*20ms=2s
+ R4 v$ u5 a. {5 Y* n        {
3 \' g( w/ _" \# y                cnt = 0;/ U1 F1 r  w9 v0 T. b* N
                Delay_Status = !Delay_Status;
% v5 i3 I  c& C2 O* }        }
% i$ [: @! O/ q. W! }}
5 [7 N/ Y0 n  n. [) l0 S4 g: u4 X+ a

该用户从未签到

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:036 r" [% {( z2 h( h  ]1 C% D7 E
    定时器中断无法进入,请查看数据手册中断服务程序是否写对,手册602/1473请查看下。
    6 v/ q: ]" {# A! ]( |0 Y1 T
    中断服务程序没有发现问题啊
    8 v$ q. _0 J* m+ @& t

    该用户从未签到

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

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-6-28 05:06 , Processed in 0.078125 second(s), 27 queries , Gzip On.

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

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

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