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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
很简单的使用定时器0定时两秒,控制PWM波,发现没有进入定时器0中断,一直没有发现问题出在哪一步,哪位大哥帮忙看看!
" S* `3 T" D- ?1 H5 X  \void main()
) _5 t( V5 `6 G0 h% e8 g4 Y9 _{
  I$ E: O# z: `6 |2 p9 g        IO_Config();                          //将所有的IO口配置为准双向口
5 c  v9 T, N0 S7 F5 G, U+ R        Uart_Init();        //初始化串口% A+ T% U: M4 w+ @7 b
        timer0_Init();* N) L6 y7 _5 o  \  ~
        ADC_Init();         //初始化ADC/ b% O0 t: Y9 @: Y$ }1 @9 P+ Y7 a
        PWM_Init();$ @8 w' Q1 H' U% G6 G$ E* n
        EA = 1;                                      //打开总中断5 u6 b$ k: F3 }$ `4 ~
        Start_PWM(CYCLE1M);  \7 Y( n1 U5 E* K
        while(1)$ r! ^! v4 E$ W3 t' N& S
        {        % P3 b0 P+ b% j! z
        }- v5 v8 g# g. O" L5 _8 V. k
}
( L8 {4 i" v5 J+ s/ f4 i1 G. y( c' Y* l+ z( M
/ q% h) i5 Q, E: r( L% b4 n  e# a# e
5 d/ D5 l% n: I" }* g" s) y. O
bit Delay_Status = 0;
7 d, x# {' i( v. zvolatile u8 cnt = 0;. n& A1 F0 U# r# P7 s! `6 R' _

' v7 \' e! U; k( ~! |& U$ @# p3 y2 X2 X% ~) e
void Timer0_Init(void)                //20毫秒@24.000MHz
7 V- ~1 C( P- U. ?8 a{
  ], ]1 }( U& {/ X$ e$ j0 l        AUXR &= 0x7F;                //定时器时钟12T模式
% x; k9 |. A/ [4 ~' S: G        TMOD &= 0xF0;                //设置定时器模式
' A/ S* p9 t0 m) g6 v' ~! m        TL0 = 0xC0;                //设置定时初始值
9 k# ?) q/ m8 o! N6 I+ F        TH0 = 0x63;                //设置定时初始值
, _7 R" g) O) z. [# ]; ]        TR0 = 1;                //打开定时器) a! i, w5 _+ W( k* }8 G
        ET0 = 1;
* e9 H6 P% x4 ~}. A+ Y* I4 o% P. J$ Q1 j

1 u9 \4 r' c8 X4 j2 K! G) E
6 E& Y5 t. i) Zvoid PWM_Init(void)$ x( B* ]3 v& [# ]3 Q5 |
{        - p4 O$ f, m8 H4 \
        P_SW2 |= 0x80;  //使能访问XSFR,否则无法访问以下特殊寄存器
; {$ J+ _4 s' w; z" H  I        
9 _& S* a) V$ c3 T9 A; J        PWMCFG |= PWM1A_SET_0;  //设置端口的初始电平
. Y- [' F( P* [1 Q+ U$ M( X        PWMCFG |= PWM1B_SET_0;
4 P- K! o& W3 A. F0 M7 X) l  O        PWMCFG |= PWM2A_SET_0;! \4 M* O+ u) Y
        PWMCFG |= PWM2B_SET_0;
) Y$ y8 r4 A4 \6 ^        4 u2 ^. ~2 I5 [% b
        PWMCKS = 0x00;   //选择PWM时钟为Fosc/(0+1)2 \* S& O' R# V# h: @% [  a
        //PWMC = CYCLE;    //设置PWM周期% d, H: }% [! _) \# B) k, E0 I
        
7 T& L3 _" I3 [# r        PWM4T1 = 1;                                   8 \& s, [' Q: p8 l9 z* ]- v
        PWM4T2 = 0x00;               
2 j6 A0 w0 s8 U" j* r        PWM4CR = 0x00;   //PWM4输出到P2.2,使能PWM4T2翻转中断5 D7 l* S/ Z/ }, ?2 r

1 L6 t& a/ S! D- M( C9 ]
6 \- d4 p: y/ ?+ T  PWMCR |= 0x84;    //使能PWM发生器,使能PWM计数器归零中断
5 ~8 Z, `- b% m0 N. U  P_SW2 &= ~0x80;! z& h9 e) s) u+ d  k. \! V: v; `
}1 M. m* S" f! N" z
7 @1 j4 h) V  J% R: d" O
$ `( a' ~  _* O1 q% i9 V
//起始频率工作,振幅比! M8 t. T" b( o3 _! r) C- T2 z
void Start_PWM(u16 CYCLE)
3 |1 D" Y% o/ e6 \7 a/ j{" B3 k$ s5 S' R9 ]$ j+ _/ C8 d
        P_SW2 |= 0x80;$ P3 [" v/ ]- K7 [4 b2 g
        if(Delay_Status == 1); l/ Y$ O! [0 d6 Z3 @: A
        {4 I# G3 e% l4 ~2 t0 M( \) g
                PWMCR &= ~0x84;
% F, R$ O5 B" h# v( L! i; a                PWM2A = 0;7 q+ J# j, s3 f3 V* w  D4 C6 g9 I) D
        }3 R0 E& ~% i% @" F
        else/ U* R% K: g/ J. m3 z
        {
: \- x& R4 l$ B+ M. D+ }* {                PWMC = CYCLE;   //设置pwm周期$ v& E- O6 M' ?3 h7 m" d
; [6 U/ H8 b; L6 o
" g; G' n, h& i0 K# G
                PWM4T1 = 1;
" X; N% h' o9 d8 Y7 P' r, h3 F                PWM4T2 = CYCLE*DUTY/100+1;
& M7 r; p1 r7 _& g' P$ K1 }               
+ _, E: X% y' o! i- u7 a5 {; W                PWMCR |= 0x84;     //使能PWM信号输出( D  n9 M1 r7 K4 E# }: o0 O2 w
        }
5 i7 {/ Q. V% D5 s        P_SW2 &= ~0x80;
; ~: \1 S# f3 H; _1 t* J1 f0 A( m}
  Q) x9 X# s$ x+ v- r" V( A        
! T! m2 S. I+ d! mvoid Timer0_Isr(void) interrupt 1
* X/ x, P4 j* ~$ @3 D) j  G6 [{        3 X" B2 k# }3 V3 g4 [) R' u
        cnt++;- u  p  E2 U, s6 m
        if(cnt >= 100)  //100*20ms=2s$ i2 F6 ?3 a8 x/ I6 t) H" E
        {- \- W- x/ ?) J/ j. c
                cnt = 0;
: D; ^; g  Q0 C7 R) W* [5 E5 g                Delay_Status = !Delay_Status;" D* x5 B. w8 W; U
        }
4 Q8 ]" _- \! m2 _+ h}
/ v2 V( J, ^) T" \
5 `8 s, a8 a2 U) Q4 L

该用户从未签到

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! K9 U8 Q) u6 g2 G8 i  i
    定时器中断无法进入,请查看数据手册中断服务程序是否写对,手册602/1473请查看下。
    # }; m% ~# {9 t  B; ]
    中断服务程序没有发现问题啊
    ( |7 [2 q, d3 [% v! x( e+ ^' n2 `0 @

    该用户从未签到

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

    该用户从未签到

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-10-8 11:45 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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