|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
很简单的使用定时器0定时两秒,控制PWM波,发现没有进入定时器0中断,一直没有发现问题出在哪一步,哪位大哥帮忙看看!( f! {1 M. z2 m# T a% f, F
void main()
: |8 g2 {) k3 l' v{7 u% v: n; i, q' _( `
IO_Config(); //将所有的IO口配置为准双向口6 s, j0 ^) m b! b! g5 B
Uart_Init(); //初始化串口
3 b" I: ]4 k2 g9 p y, G) U" e timer0_Init();
6 o# h$ l# p; P+ k. o! u ADC_Init(); //初始化ADC# A3 U9 z( e, ?% _' @* `
PWM_Init();
6 }1 D% r) q1 K$ n$ F* y2 ~ EA = 1; //打开总中断
. W- s/ L) v- {' p9 ^ Start_PWM(CYCLE1M);7 {! C/ P6 ]8 v
while(1)! j. b3 c( q0 Y
{
( D' x7 I" N; R! m* f( a" Q2 T }
. `8 T' t/ [, Q C: t# p, S2 a, o}
3 r; V+ p) n" A, O. D; d; r( d" e) e+ p* d* @
7 _7 @- b7 a+ u2 c
0 |1 H$ `# M; X$ Mbit Delay_Status = 0;
( `3 j( y9 x0 z1 [* {! o* v7 }volatile u8 cnt = 0;# q# |6 `" Z3 Q# V. y9 A
+ H" b7 O6 O! G) P/ X$ I0 J& ~% Q' g+ s0 m
void Timer0_Init(void) //20毫秒@24.000MHz
) V! N" A* O) e" e# e) y2 H0 G) `{1 W. i+ [" H% A" u T4 u1 c) w
AUXR &= 0x7F; //定时器时钟12T模式* ~) K, ^5 O+ P! B
TMOD &= 0xF0; //设置定时器模式
8 e) ]5 i/ d7 k. q" m TL0 = 0xC0; //设置定时初始值! a7 T j+ R; I, r3 W* ]
TH0 = 0x63; //设置定时初始值& e# t3 ^! a3 b/ {% z7 w+ g( H
TR0 = 1; //打开定时器5 j: D: I$ H f H6 j
ET0 = 1;
0 t/ S+ D+ h" W& g9 T( ?( h}
' B5 a6 N4 e/ z0 v9 ?6 w# L9 _$ ]* }3 m, n
, w, w6 y7 G" O, R0 E# k, F
void PWM_Init(void)+ M1 r1 F. a1 \7 ]' k2 Q
{ & R! X2 M3 O/ B3 q) h6 }6 K) j' A. B
P_SW2 |= 0x80; //使能访问XSFR,否则无法访问以下特殊寄存器 ?: A/ ?6 K" ^( T4 ~
; |/ Z: ]5 I- u, R/ d9 P. S( E
PWMCFG |= PWM1A_SET_0; //设置端口的初始电平
! B: X |. K& R+ } PWMCFG |= PWM1B_SET_0;
: i* J& a, V8 v2 D& t8 g3 R; {. o PWMCFG |= PWM2A_SET_0;
1 {3 `9 ^. p3 y8 J& X# n' {6 M PWMCFG |= PWM2B_SET_0;
3 a: r- ]. Z% a1 S* n1 ^7 F! n " W) t. q; y, g: i) F
PWMCKS = 0x00; //选择PWM时钟为Fosc/(0+1)4 @. m- W: T; m# y0 e) ?
//PWMC = CYCLE; //设置PWM周期0 @9 C5 ~8 ^- H; h- j' I/ u
. t0 i/ z- e9 x2 E9 x! v- k! ^3 g* H PWM4T1 = 1; * E( ~1 U: |2 P" F
PWM4T2 = 0x00;
k7 v. G! [2 h# [. P PWM4CR = 0x00; //PWM4输出到P2.2,使能PWM4T2翻转中断
6 N+ j! W" z" g) f' ~. k2 d
/ Q$ Y. e6 F5 T9 R% y
) x, ]; c3 _. F. T% h7 j PWMCR |= 0x84; //使能PWM发生器,使能PWM计数器归零中断0 \9 b% C! d& s; H( d% x c
P_SW2 &= ~0x80;8 X' D+ o% [, C
}/ g! L* @: F1 D. {2 u8 P k* o) y) ?
" |& R& x4 f, g, M% o
/ x j! K+ ^) C% c) u0 D$ L* l
//起始频率工作,振幅比" [, c6 _( b% O8 r
void Start_PWM(u16 CYCLE)2 h& `. F& M: S# o1 T# p& O5 C+ U
{
$ f8 n1 S0 ]) e1 i% i8 s3 ` P_SW2 |= 0x80;
! r2 a- p1 y# ~( Q+ L if(Delay_Status == 1)2 H+ U8 X3 R( W9 O# V
{+ b5 c/ W1 G" X# J
PWMCR &= ~0x84;
0 G% K8 m i% M. w PWM2A = 0;
+ e) |, |+ v0 W. J" Q* d# H& L# @ }6 a" P9 k7 ]' T" @# z& b- b1 P) W
else1 T" \. ], p2 ^% O O+ `6 d4 v& w
{' @( x R6 ?3 @) C! D a
PWMC = CYCLE; //设置pwm周期
* Y) u1 c+ \) l$ V2 D
1 b0 n0 M, q; R( X! M7 w; O
1 i$ }- ^4 ~$ p$ _0 z. E4 r5 W" w1 a PWM4T1 = 1;4 p6 Z5 o0 d) u: S: J3 f
PWM4T2 = CYCLE*DUTY/100+1;+ k/ ?7 X+ a; _& m& o) U: _
" ^. k' o* _) h' V9 \ PWMCR |= 0x84; //使能PWM信号输出
$ O, z7 Y/ c9 W8 Q+ ^$ U }7 J0 s& g2 L: @2 `: T6 _
P_SW2 &= ~0x80;
9 E0 u7 r4 Y$ O2 v}
8 f6 E2 j7 P$ c- h5 j7 D
m" g7 Z* W. Z4 b- G6 Q. Bvoid Timer0_Isr(void) interrupt 1 8 d& r# B1 j" u0 O, {5 M: p! G
{ / Z! `" a; O2 f
cnt++;- A/ T% ~- j& T0 _
if(cnt >= 100) //100*20ms=2s
' @4 A+ ?4 s6 l I* J8 |% ` {
2 Q2 Q" l/ G: K/ G cnt = 0;# e8 Y7 D. G6 m+ X1 |
Delay_Status = !Delay_Status;
7 O5 f6 i0 X) I7 o6 [ }5 e6 n6 j K; ?
}
) d; r/ @4 c( E8 Q3 M3 [" o( m8 i' z
|
|