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

求助大神!!51单片机定时器1和定时器0冲突

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-7-5 11:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
做的PWM直流电机调速,我用定时器0定时产生PWM脉冲,定时器1计时50msTMOD = 0x11;
9 r. W. ]& a& J/ r4 `    TH0 = 0x0FF;3 |7 J" |6 n) D
    TL0 = 0x9C;//100us! q$ Q, }1 J. I" f& E( K8 Q
TH1=0x3C;$ I& i  r$ T: D1 r: [/ k
        TL1=0x0B0;//50ms1 k0 }. ^  u1 p+ y8 d" p9 Y
    EA = 1;( J4 E# r8 S& Q
    ET0 = 1;
4 G* M; m( e1 k9 \( W    TR0 = 1;: c! W% T2 c+ D. c( e4 k7 t; \9 @, Y
ET1 = 1;) D, B! z- b- H- w2 o
    TR1 = 1;
8 z9 S2 O! T  k8 q; L8 Q( _8 r' S5 W
关了T1PWM波形正常,但是只要开了T1波形就不对了,像图中那样,中间会有一端高电平。外部中断1检测速度脉冲,这个没啥影响。求各位大佬这个怎么解决啊
6 X+ t5 a  h: e  _: p+ W1 k1 H! d: n  k) a: ^
        void time_0()interrupt 13 J% ^& y  w) _3 b8 g
{) e& T- N8 i' i
        TR0=0;+ E  o7 g6 I2 I1 d& {
   num++;4 L( ]! q1 s! P( Y& T. W( {
       IF(num<PWM)
" v5 F$ X- y+ i) x2 F$ I4 N                         ENA=1; //L298N使能端
6 Q# J( w* a: ?$ c( p3 v    else
; @) k7 L$ J; p; S              ENA=0;
- d) h! a; g. _6 }% C7 E4 \        if(num>100) num=1;7 k6 A  X$ _6 q" i
    TMOD = 0x01;/ P1 F6 o& k; B) X5 u0 i7 X8 @
    TH0 = 0x0FF;//100us5 d0 F2 c  E. J& I: y( U8 y
        TR0=1;
8 V1 h$ n% |" T; E4 o3 V}$ U) O7 y- U" N! U8 R

: x  m7 X. {9 x7 L5 Cvoid INT0_INTERRUPT()interrupt 0
/ C! s5 V& c/ }" X{  R" }! K7 [6 n7 k
        EX0=0;
$ z8 d- \) z* cvelocity++;' W7 x2 G' n% O  K
        EX0=1;
+ n7 P6 {8 s! Q}
2 B2 k4 ?* F! L* G4 B. {4 H; A, M* {7 z3 C' ]$ p5 u( v
void time_1()interrupt 3
2 s. E% o0 |- v( L( A9 n{   
, I( i, d; w# R0 l7 v. V     TR1=0;! N6 a4 n5 K, V/ g
     count++;% t/ T- Q9 G. W4 z5 t) q6 [9 B
         if(count==51)
. y" V* `  ~% {$ j/ `. E         {  ! u1 i  P9 B& X7 v( ?
            sprintf(DSP,"%3d", velocity);
! s4 N" l5 `0 G" C  E! z                  display_string(7,4,dsp);
- ]0 _% R& G% S5 g/ }                 ldelay(100);         
, ?! m1 p1 I' M. x                  count=1;4 x/ H% C3 R: K( x
      velocity=0;9 p7 z5 t0 A9 l! |& F
      }+ w0 I! a1 k9 S
          TH1=0x3c;
' U2 a$ Q$ k& w- G          TL1=0x0b0;
6 `: L# x, ]' C          TR1=1;
+ W. H1 ~0 o& t9 s               
1 }, [6 Q3 j+ U! }7 {
; d; ], |8 Q( b}5 M+ U0 z8 J4 ~9 j! k: `1 w

7 D. s3 S) y- i8 ^- b8 g/ l$ z
( X; h4 q" y( r/ {% \5 c3 g

该用户从未签到

2#
发表于 2019-7-5 11:32 | 只看该作者
试试设置定时器0的中断优先级高于定时器1

点评

定时器0的优先级不是本来就比定时器1优先级高吗  详情 回复 发表于 2019-7-5 13:04

该用户从未签到

3#
 楼主| 发表于 2019-7-5 13:04 | 只看该作者
helendcany 发表于 2019-7-5 11:32
, H& }5 M0 M$ ]9 y. S试试设置定时器0的中断优先级高于定时器1
4 ?# b# u) w% p; z; ]
定时器0的优先级不是本来就比定时器1优先级高吗5 F( {/ h$ w- z5 w& ~& n

该用户从未签到

4#
发表于 2019-7-5 13:23 | 只看该作者
小黄豆 发表于 2019-7-5 13:046 t* n! {% T5 e) u; Z* ~8 l. f
定时器0的优先级不是本来就比定时器1优先级高吗
' j# c8 I% ~( N9 a9 x0 G. Y: T
没太看出来什么问题,需要确定几个问题,pwm持续高电平时,单片机有没有其他动作出现,比如显示什么的,另外在定时器0里更改了tmod的值,并只更新了th0的值。再试试设置中断优先级,虽然有缺省值,但现在在解决问题,就把需要明确的值都明确了  T$ w) n! j) v8 b! B5 s4 q  I

点评

定时器0里更改了tmod的值,并只更新了th0的值,属于手误,应该th0th1都更新,谢谢提醒;然后我似乎找到了持续高电平的原因,T1中断函数里有个延时函数看到了吧,我把它去掉就正常了,反正目前看是挺正常。我一会儿在  详情 回复 发表于 2019-7-5 13:32

该用户从未签到

5#
 楼主| 发表于 2019-7-5 13:32 | 只看该作者
helendcany 发表于 2019-7-5 13:23
) j6 D# K, E0 H9 }: T没太看出来什么问题,需要确定几个问题,pwm持续高电平时,单片机有没有其他动作出现,比如显示什么的, ...
1 N% S; k7 w/ q- o6 u. {
定时器0里更改了tmod的值,并只更新了th0的值,属于手误,应该th0th1都更新,谢谢提醒;然后我似乎找到了持续高电平的原因,T1中断函数里有个延时函数看到了吧,我把它去掉就正常了,反正目前看是挺正常。我一会儿在设置下优先级试试,只求更稳定。我再鼓捣一会儿,看看会还有什么问题。另外谢谢大佬的关注!
+ P& B& U7 A+ G! \+ Q

该用户从未签到

6#
 楼主| 发表于 2019-7-5 14:32 | 只看该作者
后来又出现了冲突问题,貌似是和外部中断0的,我把T0优先级设置最高,问题果然解决了,谢谢

该用户从未签到

7#
发表于 2019-7-5 14:51 | 只看该作者
设置优先级排序并不代表中断冲突不存在,只是区分轻重缓急,能用一个中断处理的任务就不要开两个中断。你的两个定时中断的时间有倍数关系,只要添加一个计数变量就可以合用一个定时中断。中断里通常只产生标识,不处理任务,更不能有长延时,叫做打一枪就跑,任务放在主循环里处理。

该用户从未签到

8#
发表于 2019-7-12 16:10 | 只看该作者
中断里面一般只进行标志位的处理,涉及到任务操作性的一般放到主函数里面去,养好习惯吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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