|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
很简单的使用定时器0定时两秒,控制PWM波,发现没有进入定时器0中断,一直没有发现问题出在哪一步,哪位大哥帮忙看看!
0 \, T% m8 x) t; \) }void main()
, n! A& C8 K" ^6 [ ]{6 u" ?6 S3 K+ N1 i9 E; A
IO_Config(); //将所有的IO口配置为准双向口
, r1 i) \% ?: b, L3 g: S& _ N Uart_Init(); //初始化串口
. g+ P3 C/ C) s" ?# {/ b, u- o# m timer0_Init();
4 K0 _$ _# A6 V. _" }4 N. o5 \2 [ ADC_Init(); //初始化ADC
; A, Z' S8 [, ?( c& m PWM_Init();. a m/ A \$ c) K$ Y
EA = 1; //打开总中断
x" m, w3 z' c) g- ?5 ] Start_PWM(CYCLE1M);' i: \4 C* \6 k9 k: d B1 J
while(1)
3 u( t2 k' T8 e! M3 H; F { 1 A3 }- P& h. O
}6 Y( T1 W0 l a: P/ @* \
}+ ^3 ]) S9 F* c3 m8 Z
- ?2 k5 I8 Q4 d$ p
! T# Y1 g- X4 G2 }* S: X0 _# f
. ]" `- f! r' ebit Delay_Status = 0;+ }6 v3 [& H0 D6 q
volatile u8 cnt = 0; F& d9 ^' ?8 K v, D n% U
# G; `. h' y% g
) m/ F% T0 u& b/ D- g& ^void Timer0_Init(void) //20毫秒@24.000MHz
7 O9 B: y2 K' Y) M" L# [, o6 Z{- b; k, ~* H0 t7 Y% ` @
AUXR &= 0x7F; //定时器时钟12T模式3 M9 E( u5 r* I( m+ q2 ^
TMOD &= 0xF0; //设置定时器模式5 e. e) X$ T! K) O5 H
TL0 = 0xC0; //设置定时初始值0 o: e0 l' q: K1 A; ?9 s
TH0 = 0x63; //设置定时初始值
; S& o9 }* `4 R% [& o& f TR0 = 1; //打开定时器
; O4 b+ C7 `: @4 n* ^ ET0 = 1;
D9 E1 r s$ a$ h$ |7 s, w}# i( q8 u7 V) l; C5 P
7 h, R d6 k& _# D$ W0 m# ~% H! a9 q, L- f7 n
void PWM_Init(void)
9 N' {& ^9 t$ I/ s$ k2 c{
9 I& R$ F9 i, j" I! x* W( B P_SW2 |= 0x80; //使能访问XSFR,否则无法访问以下特殊寄存器5 C" w) e+ I5 g% E: b
5 |2 d3 } P R% ]6 V4 m PWMCFG |= PWM1A_SET_0; //设置端口的初始电平1 m8 x4 B. E% s D( v, l
PWMCFG |= PWM1B_SET_0;3 p7 W5 l. k9 Z- C' n, f J
PWMCFG |= PWM2A_SET_0;
( y. \5 n9 n; Q) d PWMCFG |= PWM2B_SET_0;
4 H# e p9 N& c
" O7 f; `7 p7 Y n PWMCKS = 0x00; //选择PWM时钟为Fosc/(0+1)
7 O- L, d$ Q4 G, k. Y2 v2 D //PWMC = CYCLE; //设置PWM周期
: c7 S% m( O+ D e' X" r
& e; }& ~7 _' ?" k. w7 k3 k PWM4T1 = 1;
4 E3 T2 n# S+ B5 Y PWM4T2 = 0x00; & z, i5 L' ^0 \8 K' X/ d
PWM4CR = 0x00; //PWM4输出到P2.2,使能PWM4T2翻转中断
) u/ N- T6 [9 K- T$ y% z0 A7 u9 r: B+ y" n
. i' G" K4 R' y2 H, ^/ c0 I
PWMCR |= 0x84; //使能PWM发生器,使能PWM计数器归零中断
- v# U9 r E7 w P_SW2 &= ~0x80;2 T t) G. V2 T1 F: b& A& k
}
5 L) H! I, \7 z$ I( t" v6 Q- T* [ k* x F/ V) L8 v
( H( _2 ?" {' @- n' D//起始频率工作,振幅比
; t4 S8 S5 p, |8 Fvoid Start_PWM(u16 CYCLE)6 T9 E1 L: J% I2 |
{! _" x3 v4 J: B5 k1 s# |) G# R
P_SW2 |= 0x80;
; ]) A6 g1 F: k if(Delay_Status == 1)
" @) e/ L, W+ _ {9 n' |1 ^ e& F/ w- ?) |" D
PWMCR &= ~0x84; 9 P. Q D4 A- `0 ~! w: P
PWM2A = 0;
' l5 s# g% z- Y: z: H }5 K9 A7 D6 L1 M' m* m: Y
else
3 T+ v+ c$ \$ H, g {$ g6 U+ g3 o5 F L. [/ \
PWMC = CYCLE; //设置pwm周期
% m+ F$ _1 D5 X
! V: o+ B4 ^) W; t
4 J+ O8 J7 t( S0 t9 a PWM4T1 = 1;
8 n) e: Y1 v+ t# C/ e- U8 | PWM4T2 = CYCLE*DUTY/100+1;, l4 _3 p' t% @/ Z, l: A
* Z1 H j4 D/ ?
PWMCR |= 0x84; //使能PWM信号输出
" Y! y$ C3 _5 K) h1 k) ^3 D* c }
- `7 e; ^( F; M" p; m P_SW2 &= ~0x80;& A P1 A: Q k/ ^& h I
}" K k7 `5 { l D7 i! Q) a
- q2 Y6 |0 n/ j0 A$ R0 Hvoid Timer0_Isr(void) interrupt 1
1 S5 Q P; s, y2 v) t/ d1 b! H7 y% e{ # u: s: p9 x8 I5 b7 y% }
cnt++;
# V0 b7 Z* R; U- A+ X. R if(cnt >= 100) //100*20ms=2s% F( n6 v# b- W3 n1 L
{0 a! u; D/ r/ `3 @, K
cnt = 0;+ J0 _+ z2 Q2 v7 z: I* X4 u* L
Delay_Status = !Delay_Status;
$ G% l! x8 F( W: y5 E9 g }
8 V3 y" o* K7 W# A( r}. F3 ^' Y4 W# }) s7 v6 V
2 J- H- h8 ]. s9 X9 k
|
|