|
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
|
|